一、2FSK调制原理
1、2FSK定义
载波的幅度不变,频率随an在两个频率中变化,用两个不同的频率携带传递二进制数字信息,当发送“1 ”时对应于某个载波频率ωc1发送 “0”时对应于另 个载频 ωc0 我们把这种调制方式称之为二进制频移键控(2FSK)。
当二进制数字信息序列是具有逻辑电平1和0的单极性不归零码时,二进制频移键控信号可以看成是两个不同载频的二进制幅度键控信号之和,所以,一个FSK信号可以看成是两个不同载波的2ASK信号的叠加。其解调和解调方法和ASK差不多。2FSK信号的频谱可以看成是f1和f2的两个2ASK频谱的组合。
频移键控是利用载波的频率来传递数字信号,在2FSK中,载波的频率随着二进制基带信号在f1和f2两个频率点间变化,频移键控是利用载波的频移变化来传递数字信息的。在2FSK中,载波的频率随基带信号在f1和f2两个频率点间变化。故其表达式为:
2、2FSK调制
2FSK的调制方式有两种,即模拟调频法和键控法。本次设计采用键控法。键控法中可以用二进制“1”来对应于载频f1,而“0”用来对应于另一频率f2,而这个可以用受矩形脉冲序列控制的开关电路对两个不同的独立的频率源f1、f2进行选择。
3、2FSK信号的常用解调方法是相干解调(包络检波)和相干解调解调。
原理是将2FSK信号分解为上下两路2ASK信号分别解调,然后进行判决。这里的抽样判决是直接比较两路信号抽样值的大小,可以不专门设置门限判决规则。但应与调制规则相呼应,调制时若规定“1”符号对应载波频率f1,则接收时上支路的样值较大,应判为“1”;反之则判为“0”。
二、MATLAB编程实现仿真
用randi函数生成10个随机数,形成基带数字信号an。由于一个FSK信号可以看成是两个不同载波的2ASK信号的叠加,故可利用生成已调信号,再通过傅里叶变换得到频谱,分析数据。
程序如下:
N = 10;
x = [];
% 调制信号生成
a = randi([0, 1], 1, 10);
for i = 1:N
if a(i) == 1
x((i-1)*80+1:i*80) = ones(1, 80);
else
x((i-1)*80+1:i*80) = zeros(1, 80);
end
end
figure(1);
subplot(4,1,1);
plot(x);
title('调制信号');
axis([0 800 -2 2]);
% 载波信号
t = 1:N;
ca1 = sin(2*pi*2*t);
ca2 = sin(2*pi*4*t);
% 调整长度,使其与x的长度一致
ca1 = repelem(ca1, 80);
ca2 = repelem(ca2, 80);
subplot(4,1,2);
plot(ca1);
title('载波1');
axis([0 800 -2 2]);
subplot(4,1,3);
plot(ca2);
title('载波2');
axis([0 800 -2 2]);
% 调制生成2FSK信号
x1 = ~x; % 取反操作
fsk = x.*ca1 + x1.*ca2;
subplot(4,1,4);
plot(fsk);
title('2FSK信号');
axis([0 800 -2 2]);
% 频谱分析
m = length(fsk);
T = N;
df = 1/T;
f = (-m/2:m/2-1) * df;
xf = fftshift(abs(fft(x)));
figure(2);
subplot(4,1,1);
plot(f, xf);
title('调制信号频谱');
cf1 = abs(fft(ca1));
subplot(4,1,2);
plot(f, cf1);
title('载波1信号频谱');
cf2 = abs(fft(ca2));
subplot(4,1,3);
plot(f, cf2);
title('载波2信号频谱');
st1 = fftshift(abs(fft(fsk)));
sf = fftshift(st1);
subplot(4,1,4);
plot(f, sf);
title('2FSK信号频谱');
运行结果: