设计五 2FSK调制解调系统
一、设计目的
1.掌握2FSK信号的调制解调原理及MATLAB编程实现方法。 2.利用Simulink设计2FSK信号的调制解调系统。 3.画出2FSK信号的时域波形和频谱图。
二、设计原理
1.2FSK信号的调制解调原理
数字移频键控是用载波的频率来传送数字消息,或者说用所传送的数字消息控制载波的频率。2FSK信号便是符号“1”对应于载频?1,而符号“0”对应于载频?2(与?1不同的另一载频)的已调波形,而且?1与?2之间的改变是瞬间完成的。从原理上讲,数字调频可用模拟调频法来实现,也可用键控法来实现,如图5.1所示。
载波
?f1开关Se0(t)载波s(t)e0(t)模拟调频器 (a) 模拟法?f2s(t)(b) 键控法
图5.1 2FSK信号的调制
根据以上对2FSK信号的调制原理的分析,已调信号的数字表达式可以表示为 e0(t)? ?ag(t?nT)cos(?t??)??ag(t?nT)cos(?t??) (5.1)
ns1nns2nnn其中,g(t)是单个矩形脉冲,脉宽为Ts,且
???0 概率为P?0 概率为?1?P?an?? an??
???1 概率为?1?P??1 概率为P2FSK信号的常用解调方法采用如图5.2所示的非相干检测法和相干检测法。这里的取样判决器是判定哪一个输入样值大,此时可以不专门设置门限电平。
26
?1带通滤波器y1(t)包络检波器v1(t)输入yi(t)?取样脉冲取样判决器输出s'(t)?2带通滤波器y2(t)包络检波器v2(t)
(a) 非相干方式
?1带通滤波器y1(t)乘法器z1(t)低通滤波器v1(t)输入yi(t)?cos?1t取样脉冲取样判决器?2带通滤波器y2(t)乘法器z2(t)低通滤波器v2(t)
cos?2t
(b) 相干方式 图5.2 2FSK信号的解调
2FSK调制属于非线性调制,其频谱特性的研究常用把2FSK信号看成是两个2ASK信号相叠加的方法。2FSK信号的功率谱密度为:
22Tsin?(f?f1)TsPE(f)?s[16?(f?f1)Tssin?(f?f2)Ts?(f?f2)Ts2sin?(f?f1)Ts??(f?f1)Ts2?
sin?(f?f2)Ts?]?
?(f?f2)Ts1[?(f?f1)??(f?f1)??(f?f2)??(f?f2)] (5.2) 16传输2FSK信号所需频带约为
B2FSK?f2?f1?2fs (5.3) 【例5-1】用MATLAB产生独立等概的二进制信源,画出2FSK信号的波形及其功率谱。 解 首先产生随机的二进制数字基带信号,然后根据2FSK信号的表达式产生二进制数字调制信号,最后通过FFT变换求解调制信号的功率谱。源程序如下:
A=1; % 调制信号幅度 fc=2; % 载波频率
27
N_sample=8; % 每码元的采样点数 N=500; % 码元数目 Ts=1; % 采样间隔 dt=Ts/fc/N_sample; % 波形采样间隔 t=0:dt:N*Ts-dt; % 定义时间序列 L=length(t); % 计算时间序列长度 % 产生二进制信源 d=sign(randn(1,N));
dd=sigexpand((d+1)/2,fc*N_sample); gt=ones(1,fc*N_sample); d_NRZ=conv(dd,gt);
[f,d_NRZf]=T2F(t,d_NRZ(1:L)); % 数字基带信号的傅里叶变换 sd_2fsk=2*d_NRZ-1; % 双极性基带信号 s_2fsk=A*cos(2*pi*fc*t+2*pi*sd_2fsk(1:L).*t); % 产生2FSK信号 [f,s_2fskf]=T2F(t,s_2fsk); % 2FSK信号的傅里叶变换 figure(1)
subplot(2,2,1); plot(t,d_NRZ(1:L)); axis([0,10,0,1.2]); xlabel('(a) 输入信号');
subplot(2,2,2); plot(f,10*log10(abs(d_NRZf).^2/Ts)); axis([-2,2,-40,40]); xlabel('(b) 输入信号功率谱密度'); subplot(2,2,3); plot(t,s_2fsk); axis([0,10,-1.2,1.2]); xlabel('(c) 2FSK信号');
subplot(2,2,4); plot(f,10*log10(abs(s_2fskf).^2/Ts)); axis([-fc-4,fc+4,-40,40]); xlabel('(d) 2FSK信号功率谱密度');
%--------------------------------------------------------------------------------------------------------------- function [out]=sigexpand(d,M)
% 将输入的序列扩展成间隔为N-1个0的序列 N=length(d); out=zeros(M,N); out(1,:)=d;
out=reshape(out,1,M*N);
%--------------------------------------------------------------------------------------------------------------- function [f,sf]=T2F(t,st)
% 利用FFT对信号进行傅里叶变换
28
% t,st分别为输入时间和信号 % f,sf分别为输出频率和信号频谱 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);
程序运行结果如图5.3所示。
401200-200-40-20.505(a) 输入信号10-101(b) 输入信号功率谱密度210.50-0.5-105(c) 2FSK信号1040200-20-40-505(d) 2FSK信号功率谱密度
图5.3 2FSK信号的波形及其频谱
2.MATLAB函数
在MATLAB中,fskmod函数和fskdemod函数分别实现FSK信号的调制和FSK信号的非相干解调,awgn函数实现在信号中加入高斯白噪声,symerr函数实现错误符号数的统计和误符号率的计算。
(1) fskmod函数
格式:y=fskmod(x,M,freq_sep,nsamp) y=fskmod(x,M,freq_sep,nsamp,Fs)
其中,x是消息信号;M是消息的符号数,必须是2的整数次幂,消息信号是0~M-1之间的整数;freq_sep是两载波频率之间的频率间隔,单位为Hz;nsamp是输出信号y中每符号的采样数,必须是大于1的正整数;Fs是采样频率,freq_sep和M必须满足(M-1)*freq_sep<=Fs。
29
(2) fskdemod函数
格式:z=fskdemod(y,M,freq_sep,nsamp) z=fskdemod(y,M,freq_sep,nsamp,Fs)
其中,y是已调信号;其余参数与fskmod函数中的一样。 (3) awgn函数 格式:y=awgn(x,snr) y=awgn(x,snr,sigpower)
y=awgn(…,powertype)
其中,x是信号;snr是信噪比,单位为dB;sigpower是信号功率;powertype指定信噪比snr的单位。
(4) symerr函数
格式:[number,ratio]=synerr(x,y)
其中,x、y是待比较信号,二元序列;number是x、y对应元素比较后不相同的符号个数;ratio是误符号率。
3.Simulink模块
在Simulink模块库中,用于实现FSK信号调制解调的模块分别是“M-FSK Modulator Baseband”和“M-FSK Demodulator Baseband”,图形及参数设置如图5.4所示。
图5.4 FSK信号调制解调模块及参数设置
30