m基于MATLAB数字调制解调仿真,包括ASK,FSK,DPSK及MDPSK,对比误码率

156 阅读3分钟

1.算法概述

       振幅键控(也称幅移键控),记做ASK,或称其为开关键控(通断键控),记做OOK 。二进制数字振幅键控通常记做2ASK。

 

         对于振幅键控这样的线性调制来说,在二进制里,2ASK是利用代表数字信息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续的输出,有载波输出时表示发送“1”,无载波输出时表示发送“0”。根据线性调制的原理,一个二进制的振幅调制信号可以表示完成一个单极性矩形脉冲序列与一个正弦型载波的乘积。

 

       在二进制频移键控(2FSK)中,当传送“1”码时对应于载波频率,传送“0”码时对应于载波频率。 2FSK信号波形可看作两个2ASK信号波形的合成,下图是相位连续的2FSK信号波形。

 

1.png

————————————————

 

       2DPSK方式即是利用前后相邻码元的相对相位值去表示数字信息的一种方式。现假设用Φ表示本码元初相与前一码元初相之差,并规定:Φ=0表示0码,Φ=π表示1码。则数字信息序列与2DPSK信号的码元相位关系可举例表示如2PSK信号是用载波的不同相位直接去表示相应的数字信号而得出的,在接收端只能采用相干解调,它的时域波形图如图4-4所示。

 

2.png

 

        在这种绝对移相方式中,发送端是采用某一个相位作为基准,所以在系统接收端也必须采用相同的基准相位。如果基准相位发生变化,则在接收端回复的信号将与发送的数字信息完全相反。所以在实际过程中一般不采用绝对移相方式,而采用相对移相方式。

 

2.仿真效果预览

matlab2022a仿真

 

 

3.png

4.png

5.png

 

 

 

 

3.MATLAB部分代码预览

`i=10;

j=5000;

t=linspace(0,5,j);

fc=10;

fm=i/5;

B=2*fc;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号

a=round(rand(1,i));%随机序列

figure(2)

plot(rand(1,i))

st=t;

for n=1:10

    if a(n)<1;

        for m=j/i*(n-1)+1:j/i*n

            st(m)=0;

        end

    else

        for m=j/i*(n-1)+1:j/i*n

            st(m)=1;

        end

    end

end

figure(1);

subplot(421);

plot(t,st);

axis([0,5,-1,2]);

title('基带信号');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%载波

s1=cos(2pifc*t);

subplot(422);

plot(s1);

title('载波信号');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调制

e_2ask=st.*s1;

subplot(423);

plot(t,e_2ask);

title('已调信号');

noise =rand(1,j);

e_2ask=e_2ask+noise;%加入噪声

subplot(424);

plot(t,e_2ask);

title('加入噪声的信号');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相干解调

at=e_2ask.cos(2pifct);

at=at-mean(at);

subplot(425);

plot(t,at);

title('相乘后信号');

[f,af] = T2F(t,at);%通过低通滤波器

[t,at] = lpf(f,af,2*fm);

subplot(426);

plot(t,at);

title('解调后波形');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%抽样判决

for m=0:i-1;

if at(1,m*500+250)+0.5<0.5;

    for j=m*500+1:(m+1)*500;

        at(1,j)=0;

    end

else

    for j=m*500+1:(m+1)*500;

        at(1,j)=1;

    end

end

end

subplot(427);

plot(t,at);

axis([0,5,-1,2]);

01-016m`