【数字调制】ASK、BPSK、QPSK、MSK调制误码率【附MATLAB代码】

文章来源:微信公众号:EW Frontier

MATLAB代码

clc;
clear all;
close all;
​
%1 参数设置
Tm=1; %符号周期
fm=1/Tm;
fc=10; %载波频率
N_sample=200; %每个符号的采样点
N_num=1000; %符号个数
dt=Tm/N_sample; %采样时间间隔
N=N_sample*N_num; %采样点数
NFFT=2.^16; %FFT点数
t=0:dt:N_num*Tm-dt; %信号时间轴
j=1;
​
%2. BASK
s_source1=rand(1,N_num);
for i=1:N_num
    if s_source1(1,i)>=0.5 
        s_source1(1,i)=1;
    else s_source1(1,i)=0;
    end
end
s_source1=rectpulse(s_source1,N_sample); %整形成矩形脉冲
s_bask=s_source1.*sin(2*pi*fc*t); %BASK调制
for r=-10:1:40
s_bask_wgn=awgn(s_bask,r,'measured'); %信道信噪比20dB
s_dbask=s_bask_wgn.*sin(2*pi*fc*t);%DBASK解调
%通入低通滤波器
wc=1.5*2*pi*fm/N_sample;
B=fir1(16,wc/pi);
s_out1=filter(B,1,s_dbask);
%采样判决
for n=1:200000
    if s_out1(n)>=0.25
        s_out1(n)=1;
    else s_out1(n)=0;
    end
end
[Num,Ratio]=biterr(s_out1,s_source1);
Ratio1(j)=Ratio;
j=j+1;
end
figure(1)
r=-10:1:40;
plot(r,Ratio1,'r')
xlabel('信噪比');ylabel('误码率')
axis([-10 40 0 1])
title('BASK调制方式误码率随信噪比变化曲线')
​
j=1;
​
%3. BPSK
s_source2=rand(1,N_num);
for i=1:N_num
    if s_source2(1,i)>=0.5 
        s_source2(1,i)=1;
    else s_source2(1,i)=0;
    end
end
s_source2=rectpulse(s_source2,N_sample); %整形成矩形脉冲
s_source2=2*s_source2-1;%单极性码变双极性码
s_bpsk=s_source2.*sin(2*pi*fc*t); %BPSK调制
for r=-10:1:40
s_bpsk_wgn=awgn(s_bpsk,r,'measured'); %信道信噪比20dB
s_dbpsk=s_bpsk_wgn.*sin(2*pi*fc*t);%DBPSK解调
%通入低通滤波器
wc=1.5*2*pi*fm/N_sample;
B=fir1(16,wc/pi);
s_out2=2*filter(B,1,s_dbpsk);
%采样判决
for n=1:200000
    if s_out2(n)>=0.00
        s_out2(n)=1;
    else s_out2(n)=-1;
    end
end
[Num,Ratio]=symerr(s_out2,s_source2);
Ratio2(j)=Ratio;
j=j+1;
end
figure(2)
r=-10:1:40;
plot(r,Ratio2,'y')
xlabel('信噪比');ylabel('误码率')
axis([-10 40 0 1])
title('BPSK调制方式误码率随信噪比变化曲线')
​
j=1;
​
%4. QPSK
s_source31=rand(1,N_num);
for i=1:N_num
    if s_source31(1,i)>=0.5 s_source31(1,i)=1;
    else s_source31(1,i)=0;
    end
end
s_source31=rectpulse(s_source31,N_sample); %整形成矩形脉冲
s_source31=2*s_source31-1;%单极性码变双极性码
s_source32=rand(1,N_num);
for i=1:N_num
    if s_source32(1,i)>=0.5 s_source32(1,i)=1;
    else s_source32(1,i)=0;
    end
end
s_source32=rectpulse(s_source32,N_sample); %整形成矩形脉冲
s_source32=2*s_source32-1;%单极性码变双极性码
s_source3=0.5*s_source31-0.5*s_source32; %1-1/-1-(-1)=0;1-(-1)=2;-1-1=-2
%QPSK调制
s_qpsk=s_source31.*cos(2*pi*fc*t)-s_source32.*sin(2*pi*fc*t);
%经过高斯信道  
for r=-10:1:40
s_qpsk_wgn=awgn(s_qpsk,r,'measured');
%相干解调
%IQ分路
s_dqpsk1=s_qpsk_wgn.*cos(2*pi*fc*t);
s_dqpsk2=s_qpsk_wgn.*sin(2*pi*fc*t);
wc=1.5*2*pi*fm/N_sample;
%分别通过低通滤波器
B=fir1(16,wc/pi);
s_out31=filter(B,1,s_dqpsk1);
s_out32=filter(B,1,s_dqpsk2);
%采样判决 
for n=1:200000
    if s_out31(n)>=0
        s_out31(n)=1;
    else s_out31(n)=-1;
    end
