数字信号处理调制与解调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);

最后运行就能实现效果

经验分享 程序员 微信小程序 职场和发展