通信原理课程设计 基于Matlab的通信系统仿真 -模拟调制系统

通信原理课程设计 基于Matlab的通信系统仿真 -模拟调制系统,第1张

AM调制的代码:

% f0; 载波频率 (Hz)

% fm; 单(多)频调制频率点 (Hz)

% B: 实际基带带宽 %==================

% MaB; 最大带宽 (Hz) %==================

% fs; (中频)采样频率 (Hz)

% fs1: 第一采样频率

% fs2_expect 预期的(第二)采样频率 (Hz)

% T ; 仿真时间 (s)

% beta; 调幅系数

% Kv ; VCO灵敏度 (rad/s/V)

% n0; 噪声功率谱密度 (W/kHz)

function AM_Simulation(f0,DF,fm,B,MaxB,fs,fs1,fs2_expect,T,beta,K1,K2,Kv ,n0)

%====================================================================================

Ts = 1/fs; % 采样间隔

N = floor(T/Ts); % 时域采样总点数 % (基于fs1)

t = 0:Ts:(N-1)Ts; % 时间采样

%-------------------------------------------------------------

% 计算以第一采样频率fs1欠采以后的载波频率f01

f01 = f0 - floor(f0/fs1)fs1;

% if(f01>fs1/2)

% f01 = fs1 - f01;

% end;

%-------------------------------------------------------------

% 计算半带滤波的级数

K = floor(log2(fs1/fs2_expect)); % fs2_expect为预期的第二采样频率

fs2 = fs1/(2^K); % fs2 为实际的第二采样频率

%=========================================================================================================================================

% 调制信息

M = length(fm);

am = zeros(1,N);

for m=1:M

am = am + cos(2pifm(m)t);

end;

dc_offset = max(am)/beta;

a = dc_offset + am ;

%----------------------

am = am/dc_offset;

a = a/dc_offset;%%%%%%

%----------------------

%=========================================================================================================================================

% 调幅

theta0 = 2pirand ; % 载波的随机初始相位

s = acos( 2pi (f0+DF) t + theta0); % 已调幅信号

%=========================================================================================================================================

% 噪声信道

noise = GenerateNoise(n0,fs,N,(f0+DF));

r = s + noise;

%-----------------------------------------------------------------------------------------------------------------------------------------

% r_downRate = RateAdjust(r,fs, fs1, 'ItpFlt'); %%%%%% 注意:若对白噪声(或带限白噪声)进行欠采样则将导致噪声功率谱密度的提升。

%-----------------------------------------------------------------------------------------------------------------------------------------

%=========================================================================================================================================

% 接收机带通滤波

fc = MaxB;

% r_BPF = BPF_Filter(r, (f0+DF),fc,fs);

[r_BPF,hBPF] = BPF_Filter(r, f0,fc,fs); % 接收机预先知道f0,但预先不知道DF

%----------------------------------------------------------------------------------------------

%theta_BPF = Phi_BPF(f0,fc,fs, (f0+DF));

theta_BPF = Phi_BPF(hBPF ,fs, (f0+DF)); % 该参数不用于解码,但在绘制输入锁相环的theta1时需要知道该参数

%=========================================================================================================================================

% 对BPF输出信号进行速率调整

r_BPF_downRate = RateAdjust(r_BPF,fs, fs1, 'ItpFlt');% 选择fs1需确保对带限白噪声进行的不是欠采样

%---------------------------------------------------------------

Ts1 = 1/fs1; % 采样间隔

N1 = length(r_BPF_downRate); % 时域采样总点数 % (基于fs1)

t1 = 0:Ts1:(N1-1)Ts1; % 时间采样

%==============================================================================================================================================

% 以预先已知的f01从AM信号中得到I,Q信号

yc = r_BPF_downRate (2cos(2pif01t1)); %%%%%%

ys = r_BPF_downRate (-2sin(2pif01t1)); %%%%%%

zI = HalfBandFilters(yc,fs1, K);%%

zQ = HalfBandFilters(ys,fs1, K);%%

[xI, IDelay] = LPF_Filter(zI, B, fs2);

[xQ, QDelay] = LPF_Filter(zQ, B, fs2);

%----------------------------------------------------------

Ts2 = 1/fs2; % 采样间隔

N2 = length(xI); % 时域采样总点数 % (基于fs2)

t2 = 0:Ts2:(N2-1)Ts2; % 时间采样

%----------------------------------------------------------

thetaIQ = 2piDF(15(2^(K)-1)/fs1) + 2piDF IDelay /fs2; % 该参数不用于解码,但在绘制输入锁相环的theta1时需要知道该参数

%----------------------------------------------------------------------------------------------------------

%==============================================================================================================================================

% 在基带上用锁相环对频差以及初相进行跟踪以及补偿

% g = mean(abs(xI+jxQ));

% xI = xI/g; % 调整输入锁相环的信号幅度, 需改为AGC

% xQ = xQ/g;

% 基带锁相

[theta2, Io,Qo, PDo,LFo] = PLL_Baseband(xI,xQ, fs2, K1,K2,Kv, 1); % 1, Carrier

a_demod = Io;

%==============================================================================================================================================

% 去直流

% dc = mean(a_demod(floor(02N2):N2)); % Temp

