就是最简单的实现一个2FSK,先不管这种调制方法的性质
其实就是太懒了不想学
代码如下,最后仿真的结果是用电脑播放随机二进制序列的调制信号,不建议带耳机听,建议小声听
Rb=100;%设定码元速率
sample=randBinary(N);%生成随机二进制序列
%设定发送波形参数
f1=8000;
f0=12000;
%发送波形采样
fs=48000;
send=modulation_2FSK(sample,[f0 f1],Rb,fs);
%发送
sound(send,fs);
plot(send);
附:
自定义函数说明:
产生随机二进制序列
function [ seq ] = randBinary( N )
% 输入需要生成序列的长度N
% 产生一个随机01序列,长度为N
%
% 如生成一个长度为1000的随机二进制序列
% sample=randBinary(1000);
seq=zeros(1,N);
for i=1:N
ele=ceil(rand()*10);
seq(i)=mod(ele,2);
end
end
对单极性不归零序列进行2FSK调制
采用键控法,码元为1或0时将发送其映射的波形
function [ send ] = modulation_2FSK( sample,f,Rb,fs )
% 2FSK调制
% 输入待调制的单极性不归零序列sample和码元速率Rb
% 发送频率[f0 f1]
% fs为发送信号的播放频率
% 返回要发送的信号,播放时长为一秒
Tb=1/Rb;
Ts=1/fs;
temp=[0];
send=[0];
N=length(sample);
for i=1:N
temp=i*Tb:Ts:(i+1)*Tb-Ts/10;
if sample(i)
send=[send cos(2*pi*f(2)*temp)];
else
send=[send cos(2*pi*f(1)*temp)];
end
end
send=send(2:end);
end
然后是对接收信号进行解调.以下为解调的超理想模式,信道完全无噪声无衰减!其实根本没传输
因为没有噪声不用提取载波,只要对信号平方在通过lpf即可恢复序列
function [ ] = demodulation_2FSK( rcv,f,fs )
% 2FSK解调函数
% 输入接收信号rcv和发送频率[f0 f1]
% fs为接收信号的采样频率
% 输出恢复01序列(暂无),显示抽样判决前波形
Ts=1/fs;
len=length(rcv);
t=0:Ts:(len-1)*Ts;
%恢复载波
aid1=cos(2*pi*f(2)*t);
aid0=cos(2*pi*f(1)*t);
%定义滤波器(Fpass=500,Fstop=2k)
lpf=[-0.000155833996394978,-8.13831647659670e-05,-9.20002718367755e-05,-9.34081381696587e-05,-8.07905288388760e-05,-4.82295684201173e-05,1.10503665725242e-05,0.000104811978995989,0.000241591960167609,0.000430822839276432,0.000682264219483239,0.00100598263039256,0.00141205216632109,0.00191075149567522,0.00251102822992922,0.00322157539693270,0.00404950826762152,0.00500032696122431,0.00607774423655064,0.00728301069263170,0.00861503729572713,0.0100699084385198,0.0116408437704915,0.0133180094004704,0.0150886733499124,0.0169371703821178,0.0188450158385386,0.0207913578208965,0.0227530878451301,0.0247053521313381,0.0266220811202588,0.0284763137354778,0.0302410586230369,0.0318896464873665,0.0333964895832343,0.0347376010424772,0.0358912330554356,0.0368383387237662,0.0375630659622750,0.0380532056874610,0.0383003706934961,0.0383003706934961,0.0380532056874610,0.0375630659622750,0.0368383387237662,0.0358912330554356,0.0347376010424772,0.0333964895832343,0.0318896464873665,0.0302410586230369,0.0284763137354778,0.0266220811202588,0.0247053521313381,0.0227530878451301,0.0207913578208965,0.0188450158385386,0.0169371703821178,0.0150886733499124,0.0133180094004704,0.0116408437704915,0.0100699084385198,0.00861503729572713,0.00728301069263170,0.00607774423655064,0.00500032696122431,0.00404950826762152,0.00322157539693270,0.00251102822992922,0.00191075149567522,0.00141205216632109,0.00100598263039256,0.000682264219483239,0.000430822839276432,0.000241591960167609,0.000104811978995989,1.10503665725242e-05,-4.82295684201173e-05,-8.07905288388760e-05,-9.34081381696587e-05,-9.20002718367755e-05,-8.13831647659670e-05,-0.000155833996394978];
%滤除高频部分,保留低频分量
rcv1=filter(lpf,1,rcv.*aid1);
rcv0=filter(lpf,1,rcv.*aid0);
%归一化
rcv1=rcv1/max(abs(rcv1));
rcv0=rcv0/max(abs(rcv0));
figure
plot(t,abs(rcv1),'-r');
grid on
hold on
plot(t,abs(rcv0),'-g');
title('接受恢复');xlabel('秒/s');
legend('1接收','0接收')
end
在解调的过程中,我们要注意由于信道的随机衰减,可能导致针对某部分频谱分量的大量衰减,从而不能分辨.为了应对这种情况,我们就需要对经过lpf后的信号进行归一化,从而消除因幅度不同而导致的误差.不能在接收信号后就进行归一化,因为信号中只有部分频率分量是衰减的,对整个信号进行归一化后并不能使衰减信号恢复到正常值.