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

2024-03-20 23:52

本文主要是介绍【数字调制】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_numif 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:200000if s_out1(n)>=0.25s_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_numif 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:200000if s_out2(n)>=0.00s_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_numif 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_numif 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:200000if s_out31(n)>=0s_out31(n)=1;else s_out31(n)=-1;end
end
for n=1:200000if s_out32(n)>=0s_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_numif 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_numif 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:200000if s_out41(n)>=0s_out41(n)=1;else s_out41(n)=-1;end
end
for n=1:200000if s_out42(n)>=0s_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 字(可选)

这篇关于【数字调制】ASK、BPSK、QPSK、MSK调制误码率【附MATLAB代码】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/831145

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,