end
for n=1:200000
    if s_out32(n)>=0
        s_out32(n)=1;
    else s_out32(n)=-1;
    end
end
s_out3=0.5*s_out31+0.5*s_out32;%归一化
[Num,Ratio]=symerr(s_out3,s_source3);
Ratio3(j)=Ratio;
j=j+1;
end
figure(3)
r=-10:1:40;
plot(r,Ratio3,'g')
xlabel('信噪比');ylabel('误码率')
axis([-10 40 0 1])
title('QPSK调制方式误码率随信噪比变化曲线')
​
j=1;
​
%5. MSK
%产生信源信号
s_source41=rand(1,N_num);
for i=1:N_num
    if s_source41(1,i)>=0.5 s_source41(1,i)=1;
    else s_source41(1,i)=0;
    end
end
s_source41=rectpulse(s_source41,N_sample); %整形成矩形脉冲
s_source41=2*s_source41-1;%单极性码变双极性码
s_source42=rand(1,N_num);
for i=1:N_num
    if s_source42(1,i)>=0.5 s_source42(1,i)=1;
    else s_source42(1,i)=0;
    end
end
s_source42=rectpulse(s_source42,N_sample); %整形成矩形脉冲
s_source42=2*s_source42-1;%单极性码变双极性码
s_source4=0.5*s_source41-0.5*s_source42; %1-1/-1-(-1)=0;1-(-1)=2;-1-1=-2
%MSK调制
s_msk=s_source41.*cos(0.5*pi*fc*t).*cos(2*pi*fc*t)-s_source42.*sin(0.5*pi*fc*t).*sin(2*pi*fc*t);
%经过高斯信道  
for r=-10:1:40
s_msk_wgn=awgn(s_msk,r,'measured');
%相干解调
%IQ分路
s_dmsk1=s_msk_wgn.*cos(0.5*pi*fc*t).*cos(2*pi*fc*t);
s_dmsk2=s_msk_wgn.*sin(0.5*pi*fc*t).*sin(2*pi*fc*t);
%分别通过低通滤波器
wc=1.5*2*pi*fm/N_sample;
B=fir1(32,wc/pi);
s_out41=filter(B,1,s_dmsk1);
s_out42=filter(B,1,s_dmsk2);
%采样判决 
for n=1:200000
    if s_out41(n)>=0
        s_out41(n)=1;
    else s_out41(n)=-1;
    end
end
for n=1:200000
    if s_out42(n)>=0
        s_out42(n)=1;
    else s_out42(n)=-1;
    end
end
s_out4=0.5*s_out41+0.5*s_out42;%归一化
[Num,Ratio]=symerr(s_out4,s_source4);
Ratio4(j)=Ratio;
j=j+1;
end
figure(4)
r=-10:1:40;
plot(r,Ratio4,'b')
xlabel('信噪比');ylabel('误码率')
axis([-10 40 0 1])
title('MSK调制方式误码率随信噪比变化曲线')
​
figure(5)
r=-10:1:40;
plot(r,Ratio1,'r',r,Ratio2,'y',r,Ratio3,'g',r,Ratio4,'b')
xlabel('信噪比');ylabel('误码率')
axis([-10 40 0 1])
title('四种调制方式误码率随信噪比变化曲线比较')
​
% 6.与理论值进行比较
r=0:1:40;
Pe_BASK=0.5.*erfc(sqrt(0.25*r));
Pe_BPSK=0.5.*erfc(sqrt(r));
Pe_QPSK=1-((1-0.5.*erfc(sqrt(0.5.*r))).^2);
Pe_MSK=2.*Pe_BPSK;
figure(6)
plot(r,Pe_BASK,'r',r,Pe_BPSK,'y',r,Pe_QPSK,'g',r,Pe_MSK,'b')
xlabel('信噪比');ylabel('误码率')
axis([0 40 0 1])
title('四种调制方式误码率随信噪比变化理论曲线')

仿真结果

添加图片注释,不超过 140 字(可选)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值