课程设计作业

QPSK调制解调

clear all;
close all;
%%
%系统参数设计
T_start=0;%开始时间
T_stop=20;%截止时间
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/2;
c1=cos(2*pi*fc*n*T_sample);
c2=sin(2*pi*fc*n*T_sample);%%
%QPSK信号的调制%随机产生原始01信息比特
a=rand(1,NumBits)>0.5;%串并变换
A=reshape(a,2,NumBits/2);
a_I=A(1,:);
a_Q=A(2,:);%将信息比特扩展成双极性不归零方波,得到两路基带信号
e_I=[];
for i=1:NumBits/2if a_I(i)==0B=-ones(1,L);else B=ones(1,L);ende_I=[e_I,B];
ende_Q=[];
for i=1:NumBits/2if a_Q(i)==0B=-ones(1,L);else B=ones(1,L);ende_Q=[e_Q,B];
end%基带信号与载波相乘
sI=e_I.*c1;%I支路调制信号
sQ=e_Q.*c2;%Q支路调制信号
s=sI-sQ;%QPSK调制信号%%
%瑞利和高斯信道
SNR=15;%输入信噪比
snr=10^(SNR/10);
N0=1/2/snr;%计算噪声功率
N0_dB=10*log10(N0);%将噪声功率转换为dBW
h=raylrnd(1/sqrt(2),1,N_sample/2);%产生瑞利信号
n_i=wgn(1,N_sample/2,N0_dB);%产生高斯噪声
y_n=s.*h+n_i;%QPSK调制信号通过瑞利信道
y_n0=s+n_i;%QPSK调制信号通过瑞利信道%%
%BPSK信号的解调%通过带通滤波器,去除噪声
[b1,a1]=butter(4,[0.02,0.06]);%计算带通滤波器的H(z)系数
y=filtfilt(b1,a1,y_n);%对信号y_i进行滤波,得到信号y%与恢复载波相乘
x1_I=y.*c1;
x1_Q=-y.*c2;%通过低通滤波器,分离出两路信号
[b2,a2]=butter(4,0.02,'low');%计算低通滤波器H(z)系数
x_I=filtfilt(b2,a2,x1_I);%对信号x1_I进行滤波,得到信号x2_I
x_Q=filtfilt(b2,a2,x1_Q);%对信号x1_Q进行滤波,得到信号x2_Q%进行判决,提取出信息比特
d_I=fun_tiqu(x_I,L);
d_Q=fun_tiqu(x_Q,L);%并串变换
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('原始信息序列a');axis([1,20,0,1]);
subplot(4,2,3);stem(a_I);title('I支路原始信息序列a_I');axis([1,10,0,1]);
subplot(4,2,4);stem(a_Q);title('Q支路原始信息序列a_Q');axis([1,10,0,1]);
subplot(4,2,5);plot(c1);title('QPSK载波信号c1');axis([1,1000,-1,1]);
subplot(4,2,6);plot(c2);title('QPSK载波信号c2');axis([1,1000,-1,1]);
subplot(4,2,7);plot(e_I);hold on;plot(sI);
legend('I支路基带信号e_I','I支路调制信号sI');axis([0,1000,-1.5,1.5]);
subplot(4,2,8);plot(e_Q);hold on;plot(sQ);
legend('Q支路基带信号e_Q','Q支路调制信号sQ');axis([0,1000,-1.5,1.5]);figure(2);
subplot(3,1,1);plot(s);title('QPSK调制信号s');axis([0,2000,-2.5,2.5]);
subplot(3,1,2);plot(y_n);title('QPSK调制信号s通过瑞利信道后的信号y_n');axis([0,2000,-2.5,2.5]);
subplot(3,1,3);plot(y_n0);title('QPSK调制信号通过高斯信道后的信号y_n0');axis([0,2000,-2.5,2.5]);figure(3);
subplot(3,2,1:2);plot(y);title('y_i通过带通滤波器后的信号y');axis([0,4000,-2,2]);
subplot(3,2,3);plot(x1_I);title('y与恢复载波c1相乘后的信号x1_I');axis([0,2000,-2,2]);
subplot(3,2,4);plot(x1_Q);title('y与恢复载波c2相乘后的信号x1_Q');axis([0,2000,-2,2]);
subplot(3,2,5);plot(x_I);hold on;plot(e_I);
grid on;legend('x1_I通过低通滤波器后的信号x2_I','原始I支路基带信号e_I');
axis([0,2000,-1.5,1.5]);
subplot(3,2,6);plot(x_Q);hold on;plot(e_Q);
grid on;legend('x1_Q通过低通滤波器后的信号x2_Q','原始Q支路基带信号e_Q');
axis([0,2000,-1.5,1.5]);figure(4);
subplot(2,2,1);stem(d_I);grid on;
title('x_I经过判决后得到的信息序列d_I');axis([1,10,0,1]);
subplot(2,2,2);stem(d_Q);grid on;
title('x_Q经过判决后得到的信息序列d_Q');axis([1,10,0,1]);
subplot(2,2,3:4);stem(d);hold on;stem(a,'*');
legend('d_I和d_Q并串变换后得到解调01信息序列','原始01信息序列');axis([1,20,0,1.5]);

