数字频带传输---FSK

二进制频移键控(2FSK)

在二进制数字调制中若正弦波的载波频率随二进制基带信号在f1和f2两个频率点间进行变化,则产生二进制频移键控信号(2FSK信号),2FSK信号如图所示。

1、 相位不连续的FSK信号

如图所示:用二进制数字信号去控制开关,分别接入两个振荡器之一,可产生相位不连续的2FSK信号。

相位不连续2FSK信号的数学表达式为:

2、相位连续的2FSK信号

将二进制数字信号对单一载波进行调频,可以得到相位连续的2FSK信号。

相位连续的2FSK信号表达式:

其中K_f是调频器的频率偏移常数,b(t)是双极性不归零码序列

3、IQ实现2FSK信号

4、FSK调制实现

键控法实现FSK信号调制

IQ调制实现FSK调制

5、FSK解调实现

将接收到的信号分别通过w1和w2的带通滤波器,后进行载波恢复,低通滤波,抽样判决,得到输出的比特信息。

程序实现:::

clc;
close all;
clear all;

%%%%%%%%%%%参数设定%%%%%%%%%%%%%%%%%%%%




N=20;                %二级制基带数据个数
fc=1000;             %码率
j=N*fc;
s=round(rand(1,N));     %产生二级制基带数
t=linspace(0,N,j);
sample = 8;
f1=10;               %载波1频率
f2=30;               %载波2频率
delte_f = 20;  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
s1=t;
for n=1:N
    if s(n)<1
        for m=j/N*(n-1)+1:j/N*n
             s1(m)=0;
             end
        else
         for m=j/N*(n-1)+1:j/N*n
             s1(m)=1;
             end
        end
end
    s2=t;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基带信号求反
    for n=1:j
         if s1(n)>=1
             s2(n)=0;
             else
           s2(n)=1;
             end
    end
    figure(1);subplot(411);plot(t,s1);title('基带信号');axis([0,N,-1,2]);
    subplot(412);plot(t,s2);title('基带信号求反');axis([0,N,-1,2]);
  
   
    F1=cos(2*pi*f1*t);    %载波信号1
    F2=cos(2*pi*f2*t);    %载波信号2
    subplot(413);plot(t,F1);title('载波信号1');
    subplot(414);plot(t,F2);title('载波信号2');

   
    Fsk=s1.*F1+s2.*F2;    %2Fsk调制
    figure(2);subplot(311);plot(t,Fsk);title('2FSK调制信号')  
    
    
%设置信噪比
SNR_dB = -20:8;
snr = SNR_dB - 10*log10(0.5*16);
error = zeros(1,length(SNR_dB));
for k = 1:length(SNR_dB)
    err = 0;
    for x = 1:100
        F3=cos(2*pi*f1*t+pi/4);    
        F4=cos(2*pi*f2*t+pi/4);
        Fsk1=s1.*F3+s2.*F4;

        %线性高斯白噪声信道
        Fskh = awgn(Fsk1,SNR_dB(k),'measured');


        b1=fir1(101,[10/500 15/500]);    %设置带通滤波器参数
        b2=fir1(101,[30/500 40/500]); 
        Fskh1=filter(b1,1,Fskh);              %经过带通滤波器后的信号
        Fskh2=filter(b2,1,Fskh);            


        FskH1=Fskh1.*Fskh1;
        FskH2=Fskh2.*Fskh2; %经过相乘器


        bn=fir1(101,[2/500 10/500]);   %设置低通滤波器参数
        st1=filter(bn,1,FskH1);           %经过低通滤波器
        st2=filter(bn,1,FskH2);

        %判决
        st1_sum=zeros(1,N); 
        st2_sum=zeros(1,N);
        for p=1:N           %抽样判决,在每一个带宽内按抽样频率抽样并相加比较
             for j=1000*(p-1)+1:1000*p
                  st1_sum(p)=st1_sum(p)+st1(j);
                  st2_sum(p)=st2_sum(p)+st2(j);
             end
             if(st1_sum(p)>=st2_sum(p))
                  s_est(p)=1;
             else  s_est(p)=0;
             end
        end

        s3=t;                %解调后的基带信号
        for n=1:N
            if s_est(n)<1
                for m=j/N*(n-1)+1:j/N*n
                     s3(m)=0;
                     end
                else
                 for m=j/N*(n-1)+1:j/N*n
                     s3(m)=1;
                     end
                end
        end
err = err+sum(abs(s_est-s));
end
error(k) = err/100;
end
figure();
semilogy(SNR_dB,error/N,'*-');
xlabel('比特信噪比');
ylabel('误码率');
title('不同信噪比下误码率仿真曲线');
legend('实验曲线','理论曲线');
grid on

正交方式实现FSK

clc;
close all;
clear all;

%%%%%%%%%%%参数设定%%%%%%%%%%%%%%%%%%%%
i=20;                %数据个数
fc=1000;             %码率
j=i*fc;
% s=round(rand(1,i));     %产生二进制基带数
% s =zeros(1,i);
t=linspace(0,i,j);
sample = 8;
f1=10;               %载波频率
delte_f = 20;        %频率偏移
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
s1=zeros(1,length(t));

%%%%2FSK映射
for n=1:i
    if s(n)<1
        for m=j/i*(n-1)+1:j/i*n
             s1(m)=cos(2*pi*delte_f*m/j)-1j*sin(2*pi*delte_f*m/j);
        end
        else
         for m=j/i*(n-1)+1:j/i*n
             s1(m)=cos(2*pi*delte_f*m/j)+1j*sin(2*pi*delte_f*m/j);
         end
    end
end
soure_i = real(s1)/max(real(s1));
soure_q = imag(s1)/max(real(s1));
figure(1)
subplot(211),plot(t,soure_i);title('I路数据信息')
subplot(212),plot(t,soure_q);title('Q路数据信息')
%%%滤波器
%滚降滤波器
rcos_fir = rcosdesign(0.5,6,8);
% fvtool(rcos_fir,'Analysis','impulse');    %将脉冲响应可视化
filter_delay1 = (length(rcos_fir)-1);  %滚降滤波器的延迟时长
%采用滚降滤波器进行滤波
rcos_msg_source_i = filter(rcos_fir,1,soure_i);
%采用滚降滤波器进行滤波
rcos_msg_source_q = filter(rcos_fir,1,soure_q);
% Z = [rcos_msg_source_i(filter_delay1+1:end)',rcos_msg_source_q(filter_delay1+1:end)'];
% Z=single(Z);
% csvName = ['FSK.csv'];
% csvwrite(csvName,Z,0,0);
% plot(rcos_msg_source_i)
% plot(rcos_msg_source_i(filter_delay1+1:end),rcos_msg_source_q(filter_delay1+1:end));    
figure(2)
subplot(211),plot(t,rcos_msg_source_i);title('I路数据通过成型滤波器')
subplot(212),plot(t,rcos_msg_source_q);title('Q路数据通过成型滤波器')
fsk = rcos_msg_source_i.*cos(2*pi*f1*t)-rcos_msg_source_q.*sin(2*pi*f1*t);
plot(t,fsk);
title('2FSK调制信号')  

编辑于 2021-08-21 18:30