课程设计作业

16QAM调制解调

clear all;
close all;
%%
%16QAM信号调制解调
%通过瑞利/高斯信道
%理论和仿真误码率%%
%系统参数设计
T_start=0;%开始时间
T_stop=40;%截止时间
T=T_stop-T_start;%仿真持续时间rs=10;%传输速率
NumBits=rs*T;%传输bit数fc=20;%载波频率L=100;%码元长度
N_sample=NumBits*L;% 采样点数
T_sample=T/N_sample;%采样间隔
f_sample=1/T_sample;%采样频率
f_res=f_sample/N_sample;%频率分辨率%载波
n=1:N_sample/4;
c1=cos(2*pi*fc*n*T_sample);
c2=sin(2*pi*fc*n*T_sample);%%
%16QAM信号的调制%随机产生原始01信息比特
a=rand(1,NumBits)>0.5;%串并变换
A=reshape(a,2,NumBits/2);
a_I=A(1,:);
a_Q=A(2,:);%2-4电平变换,00对应-3,01对应-1,10对应1,11对应3
a_4I=zeros(1,NumBits/4);
for i=1:NumBits/4g=a_I(2*i-1)*2+a_I(2*i);if g==0a_4I(i)=-3;elseif g==1a_4I(i)=-1;elseif g==2a_4I(i)=1;elsea_4I(i)=3;end
end
a_4Q=zeros(1,NumBits/4);
for i=1:NumBits/4g=a_Q(2*i-1)*2+a_Q(2*i);if g==0a_4Q(i)=-3;elseif g==1a_4Q(i)=-1;elseif g==2a_4Q(i)=1;elsea_4Q(i)=3;end
end
%
%将信息比特扩展成方波,得到两路基带信号
e_I=[];
for i=1:NumBits/4B(1:L)=a_4I(i);e_I=[e_I,B];
end
e_Q=[];
for i=1:NumBits/4B(1:L)=a_4Q(i);e_Q=[e_Q,B];
end%基带信号与载波相乘
sI=e_I.*c1;%I支路调制信号
sQ=e_Q.*c2;%Q支路调制信号
s=sI-sQ;%16QAM调制信号%%
%瑞利信道
SNR=15;%输入信噪比
snr=10^(SNR/10);
N0=1/2/snr;%计算噪声功率
N0_dB=10*log10(N0);%将噪声功率转换为dBW
h=raylrnd(1/sqrt(2),1,N_sample/4);%产生瑞利信号
n_i=wgn(1,N_sample/4,N0_dB);%产生高斯噪声
y_n=s.*h+n_i;%16QAM调制信号通过瑞利信道
y_n0=s+n_i;%16QAM信号通过高斯信道%%
%16QAM信号的解调%通过带通滤波器,去除噪声
[b1,a1]=butter(4,[0.02,0.06]);%计算带通滤波器的H(z)系数
y=filtfilt(b1,a1,y_n);%对信号y_i进行滤波,得到信号y;使用filtfilt进行滤波几乎没有延时%与恢复载波相乘
x1_I=y.*c1;
x1_Q=-y.*c2;%通过低通滤波器,分离出两路信号
[b2,a2]=butter(4,0.02,'low');%计算低通滤波器H(z)系数
x2_I=filtfilt(b2,a2,x1_I);%对信号x1进行滤波,得到信号x2_I
x2_Q=filtfilt(b2,a2,x1_Q);%对信号x1进行滤波,得到信号x2_Q%判决
x_I=fun_panjue16QAM(x2_I);%调用函数,对I支路进行判决
x_Q=fun_panjue16QAM(x2_Q);%提取信息比特,,得到-3,-1,1,3信息
d_I0=fun_tiqu16QAM(x_I,L);
d_Q0=fun_tiqu16QAM(x_Q,L);%4-2进制转换,将-3,-1,1,3转换成01
d_I=zeros(1,NumBits/2);
for i=1:NumBits/4if d_I0(i)==3d_I(2*i-1)=1;d_I(2*i)=1;elseif d_I0(i)==1d_I(2*i-1)=1;d_I(2*i)=0;elseif d_I0(i)==-1d_I(2*i-1)=0;d_I(2*i)=1;elsed_I(2*i-1)=0;d_I(2*i)=0;end
end
d_Q=zeros(1,NumBits/2);
for i=1:NumBits/4if d_Q0(i)==3d_Q(2*i-1)=1;d_Q(2*i)=1;elseif d_Q0(i)==1d_Q(2*i-1)=1;d_Q(2*i)=0;elseif d_Q0(i)==-1d_Q(2*i-1)=0;d_Q(2*i)=1;elsed_Q(2*i-1)=0;d_Q(2*i)=0;end
end%并串变换
d(1:2:NumBits)=d_I;
d(2:2:NumBits)=d_Q;%%
%误码率计算
err=length(find(d~=a));%计算解调信号中错误码元个数
BER_test=err/NumBits;%计算误码率%%
%图像
figure(1);
subplot(4,2,1:2);stem(a);title('原始01信息序列a');axis([1,20,0,1]);
subplot(4,2,3);stem(a_I);title('I支路01信息序列a_I');axis([1,10,0,1]);
subplot(4,2,4);stem(a_Q);title('Q支路01信息序列a_Q');axis([1,10,0,1]);
subplot(4,2,5);stem(a_4I);grid on;
title('四进制I支路信息序列');axis([1,10,-4,4]);
subplot(4,2,6);stem(a_4Q);grid on;
title('四进制Q支路信息序列');axis([1,10,-4,4]);
subplot(4,2,7);plot(e_I);hold on;plot(sI);grid on;
legend('I支路基带信号e_I','I支路调制信号sI');axis([0,1000,-4,4]);
subplot(4,2,8);plot(e_Q);hold on;plot(sQ);grid on;
legend('Q支路基带信号e_Q','Q支路调制信号sQ');axis([0,1000,-4,4]);figure(2);
subplot(3,1,1);plot(s);title('16QAM调制信号s');axis([0,2000,-6,6]);
subplot(3,1,2);plot(y_n);title('16QAM调制信号s通过瑞利信道后的信号y_n');axis([0,2000,-6,6]);
subplot(3,1,3);plot(y_n0);title('16QAM调制信号通过高斯信道后的信号y_n0');axis([0,2000,-6,6]);figure(3);
subplot(3,2,1:2);plot(y);title('y_i通过带通滤波器后的信号y');axis([0,4000,-6,6]);
subplot(3,2,3);plot(x1_I);title('y与恢复载波c1相乘后的信号x1_I');axis([0,2000,-6,6]);
subplot(3,2,4);plot(x1_Q);title('y与恢复载波c2相乘后的信号x1_Q');axis([0,2000,-6,6]);
subplot(3,2,5);plot(x2_I);hold on;plot(e_I);
grid on;legend('x1_I通过低通滤波器后的信号x2_I','原始I支路基带信号e_I');
axis([0,2000,-6,6]);
subplot(3,2,6);plot(x2_Q);hold on;plot(e_Q);
grid on;legend('x1_Q通过低通滤波器后的信号x2_Q','原始Q支路基带信号e_Q');
axis([0,2000,-6,6]);figure(4);
subplot(4,2,1);plot(x_I);hold on;plot(e_I);
grid on;legend('x2_I经过判决后得到的信号x_I','原始I支路基带信号e_I');
axis([0,2000,-4,4]);
subplot(4,2,2);plot(x_Q);hold on;plot(e_Q);
grid on;legend('x2_Q经过判决后得到的信号x_Q','原始Q支路基带信号e_Q');
axis([0,2000,-4,4]);
subplot(4,2,3);stem(d_I0);grid on;
title('x2_I经过信息比特提取后得到的信息序列d_I0');axis([1,5,-4,4]);
subplot(4,2,4);stem(d_Q0);grid on;
title('x2_Q经过信息比特提取后得到的信息序列d_Q0');axis([1,5,-4,4]);
subplot(4,2,5);stem(d_I);title('d_I0经过4-2进制转换后得到的信息序列d_I');axis([1,10,0,1]);
subplot(4,2,6);stem(d_Q);title('d_I0经过4-2进制转换后得到的信息序列d_Q');axis([1,10,0,1]);
subplot(4,2,7:8);stem(d);hold on;stem(a,'*');
legend('d_I和d_Q并串变换后得到解调01信息序列','原始01信息序列');axis([1,20,0,1.5]);

