📄 fm.m
字号:
%fm.m
%频率调制与解调的Matlab演示源程序
%可以任意改原调制信号函数m(t)
%本例调制信号为m(t)=sinc(100*t)
echo off
close all
clc
t0=0.2; %信号的持续时间,用来定义时间向量
ts=0.001; %抽样间隔
fs=1/ts; %抽样频率
%*********************************************************************
fc=300; %载波频率,fc可以任意改变
%*********************************************************************
t=[-t0/2:ts:t0/2]; %时间向量
kf=100; %偏差常数
df=0.25; %所需的频率分辨率,用在求傅里叶变换时,它表示FFT的最小频率间隔
%*********************************************************************
m=sinc(100*t); %调制信号,m(t)可以任意更改
%*********************************************************************
%*********************************************************************
%求信号m(t)的积分,这是对离散信号求积分的好方法
int_m(1)=0;
for i=1:length(t)-1
int_m(i+1)=int_m(i)+m(i)*ts;
end
%*********************************************************************
[M,m,df1]=fftseq(m,ts,df); %对调制信号m(t)求傅里叶变换
M=M/fs; %缩放,便于在频谱图上整体观察
f=[0:df1:df1*(length(m)-1)]-fs/2; %时间向量对应的频率向量
u=cos(2*pi*fc*t+2*pi*kf*int_m); %调制后的信号
[U,u,df1]=fftseq(u,ts,df); %对调制后的信号u求傅里叶变换
U=U/fs; %缩放
%*********************************************************************
%法一:不调用子程序env_phas和loweq,直接在主程序中表示
%t1=[0:ts:ts*(length(u)-1)];
%z=hilbert(u);
%yq =z.*exp(-j*2*pi*fc*t1);
%dem =(1/(2*pi*kf))*diff(unwrap(angle(yq))*fs);
%*********************************************************************
%*********************************************************************
%法二:通过调用子程序env_phas和loweq来实现解调功能
[v,phase]=env_phas(u,ts,fc); %解调,求出u的相位
phi=unwrap(phase);%校正相位角,使相位在整体上连续,便于后面对该相位角求导
dem=(1/(2*pi*kf))*(diff(phi)*fs); %对校正后的相位求导
%再经一些线性变换来恢复原调制信号
%乘以fs是为了恢复原信号,因为前面使用了缩放
%*********************************************************************
disp('按任意键可以看到原调制信号和已调信号的曲线')
pause
figure(1)
subplot(2,1,1)
plot(t,m(1:length(t)))%现在的m信号是重新构建的信号,
%因为在对m求傅里叶变换时m=[m,zeros(1,n-n2)]
xlabel('时间t')
title('原调制信号的时域图')
subplot(2,1,2)
plot(t,u(1:length(t)))
xlabel('时间t')
title('已调信号的时域图')
disp('按任意键可以看到原调制信号和已调信号的在频域内的图形')
pause
figure(2)
subplot(2,1,1)
plot(f,abs(fftshift(M)))%fftshift:将FFT中的DC分量移到频谱中心
xlabel('频率f')
title('原调制信号的频谱图')
subplot(2,1,2)
plot(f,abs(fftshift(U)))
xlabel('频率f')
title('已调信号的频谱图')
disp('按任意键可以看到在无噪声情况下的原调制信号的波形和解调信号的输出情况')
pause
figure(3)
subplot(2,1,1)
plot(t,m(1:length(t)))
xlabel('时间t')
title('原调制信号的时域图')
subplot(2,1,2)
plot(t,dem(1:length(t)))
xlabel('时间t')
title('解调后信号的时域波形')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -