当前位置:文档之家› FM调制解调系统设计与仿真汇总

FM调制解调系统设计与仿真汇总

FM调制解调系统设计与仿真汇总
FM调制解调系统设计与仿真汇总

基于Matlab 的FM 调制解调仿真

叶傻逼 白痴NO.1

1.1 FM 调制模型的建立

图2 FM 调制模型

其中,()m t 为基带调制信号,设调制信号为

()cos(2)m m t A f t π=

设正弦载波为

()cos(2)c c t f t π=

信号传输信道为高斯白噪声信道,其功率为2σ。

1.2 调制过程分析

在调制时,调制信号的频率去控制载波的频率的变化,载波的瞬时频偏随调制信号()m t 成正比例变化,即

(

)

()f d t K m t dt

?=

式中,f K 为调频灵敏度(()rad s V ?)。 这时相位偏移为

()()f t K m d ?ττ=?

则可得到调频信号为

()cos ()FM c f s t A t K m d ωττ??=+??

?

调制信号产生的M 文件:

dt=0.001; %设定时间步长

t=0:dt:1.5; %产生时间向量

am=15; %设定调制信号幅度←可更改 fm=15; %设定调制信号频率←可更改 mt=am*cos(2*pi*fm*t); %生成调制信号

fc=50; %设定载波频率←可更改 ct=cos(2*pi*fc*t); %生成载波 kf=10; %设定调频指数 int_mt(1)=0; %对mt 进行积分 for i=1:length(t)-1

int_mt(i+1)=int_mt(i)+mt(i)*dt; end

sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt); %调制,产生已调信号

0.5

1 1.5

-10

010时间t

调制信号的时域图

0.5

1

1.5

-101时间t

载波的时域图

00.5

1 1.5

-10

010时间t

已调信号的时域图

图3 FM 调制

1.3 FM 解调模型的建立

调制信号的解调分为相干解调和非相干解调两种。相干解调仅仅适用于窄带调频信号,且需同步信号,故应用范围受限;而非相干解调不需同步信号,且对于NBFM 信号和WBFM 信号均适用,因此是FM 系统的主要解调方式。在本仿真的过程中我们选择用非相干解调方法进行解调。

图4 FM 解调模型

非相干解调器由限幅器、鉴频器和低通滤波器等组成,其方框图如图5所示。限幅器输入为已调频信号和噪声,限幅器是为了消除接收信号在幅度上可能出现的畸变;带通滤波器的作用是用来限制带外噪声,使调频信号顺利通过。鉴频器中的微分器把调频信号变成调幅调频波,然后由包络检波器检出包络,最后通过低通滤波器取出调制信号。

1.4 解调过程分析

设输入调频信号为

()()cos(())t

t FM c f S t S t A t K m d ωττ-∞

==+?

微分器的作用是把调频信号变成调幅调频波。微分器输出为

[]()()()()sin(())

i FM d t

c f c f dS t dS t S t dt dt

K m t t K m d ωωττ+-∞==

=-+?

包络检波的作用是从输出信号的幅度变化中检出调制信号。包络检波器输出为

[]()()()o d c f d c d f S t K Km t K K Km t ωω++==

d K 称为鉴频灵敏度(V Hz )

,是已调信号单位频偏对应的调制信号的幅度,经低通滤波器后加隔直流电容,隔除无用的直流,得

()()o d f m t K K m t =

微分器通过程序实现,代码如下:

for i=1:length(t)-1 %接受信号通过微分器处理 diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt; end

diff_nsfmn = abs(hilbert(diff_nsfm)); %hilbert 变换,求绝对值得到瞬时幅度

(包络检波)

通过M 文件绘制出两种不同信噪比解调的输出波形如下:

00.51 1.5

-5

5时间t

调制信号的时域图

0.5

1

1.5

-50

5时间t

无噪声条件下已调信号的时域图

00.5

1 1.5

-5

5时间t

无噪声条件下解调信号的时域图

图5 FM 解调

1.5 高斯白噪声信道特性

设正弦波通过加性高斯白噪声信道后的信号为

()cos()()c r t A t n t ωθ=++

其中,白噪声()n t 的取值的概率分布服从高斯分布。

MATLAB 本身自带了标准高斯分布的内部函数randn 。randn 函数产生的随机序列服从均值为0m =,方差21σ=的高斯分布。

正弦波通过加性高斯白噪声信道后的信号为

()cos()()c r t A t n t ωθ=++

故其有用信号功率为

2

2

A S =

噪声功率为

2N σ=

信噪比S

N

满足公式

1010log ()S B N

=

则可得到公式

22

10

210

B A σ=

?

我们可以通过这个公式方便的设置高斯白噪声的方差。

在本仿真过程中,我们选择了10db 和30db 两种不同信噪比以示区别,其时域图如图7和图8。

00.51 1.5

-5

5时间t

调制信号的时域图

0.5

1

1.5

-50

5时间t

无噪声条件下已调信号的时域图

00.5

1 1.5

-5

5时间t

无噪声条件下解调信号的时域图

图6 无噪声条件下已调信号的时域图

00.51 1.5

-5

5时间t

调制信号的时域图

500

1000

1500

-5000

5000

时间t

含小信噪比高斯白噪声已调信号的时域图

00.5

1 1.5

-20

20时间t

含小信噪比高斯白噪声解调信号的时域图

图7 含小信噪比高斯白噪声已调信号的时域图

00.51 1.5

-5

5时间t

调制信号的时域图

500

1000

1500

-5000

5000

时间t

含大信噪比高斯白噪声已调信号的时域图

00.5

1 1.5

-5

5时间t

含大信噪比高斯白噪声解调信号的时域图

图8 含大信噪比高斯白噪声已调信号的时域图

三.仿真实现

图10 程序流程图

3.1 MATLAB源代码

%FM调制解调系统.m

%频率调制与解调的Matlab演示源程序

%可以任意改原调制信号函数m(t)

%信息工程陈丽丹07323202 %·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·

%*****************初始化******************

echo off

close all

clear all

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;

for i=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解调*******************

for i=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;

if nargin==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;

if nargin==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(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('已调信号的时域图');

%******************************************

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('已调信号的频谱图')

%******************************************

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;

for i=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('无噪声条件下解调信号的时域图');

%*****************************************

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; %生成含高斯白躁声的已调信号(信号通

%过信道传输)

for i=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('含小信噪比高斯白噪声解调信号的时域图');

%*****************************************

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; %生成含高斯白躁声的已调信号(信号通过信道传输)

for i=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('含大信噪比高斯白噪声解调信号的时域图');

%***************************************** %******************结束*******************

3.2 仿真结果

相关主题
文本预览
相关文档 最新文档