子程序1

function w=fun_panjue16QAM(w)
%以1,0,-1为基准进行判决
N=length(w);
for i=1:Nif w(i)>=1w(i)=3;elseif w(i)<1&&w(i)>=0;w(i)=1;elseif w(i)<0&&w(i)>-1w(i)=-1;elsew(i)=-3;end
end

子程序2

function h=fun_tiqu16QAM(x,L)
%提取出信息比特
%x为输入信号,L为信号的码元长度
for i=1:length(x)/L;k=x((i-1)*L+1:i*L);v1=length(find(k==3));v2=length(find(k==1));v3=length(find(k==-1));v4=length(find(k==-3));    if v1>v2&&v1>v3&&v1>v4h(i)=3;elseif v2>v1&&v2>v3&&v2>v4h(i)=1;elseif v3>v1&&v3>v2&&v3>v4h(i)=-1;elseif v4>v1&&v4>v2&&v4>v3h(i)=-3;elseh(i)=0;end
end

16QAM误码率

clear all;
close all;
%误码率曲线的绘制
SNR=1:1:20;%信噪比变化范围
snr=10.^(SNR/10);%将信噪比转化成直角坐标
N=1000000;%仿真点数
M=16;%进制数
x=randi([0,1],1,N);%产生随机信号
y=qammod(x,M,pi/M);%调用matlab自带的qam调制函数
for i=1:length(SNR);N0=1/2/snr(i);%计算噪声功率N0_dB=10*log10(N0);%将噪声功率转换为dBWni=wgn(1,N,N0_dB);%产生高斯噪声h=raylrnd(1/sqrt(2),1,N);%产生瑞利信号yAn=y+ni;%通过高斯信道yA=qamdemod(yAn,M,pi/M);%调用matlab自带的qam解调函数bit_A=length(find(x~=yA));%统计错误比特数BPSK_s_AWGN(i)=bit_A/N;%计算误码率yRn=y.*h+ni;%通过瑞利信道yR=qamdemod(yRn,M,pi/M);%调用matlab自带的qam解调函数bit_R=length(find(x~=yR));%统计错误比特数BPSK_s_Ray(i)=bit_R/N;%计算误码率
end
p1=6*log2(M)/(M-1)*snr;
p2=(1-1/sqrt(M))*erfc(sqrt(p1));
BPSK_t_AWGN=2*p2.*(1-p2/2);%AWGN信道下16QAM理论误码率
BPSK_t_Ray=1/2*(1-sqrt((1/2*p1)./(1+1/2*p1)));%Rayleigh信道下16QAM理论误码率%绘制图形
figure;
semilogy(SNR,BPSK_s_AWGN,'-k*');hold on;
semilogy(SNR,BPSK_t_AWGN,'-go');hold on;
semilogy(SNR,BPSK_s_Ray,'-b*');hold on
semilogy(SNR,BPSK_t_Ray,'-ro');grid on;
axis([-1,20,10^-4,1]);
legend('AWGN仿真','AWGN理论','瑞利仿真','瑞利理论');
title('16QAM误码性能分析');
xlabel('信噪比(dB)');ylabel('BER');