% a_demod_offsetted = a_demod - dc;

fcL=60;%Hz

a_demod_offsetted = AHPF_Filter(a_demod,fs2, fcL);

%==============================================================================================================================================

% TxRx

figure(1);

subplot(4,2,1);plot(t,a);ylabel('a(t)');

subplot(4,2,3);plot(t,s);ylabel('s_A_M(t)'); axis([min(t) max(t) -inf Inf]);

subplot(4,2,5);plot(t,r);ylabel('r(t)'); axis([min(t) max(t) -inf Inf]);

subplot(4,2,7);plot(t,r_BPF);ylabel('r_B_P_F(t)'); axis([min(t) max(t) -inf Inf]);

xlabel('t (s)')

N_FFT = 2^(floor(log2(fs/B100)));

subplot(4,2,2);Psd_plot_log_N(a,fs,N_FFT);

subplot(4,2,4);Psd_plot_log_N(s,fs,N_FFT);

subplot(4,2,6);Psd_plot_log_N(r,fs,N_FFT);

subplot(4,2,8);Psd_plot_log_N(r_BPF,fs,N_FFT);

% PLL

figure(2);

plot(t2,PDo);hold on;plot(t2,LFo,'r');hold off;axis([min(t2) max(t2) -inf inf]);grid on;legend('PD\o','LF\o'); hold off;

xlabel('t (s)')

figure(3);

theta1 = theta0 + theta_BPF - thetaIQ + 2pi DF t2; % 基于fs2

theta2 = theta2;

subplot(311);plot(t2,theta1);hold on;plot(t2,theta2,'r');hold off;

legend('\theta_1','\theta_2');axis([min(t2) max(t2) -inf Inf]); grid on; title('Baseband Carrier Synchronization(2)');

theta_e = theta1-theta2;

subplot(312);plot(t2,theta_e);

ylabel('\theta_e(t)');legend('\theta_e');axis([min(t2) max(t2) min(theta_e)-1 max(theta_e)+1]); grid on;

theta_e = angle(exp(jtheta_e));

subplot(313);plot(t2,theta_e);

xlabel('t (s)'),ylabel('\theta_e(t)');legend('\theta_e (-\pi, \pi] ');axis([min(t2) max(t2) min(theta_e)-1 max(theta_e)+1]); grid on;

% TxRx

figure(4);

subplot(611);plot(t,a);xlabel(''),ylabel('a(t)');

subplot(612);plot(t,s);xlabel(''),ylabel('s_A_M(t)');

subplot(613);plot(t,r);xlabel(''),ylabel('r(t)');

subplot(614);plot(t,r_BPF);xlabel(''),ylabel('r_B_P_F(t)');

subplot(615);plot(t2,a_demod);xlabel('t'),ylabel('a_d(t)');

subplot(616);plot(t2,a_demod_offsetted);xlabel('t'),ylabel('m(t)');

% TxRx

figure(5);

subplot(211);plot(t,a);xlabel(''),ylabel('a(t)');

subplot(212);plot(t2,a_demod_offsetted);xlabel('t'),ylabel('m(t)');

figure(4);

%==============================================================================================================================================

clear

clc

pntaps=[0 0 1 1 ];

N=length(pntaps)

pninitial=[0 0 0 1];

pndata=zeros(1,2^N-1);

pnregister=pninitial;

n=0;kk=0;

while kk==0

n=n+1;

pndata(1,n)=pnregister(1,1);

feedback=rem((pnregisterpntaps'),2);

pnregister=[feedback,pnregister(1,1:N-1)];

if pnregister==pninitial;

kk=1;

end

end

pndata=2pndata-1;

Rm(1)=sum(pndatapndata)/n

for k=1:n-1

Rm(k+1)=sum(pndatacircshift(pndata,[0,k]))/n

end

subplot(2,1,1);x=[0:n-1];stem(x,pndata);

title('m序列发生器的输出');

axis([0 30 -15 15]);

subplot(2,1,2);plot(x,Rm);

title('m序列的自相关函数')

axis([0 30 0 15]);

在simulink的communication模块库中有几个相应的模块。在SimPowerSystems模块库里面有几个利用锁相环设计系统的例子。自己在matlab里面搜下PLL,很容易找到。其实学matlab就是看例子。

新建一个m文件

在m文件里面第一行输入function

[x,y]=pll(x1,y1,x2,y2),这里x1

x2

y1

y2是你函数的输入值,

x

y是输出值,接着定义你要实现的功能,比如:x

=

x1

+

x2;

y

=

y1

+

y2;

接着保存这个m文件,注意!!

这个m文件的名字必须是定义的函数的名字,即保存为pllm

否则会出错。

接着在matlab命令窗口中输入

pll(1,2,3,4)看看会得到什么?

也可以另外创建一个m文件,在这里调用pll()这个函数。

以上就是关于通信原理课程设计 基于Matlab的通信系统仿真 -模拟调制系统全部的内容,包括:通信原理课程设计 基于Matlab的通信系统仿真 -模拟调制系统、请问 利用MATLAB开发一个n=5的m序列发生器的仿真程序,其本原多项式为g(x)=1+x^3+x^4.如何写代码 在线等 谢、控制系统中含有非线性环节,怎样用matlab仿真其频率特性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9736645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存