子程序

function h=fun_tiqu(x,L)
%提取出信息比特
%x为输入信号,L为信号的码元长度
for i=1:length(x)/L;C=x((i-1)*L+1:i*L);t=sum(C);if t>=0h(i)=1;elseh(i)=0;end
end

QPSK误码率

clear all;
close all;
%误码率曲线的绘制
SNR=1:1:20;%信噪比变化范围
snr=10.^(SNR/10);%将信噪比转化成直角坐标
N=2000000;%仿真点数
M=4;%进制数
x=randi([0,1],1,N);%产生随机信号
y=pskmod(x,M);%调用matlab自带的psk调制函数
y1=real(y);
y2=imag(y);
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=pskdemod(yAn,M);%调用matlab自带的psk解调函数bit_A=length(find(x~=yA));%统计错误比特数 QPSK_s_AWGN(i)=bit_A/N;%计算误码率yRn=y.*h+ni;%通过瑞利信道yR=pskdemod(yRn,M);%调用matlab自带的psk解调函数bit_R=length(find(x~=yR));%统计错误比特数QPSK_s_Ray(i)=bit_R/N;%计算误码率
end
QPSK_t_AWGN=1/2*erfc(sqrt(snr));%AWGN信道下QPSK理论误码率
QPSK_t_Ray=1/2*(1-sqrt((snr)./(1+snr)));%Rayleigh信道下QPSK理论误码率%绘制图形
figure;
semilogy(SNR,QPSK_s_AWGN,'-k*');hold on;
semilogy(SNR,QPSK_t_AWGN,'-go');hold on;
semilogy(SNR,QPSK_s_Ray,'-b*');hold on
semilogy(SNR,QPSK_t_Ray,'-ro');grid on;
axis([-1,20,10^-4,1]);
legend('AWGN仿真','AWGN理论','瑞利仿真','瑞利理论');
title('QPSK误码性能分析');
xlabel('信噪比(dB)');ylabel('BER');