16QAM调制解调和误码率相关推荐

  1. 16QAM调制解调系统误码率和星座图的matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 16QAM全称是​正交幅度调制​,英文Quadrature Amplitude Modulation的缩略语简称,意思是正交幅度调制,是一 ...

  2. 16QAM调制解调仿真(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)

    16QAM调制解调仿真目录 一.仿真要求 二.仿真方案详细设计 三.仿真结果及结论 四.仿真代码 一.仿真要求 1.用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相 ...

  3. m基于MATLAB Simulink的16QAM调制解调系统仿真

    目录 1.算法概述 2.仿真效果预览 3.MATLAB程序 1.算法概述 16QAM全称正交幅度调制是英文Quadrature Amplitude Modulation的缩略语简称,意思是正交幅度调制 ...

  4. qam已调信号matlab相干解调,16qam调制解调matlab

    (论文)题目 16QAM 的调制与解调 时间: 2012 年 12 月 19 日指导教师 主要研 究内容 基于 MatlabSimulink 的 16QAM 的调制与解调 研究方法 MatlabSim ...

  5. 通信算法之十一:QPSK/DQPSK/OQPSK/BPSK/DBPSK/16QAM调制解调仿真链路

    一. QPSK 正交相移键控 (Quadrature Phase Shift Keying)简称"QPSK",是一种数字调制方式.它分为绝对相移和相对相移两种.由于绝对相移方式存在 ...

  6. QPSK调制解调和误码率

    课程设计作业 QPSK调制解调 clear all; close all; %% %系统参数设计 T_start=0;%开始时间 T_stop=20;%截止时间 T=T_stop-T_start;%仿 ...

  7. MSK调制解调和误码率

    课程设计作业 MSK调制解调 clear all; close all; %% %系统参数设计 T_start=0;%开始时间 T_stop=10;%截止时间 T=T_stop-T_start;%仿真 ...

  8. 利用SIMULINK搭建一个16QAM调制解调收发系统

    1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块. 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤 ...

  9. ASK,FSK和PSK调制解调的误码率matlab仿真

    目录 1.算法仿真效果 2.MATLAB源码 3.算法概述 4.部分参考文献 1.算法仿真效果 matlab2022a仿真结果如下: <

  10. BPSK、QPSK、MPSK、QAM、16QAM的调制解调Matlab实现

    BPSK.QPSK.MPSK.QAM.16QAM的调制解调Matlab实现_ICT_Liang的博客-CSDN博客_matlab qam 16QAM调制解调仿真(matlab,详细介绍仿真方案的设计. ...

最新文章

  1. 一天搞定CSS(扩展):CSS Hack
  2. 基础知识巩固四(问题部分)
  3. php文本分割成csv,php将文本文件转换csv输出的方法
  4. python模块的使用方法_python中requests模块的使用方法
  5. odbc驱动程序配置失败_如何使用ODBC驱动程序配置链接服务器
  6. 全国夜间灯光指数数据、GDP密度分布、人口密度分布、土地利用数据、降雨量数据
  7. c语言手机程序代码,C语言必背18个经典程序(示例代码)
  8. 数据仓库系列之总线架构
  9. 乱谈那些个著名的科技互联网公司和产品名字
  10. IdentityServer4 去掉验证
  11. oracle 新增配额,Oracle 用户配额
  12. h5 先加载小图_干货!高手珍藏版的H5秘密尺寸
  13. 蓝蓝算法04-字符串逆置
  14. 基于SSM+Bootstrap【爱校教务系统管理系统】附源码
  15. Linux如何更改root用户密码
  16. Photoshop保存图片时闪退
  17. 【进阶5-1期】重新认识构造函数、原型和原型链
  18. 信息可视化的简单概述
  19. 单元格下拉全选快捷键_【excel下拉全选快捷键】Excel中全选是Ctrl A,那么反选呢?...
  20. Lorenz系统Lyapunov指数图

热门文章

  1. CSS 基本样式大全(一)
  2. 应用多元统计分析高惠璇pdf_EViews统计分析与应用pdf txt mobi下载及读书笔记
  3. 嵌入式接口之GPIO驱动LED的实验(附完整代码和工程以及详细的调试过程)
  4. ansible自动运维
  5. mysql的inndob引擎崩溃
  6. 如何去掉暴风影音广告,去掉暴风影音暂停时的广告
  7. 开票接口系统能够解决的十大问题
  8. 中文版贾维斯语音助手Jarvis(电脑加强版Siri 已实现语音控制/自动播放下载音乐/天气播报/问路导航/搜索/计算器)
  9. windows 屏幕保护色设置
  10. CAJ云阅读怎么用,可以修改caj文件吗?