基于MATLAB的二进制数字调制与解调信号的仿真——2FSK相位不连续

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hxxjxw/article/details/82629113
 

本文参照上记文章对抽样判决进行了一定的修改

注:相关解调时,如果与载波的相位不一致,容易导致解调不成功

clear;
clc;


A = 1.2;
VolOff = 1.7;

i=32;%基带信号码元数
N = 9.6*6/1.2;
j=i*N;
%t=linspace(0,0.002,j);%0-5之间产生5000个点行矢量,即将[0,5]分成5000份
N = 9.6*6/1.2;
d = 0.000833/N;
%d = 0.0025/N;
t=0:d:d*(j-1);
sss=d*(j-1); 
f1=1300;%载波1频率
f2=2100;%载波2频率
fm=i/sss;%基带信号频率    码元数是10,而时域长度是5,也就是一个单位2个码元
%a=round(rand(1,i));%产生随机序列
%a=[1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0];
a = [1 1 1 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 1 1];

%产生基带信号
%st1=t;
for n=1:32   
    if a(n)<1
        for m=j/i*(n-1)+1:j/i*n   %1984/32*2=1984/64                        
            st1(m)=0;
        end
    else
        for m=j/i*(n-1)+1:j/i*n
            st1(m)=1;
        end
    end
end
 
figure(1);
subplot(411);
plot(t,st1);
title('基带信号st1');
%axis([0,5,-1,2]);


 
%基带信号求反
st2=t;
for n=1:j
    if st1(n)==1
        st2(n)=0;
    else
        st2(n)=1;
    end
end
subplot(412);
plot(t,st2);
title('基带信号反码st2');
%axis([0,5,-1,2]);
 
%载波信号
s1=A*cos(2*pi*f1*t)+VolOff;
s2=A*cos(2*pi*f2*t)+VolOff;
subplot(413),plot(s1);
title('载波信号s1');
subplot(414),plot(s2);
title('载波信号s2');
 
%调制
F1=st1.*s1;%加入载波1
F2=st2.*s2;%加入载波2
figure(2);
subplot(411);
plot(t,F1);
title('F1=s1*st1');
subplot(412);
plot(t,F2);
title('F2=s2*st2');
e_fsk=F1+F2;
subplot(413);
plot(t,e_fsk);
title('2FSK信号');%键控法产生的信号在相邻码元之间相位不一定连续
 
%加噪
nosie=rand(1,j);
fsk=e_fsk+nosie;
%fsk=e_fsk;
subplot(414);
plot(t,fsk);
title('加噪声后信号')
 
%相干解调
st1=fsk.*s1; %与载波1相乘
%[f,sf1] = T2F(t,st1);%傅里叶变换
%[t,st1] = lpf(f,sf1,2*fm);%通过低通滤波器
figure(3);
subplot(311);
plot(t,st1);
title('加噪后的信号与s1相乘后波形');
st2=fsk.*s2;%与载波2相乘
%[f,sf2] = T2F(t,st2);%傅里叶变换
%[t,st2] = lpf(f,sf2,2*fm);
subplot(312);
plot(t,st2);
title('加噪后的信号与s2相乘后波形');
 
%抽样判决
sum1=0;
sum2=0;
for m=0:i-1    
    for j=m*N+1:(m+1)*N
        sum1 = sum1+st1(j);
        sum2 = sum2+st2(j);
    end
    
    if sum1>sum2
        %at(m+1)=1;
        for j=m*N+1:(m+1)*N
            at(1,j)=1;
        end
    else
        %at(m+1)=0;
        for j=m*N+1:(m+1)*N
            at(1,j)=0;
        end
    end
    
    sum1=0;
    sum2=0;
end

subplot(313);
plot(t,at);
%axis([0,5,-1,2]);
title('抽样判决后波形')


for i=1:32
    
    if a(i) ~=  at(i*N)
        print_str = sprintf('a[%d]=%d,data[%d]=%d \r\n',i,a(i),i, at(i*N));
        disp(print_str);
    end
end

调试结果:

基于MATLAB的二进制数字调制与解调信号的仿真——2FSK相位不连续_第1张图片

你可能感兴趣的:(matlab,信号处理)