QPSK调制解调和误码率相关推荐

  1. QPSK调制解调过程,包括串并转换,电平转换,载波调制,相干解调,抽样判决等

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式.在19世纪80 ...

  2. 正交解调 matlab,正交相位偏移键控(qpsk)调制解调系统simulink(matlab)建模分析毕业论文...

    正交相位偏移键控(qpsk)调制解调系统simulink(matlab)建模分析毕业论文 重庆邮电大学本科毕业设计(论文)- I -编 号: 审定成绩: 设计(论文)题目: 正交相位偏移键控(QPSK ...

  3. QPSK调制解调仿真matlab

    QPSK是MPSK的一种,对于理解MPSK有着很大的帮助. 在理解MPSK中,有以下几个难点: 什么是串并转换 如何把QPSK转换成两路2PSK信号 解调时如何判决 下面给出我结合全网与自己的理解的Q ...

  4. QPSK调制解调FPGA实现成果展示:

    目录 QPSK调制解调使用参数: 调制: 解调: FPGA工程架构: 仿真参数: 仿真展示: 调制: 解调: MATLAB星座图展示: QPSK调制解调使用参数: 采样率为4M,符号速率为1M,载波速 ...

  5. matlab ellip传递函数,BPSK和QPSK调制解调原理及MATLAB程序

    <BPSK和QPSK调制解调原理及MATLAB程序>由会员分享,可在线阅读,更多相关<BPSK和QPSK调制解调原理及MATLAB程序(10页珍藏版)>请在人人文库网上搜索. ...

  6. 高码率QPSK调制解调方案(2.1 QPSK调制)

    2 全数字高码率QPSK调制解调软件设计 2.1 QPSK调制 2.1.1 QPSK调制原理 QPSK调制即正交相移键控信号,其信号表达式为                 (1) 其中,和分别表示每 ...

  7. 【Simulink教程案例11】使用基础模块完成QPSK调制解调系统的建模与仿真(不用Simulink自带QPSK模块)

    欢迎订阅<FPGA/MATLAB/SIMULINK系列教程> 目录 1.软件版本 2.QPSK的理论简介 3.使用SIMULINK实现QPSK调制解调 3.1信号源

  8. 单载波频域均衡matlab仿真,包括卷积编码维特比译码,矩阵交织,QPSK调制解调,导频插入,MMSE-FDE频域均衡

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 频域均衡是从校正系统的频率特性出发,利用一个可调滤波器的频率的频率特性去补偿信道或系统的频率特性,使 ...

  9. m基于QPSK调制解调的无线图像传输matlab仿真,包括扩频解扩均衡等模块

    目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 软件无线电在无线通信领域被称为是自模拟通信过渡到数字通信之后的又一次革命,在军用和民用方面都 ...

最新文章

  1. FuzzyCMeans算法
  2. 2020.3.10.遗留问题
  3. reverse() 几种操作
  4. Boost:双图bimap与Boost类型的测试程序
  5. scrum回顾_3步开好回顾会 | IDCF FDCC认证学员作品
  6. mysql几个timeout参数_MySQL中 timeout相关参数解析
  7. gwt 嵌入html_GWT和HTML5画布演示
  8. extjs4.2 弹出注册用户界面实例
  9. java csv 单元格格式_Java读写CSV格式的文件
  10. R语言导出为html,科学网—[转载]R语言中数据的导入与导出(笔记) - 刘朋的博文...
  11. 菜鸟学Struts2——Interceptors
  12. 保存的离线网页总是自动跳转
  13. 如何对Pandas DataFrame进行自定义排序
  14. sklearn之线性回归实现—阿里云天池二手车交易价格预测赛
  15. 微服务系统架构的演变
  16. 三阶魔方大中小魔公式_三阶魔方的入门玩法教程|魔方玩法|魔方视频教程|魔方公式图解|--想成为魔方高手就来魔方乐园吧...
  17. vue+elementui+echarts饼状图内部显示百分比
  18. PE文件结构与程序装载
  19. 数据中心的等级 数据中心的分层
  20. 蓝桥杯每日一练专栏导读

热门文章

  1. windows好用的cmd命令
  2. 「SDOI 2008」山贼集团
  3. 存储圈老炮大战小鲜肉
  4. 教你如何自己写一个微信小游戏「跳一跳」外挂
  5. springboot集成knif4j,swagger
  6. Python密码库Cryptography探究学习
  7. vue-baidu-map百度地图搜索功能,点击进行标点,获取经纬度坐标,百度地图使用黑色主题
  8. 基于K8S的OpenStack部署实践
  9. 定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。
  10. 微信公众平台开发[3] —— 微信公众号支付功能(PHP)