调频FM仿真程序.docx
《调频FM仿真程序.docx》由会员分享,可在线阅读,更多相关《调频FM仿真程序.docx(17页珍藏版)》请在冰豆网上搜索。
![调频FM仿真程序.docx](https://file1.bdocx.com/fileroot1/2023-2/4/eab81cca-a020-4613-ad3a-78aa8f443d26/eab81cca-a020-4613-ad3a-78aa8f443d261.gif)
调频FM仿真程序
一:
%初始化
echooff
closeall
clearall
clc
%FM调制
dt=0.001;%设定时间步长
t=0:
dt:
1.5;%产生时间向量
am=5;%设定调制信号幅度
fm=5;%设定调制信号频率
mt=am*cos(2*pi*fm*t);%生成调制信号
fc=50;%设定载波频率
ct=cos(2*pi*fc*t);%生成载波
kf=10;%设定调频指数
int_mt
(1)=0;
fori=1:
length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt;%求信号m(t)的积分
end%调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);%已调信号
disp('按任意键可以看到原调制信号、载波信号和已调信号的曲线')
pause
%****************figure
(1)********************
figure
(1)
subplot(3,1,1);plot(t,mt);%绘制调制信号的时域图
xlabel('时间t');
title('调制信号的时域图');
subplot(3,1,2);plot(t,ct);%绘制载波的时域图
xlabel('时间t');
title('载波的时域图');
subplot(3,1,3);
plot(t,sfm);%绘制已调信号的时域图
xlabel('时间t');
title('已调信号的时域图');
%******************************************
二:
%初始化
echooff
closeall
clearall
clc
%FM调制
dt=0.001;%设定时间步长
t=0:
dt:
1.5;%产生时间向量
am=5;%设定调制信号幅度
fm=5;%设定调制信号频率
mt=am*cos(2*pi*fm*t);%生成调制信号
fc=50;%设定载波频率
ct=cos(2*pi*fc*t);%生成载波
kf=10;%设定调频指数
int_mt
(1)=0;
fori=1:
length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt;%求信号m(t)的积分
end%调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);%已调信号
%添加高斯白噪声
sn1=10;%设定信躁比(小信噪比)
sn2=30;%设定信躁比(大信噪比)
sn=0;%设定信躁比(无信噪比)
db=am^2/(2*(10^(sn/10)));%计算对应的高斯白躁声的方差
n=sqrt(db)*randn(size(t));%生成高斯白躁声
nsfm=n+sfm;%生成含高斯白躁声的已调信号(信号通
%过信道传输)
%FM解调
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn=abs(hilbert(diff_nsfm));%hilbert变换,求绝对值得到瞬时%幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
%时域到频域转换
ts=0.001;%抽样间隔
fs=1/ts;%抽样频率
df=0.25;%所需的频率分辨率,用在求傅里叶变换
%时,它表示FFT的最小频率间隔
%对调制信号m(t)求傅里叶变换
m=am*cos(2*pi*fm*t);%原调信号
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df1=fs/n;%以上程序是对调制后的信号u求傅里变换
M=M/fs;%缩放,便于在频谱图上整体观察
f=[0:
df1:
df1*(length(m)-1)]-fs/2;%时间向量对应的频率向量
%对已调信号u求傅里变换
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(sfm);
n=2^(max(nextpow2(n1),nextpow2(n2)));
U=fft(sfm,n);
u=[sfm,zeros(1,n-n2)];
df1=fs/n;%以上是对已调信号u求傅里变换
U=U/fs;%缩放
disp('按任意键可以看到原调制信号和已调信号在频域内的图形')
pause
%*******************figure
(2)**********************
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('已调信号的频谱图')
三:
%初始化
echooff
closeall
clearall
clc
%FM调制
dt=0.001;%设定时间步长
t=0:
dt:
1.5;%产生时间向量
am=5;%设定调制信号幅度
fm=5;%设定调制信号频率
mt=am*cos(2*pi*fm*t);%生成调制信号
fc=50;%设定载波频率
ct=cos(2*pi*fc*t);%生成载波
kf=10;%设定调频指数
int_mt
(1)=0;
fori=1:
length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt;%求信号m(t)的积分
end%调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);%已调信号
%添加高斯白噪声
sn1=10;%设定信躁比(小信噪比)
sn2=30;%设定信躁比(大信噪比)
sn=0;%设定信躁比(无信噪比)
db=am^2/(2*(10^(sn/10)));%计算对应的高斯白躁声的方差
n=sqrt(db)*randn(size(t));%生成高斯白躁声
nsfm=n+sfm;%生成含高斯白躁声的已调信号(信号通
%过信道传输)
%FM解调
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn=abs(hilbert(diff_nsfm));%hilbert变换,求绝对值得到瞬时%幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
%时域到频域转换
ts=0.001;%抽样间隔
fs=1/ts;%抽样频率
df=0.25;%所需的频率分辨率,用在求傅里叶变换
%时,它表示FFT的最小频率间隔
%对调制信号m(t)求傅里叶变换
m=am*cos(2*pi*fm*t);%原调信号
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df1=fs/n;%以上程序是对调制后的信号u求傅里变换
M=M/fs;%缩放,便于在频谱图上整体观察
f=[0:
df1:
df1*(length(m)-1)]-fs/2;%时间向量对应的频率向量
%对已调信号u求傅里变换
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(sfm);
n=2^(max(nextpow2(n1),nextpow2(n2)));
U=fft(sfm,n);
u=[sfm,zeros(1,n-n2)];
df1=fs/n;%以上是对已调信号u求傅里变换
U=U/fs;%缩放
disp('按任意键可以看到原调制信号、无噪声条件下已调信号和解调信号的曲线')
pause
%*****************figure(3)*********************
figure(3)
subplot(3,1,1);plot(t,mt);%绘制调制信号的时域图
xlabel('时间t');
title('调制信号的时域图');
subplot(3,1,2);plot(t,sfm);%绘制已调信号的时域图
xlabel('时间t');
title('无噪声条件下已调信号的时域图');
nsfm=sfm;
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn=abs(hilbert(diff_nsfm));%hilbert变换,求绝对值得到%瞬时幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
subplot(3,1,3);%绘制无噪声条件下解调信号的时域图
plot((1:
length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');
xlabel('时间t');
title('无噪声条件下解调信号的时域图');
四:
%初始化
echooff
closeall
clearall
clc
%FM调制
dt=0.001;%设定时间步长
t=0:
dt:
1.5;%产生时间向量
am=5;%设定调制信号幅度
fm=5;%设定调制信号频率
mt=am*cos(2*pi*fm*t);%生成调制信号
fc=50;%设定载波频率
ct=cos(2*pi*fc*t);%生成载波
kf=10;%设定调频指数
int_mt
(1)=0;
fori=1:
length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt;%求信号m(t)的积分
end%调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);%已调信号
%添加高斯白噪声
sn1=10;%设定信躁比(小信噪比)
sn2=30;%设定信躁比(大信噪比)
sn=0;%设定信躁比(无信噪比)
db=am^2/(2*(10^(sn/10)));%计算对应的高斯白躁声的方差
n=sqrt(db)*randn(size(t));%生成高斯白躁声
nsfm=n+sfm;%生成含高斯白躁声的已调信号(信号通
%过信道传输)
%FM解调
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn=abs(hilbert(diff_nsfm));%hilbert变换,求绝对值得到瞬时%幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
%时域到频域转换
ts=0.001;%抽样间隔
fs=1/ts;%抽样频率
df=0.25;%所需的频率分辨率,用在求傅里叶变换
%时,它表示FFT的最小频率间隔
%对调制信号m(t)求傅里叶变换
m=am*cos(2*pi*fm*t);%原调信号
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df1=fs/n;%以上程序是对调制后的信号u求傅里变换
M=M/fs;%缩放,便于在频谱图上整体观察
f=[0:
df1:
df1*(length(m)-1)]-fs/2;%时间向量对应的频率向量
%对已调信号u求傅里变换
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(sfm);
n=2^(max(nextpow2(n1),nextpow2(n2)));
U=fft(sfm,n);
u=[sfm,zeros(1,n-n2)];
df1=fs/n;%以上是对已调信号u求傅里变换
U=U/fs;%缩放
disp('按任意键可以看到原调制信号、小信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')
pause
%***************figure(4)******************
figure(4)
subplot(3,1,1);plot(t,mt);%绘制调制信号的时域图
xlabel('时间t');
title('调制信号的时域图');
db1=am^2/(2*(10^(sn1/10)));%计算对应的小信噪比高斯白躁声的方差
n1=sqrt(db1)*randn(size(t));%生成高斯白躁声
nsfm1=n1+sfm;%生成含高斯白躁声的已调信号(信号通
%过信道传输)
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;
end
diff_nsfmn1=abs(hilbert(diff_nsfm1));%hilbert变换,求绝对值得到%瞬时幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn1-zero;
subplot(3,1,2);
plot(1:
length(diff_nsfm),diff_nsfm);%绘制含小信噪比高斯白噪声已%调信号的时域图
xlabel('时间t');
title('含小信噪比高斯白噪声已调信号的时域图');
subplot(3,1,3);%绘制含小信噪比高斯白噪声解调信号的时域图
plot((1:
length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');
xlabel('时间t');
title('含小信噪比高斯白噪声解调信号的时域图');
%*****************************************
五:
%初始化
echooff
closeall
clearall
clc
%FM调制
dt=0.001;%设定时间步长
t=0:
dt:
1.5;%产生时间向量
am=5;%设定调制信号幅度
fm=5;%设定调制信号频率
mt=am*cos(2*pi*fm*t);%生成调制信号
fc=50;%设定载波频率
ct=cos(2*pi*fc*t);%生成载波
kf=10;%设定调频指数
int_mt
(1)=0;
fori=1:
length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt;%求信号m(t)的积分
end%调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt);%已调信号
%添加高斯白噪声
sn1=10;%设定信躁比(小信噪比)
sn2=30;%设定信躁比(大信噪比)
sn=0;%设定信躁比(无信噪比)
db=am^2/(2*(10^(sn/10)));%计算对应的高斯白躁声的方差
n=sqrt(db)*randn(size(t));%生成高斯白躁声
nsfm=n+sfm;%生成含高斯白躁声的已调信号(信号通
%过信道传输)
%FM解调
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn=abs(hilbert(diff_nsfm));%hilbert变换,求绝对值得到瞬时%幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
%时域到频域转换
ts=0.001;%抽样间隔
fs=1/ts;%抽样频率
df=0.25;%所需的频率分辨率,用在求傅里叶变换
%时,它表示FFT的最小频率间隔
%对调制信号m(t)求傅里叶变换
m=am*cos(2*pi*fm*t);%原调信号
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df1=fs/n;%以上程序是对调制后的信号u求傅里变换
M=M/fs;%缩放,便于在频谱图上整体观察
f=[0:
df1:
df1*(length(m)-1)]-fs/2;%时间向量对应的频率向量
%对已调信号u求傅里变换
fs=1/ts;
ifnargin==2
n1=0;
else
n1=fs/df;
end
n2=length(sfm);
n=2^(max(nextpow2(n1),nextpow2(n2)));
U=fft(sfm,n);
u=[sfm,zeros(1,n-n2)];
df1=fs/n;%以上是对已调信号u求傅里变换
U=U/fs;%缩放
disp('按任意键可以看到原调制信号、大信噪比高斯白噪声条件下已调信号和解调信号已调信号的曲线')
pause
%**************figure(5)******************
figure(5)
subplot(3,1,1);plot(t,mt);%绘制调制信号的时域图
xlabel('时间t');
title('调制信号的时域图');
db1=am^2/(2*(10^(sn2/10)));%计算对应的大信噪比高斯白躁声的方差
n1=sqrt(db1)*randn(size(t));%生成高斯白躁声
nsfm1=n1+sfm;%生成含高斯白躁声的已调信号(信号通过信道传输)
fori=1:
length(t)-1%接受信号通过微分器处理
diff_nsfm1(i)=(nsfm1(i+1)-nsfm1(i))./dt;
end
diff_nsfmn1=abs(hilbert(diff_nsfm1));%hilbert变换,求绝对值
%得到瞬时幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn1-zero;
subplot(3,1,2);
plot(1:
length(diff_nsfm1),diff_nsfm1);%绘制含大信噪比高斯
%白噪声已调信号的时域图
xlabel('时间t');
title('含大信噪比高斯白噪声已调信号的时域图');
subplot(3,1,3);%绘制含大信噪比高斯白噪声解调信号
%的时域图
plot((1:
length(diff_nsfmn1))./1000,diff_nsfmn1./400,'r');
xlabel('时间t');
title('含大信噪比高斯白噪声解调信号的时域图');