数字信号处理调制与解调MATLAB仿真
首先在命令行输入一个
edit math
作为头文件 然后在头文件math.h里面写上调制与解调函数,这里就不一一解释每行代码的意思,有问题可以评论区问。
%AM调制信号的MATLAB实现 dt=0.0001; %时间采样频谱 fc=10; %载波中心频率 T=5; %信号时长 N=T/dt; %采样点个数 t=[0:N-1]*dt; %采样点的时间序列 wc=2*pi*fc; mt=sqrt(2)*cos(2*pi*t); %信源 subplot(421); plot(t,mt); title(基带调制信号); axis([0 5 -4 4]); line([0,5],[0,0],color,r); %mt的最大值是sqrt(2) A=2; subplot(422); plot(t,A+mt); title(调制信号); axis([0 5 -4 4]); line([0,5],[0,0],color,b); sam=(A+mt).*cos(wc*t); subplot(423); plot(t,sam); hold on; %画出AM信号波形 plot(t,A+mt,r-); title(AM调制信号及其包络 A=2); line([0,5],[0,0],color,k); A=1; sam=(A+mt).*cos(wc*t); subplot(424); plot(t,sam); hold on; %画出AM信号波形 plot(t,A+mt,r-); title(AM调制信号及其包络 A=1(混叠)); line([0,5],[0,0],color,k); A=2; sam=(A+mt).*cos(wc*t); st = sam.*cos(wc*t); subplot(425); plot(t,st); title(AM调制信号及其包络 A=1(混叠)); line([0,5],[0,0],color,k); hold on; %画出AM信号波形 [f,sf]=T2F(t,st);%傅里叶变换 [t,st]=lpf(f,sf,2 * fm);%低通滤波 subplot(426) plot(t,st); title(经过低通滤波的相干解调信号波形); axis([0 4 -4 4]); line([0,4],[0,0],color,k);
然后在命令行重新输入
edit
后面不用跟名称然后输入
-
子程序T2T
function [f,sf]= T2F(t,st) % dt = t(2)-t(1); T=t(end); df = 1/T; N = length(st); f=-N/2*df : df : N/2 * df-df; sf = fft(st); sf = T/N * fftshift(sf);
重复操作 命令行输入edit
-
子程序F2T
function[t,st]=F2T(f,Sf) df=f(2)-f(1); fmax=(f(end)-f(1)+df); dt=1/fmax; N=length(f); t=[0:N-1] * dt; Sf=fftshift(Sf); st=fmax * ifft(Sf); st=real(st);
-重复操作 命令行输入edit
-
子程序lpm
function[t,st]=lpf(f,sf,B) df=f(2)-f(1); fN=length(f); ym=zeros(1,fN); xm=floor(B/df); xm_shift=[-xm:xm-1]+floor(fN/2); ym(xm_shift)=1; yf=ym.* sf; [t,st]=F2T(f,yf);
最后运行就能实现效果