【数字调制】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

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87