16QAM调制解调源代码

合集下载

MATLAB环境下16QAM调制及解调仿真程序说明(精)

MATLAB环境下16QAM调制及解调仿真程序说明(精)

姓名:NikeyMATLAB环境下环境下环境下环境下16QAM调制及解调仿真调制及解调仿真调制及解调仿真调制及解调仿真程序说明程序说明程序说明程序说明一、正交调制及相干解调原理框图正交调制原理框图相干解调原理框图二、MQAM调制介绍及本仿真程序的几点说明 MQAM可以用正交调制的方法产生,本仿真中取M=16,即幅度和相位相结合的16个信号点的调制。

为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了不同强度的高斯白噪声,并统计其译码误码率。

为了简化程序和得到可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接产生与调制时一模一样的载波来进行信号解调。

三、仿真结果图附源程序代码:main_plot.m clear;clc;echo off;close all;N=10000; %设定码元数量fb=1; %基带信号频率fs=32; %抽样频率fc=4; %载波频率,为便于观察已调信号,我们把载波频率设的较低Kbase=2; % Kbase=1,不经基带成形滤波,直接调制;% Kbase=2,基带经成形滤波器滤波后,再进行调制info=random_binary(N; %产生二进制信号序列[y,I,Q]=qam(info,Kbase,fs,fb,fc; %对基带信号进行16QAM调制y1=y; y2=y; %备份信号,供后续仿真用T=length(info/fb; m=fs/fb; nn=length(info;dt=1/fs; t=0:dt:T-dt;subplot(211;%便于观察,这里显示的已调信号及其频谱均为无噪声干扰的理想情况%由于测试信号码元数量为10000个,在这里我们只显示其总数的1/10plot(t(1:1000,y(1:1000,t(1:1000,I(1:1000,t(1:1000,Q(1:1000,[0 35],[0 0],'b:';title('已调信号(In:red,Qn:green';%傅里叶变换,求出已调信号的频谱n=length(y; y=fft(y/n; y=abs(y(1:fix(n/2*2;q=find(y<1e-04; y(q=1e-04; y=20*log10(y;f1=m/n; f=0:f1:(length(y-1*f1;subplot(223;plot(f,y,'r';grid on;title('已调信号频谱'; xlabel('f/fb';%画出16QAM调制方式对应的星座图subplot(224;constel(y1,fs,fb,fc; title('星座图';SNR_in_dB=8:2:24; %AWGN信道信噪比for j=1:length(SNR_in_dBy_add_noise=awgn(y2,SNR_in_dB(j; %加入不同强度的高斯白噪声y_output=qamdet(y_add_noise,fs,fb,fc; %对已调信号进行解调 numoferr=0; for i=1:Nif (y_output(i~=info(i,numoferr=numoferr+1;end;end;Pe(j=numoferr/N; %统计误码率end; figure;semilogy(SNR_in_dB,Pe,'red*-';grid on;xlabel('SNR in dB';ylabel('Pe';title('16QAM调制在不同信道噪声强度下的误码率';random_binary.m %产生二进制信源随机序列function [info]=random_binary(Nif nargin == 0, %如果没有输入参数,则指定信息序列为10000个码元 N=10000; end;for i=1:N,temp=rand;if (temp<0.5,info(i=0; % 1/2的概率输出为0elseinfo(i=1; % 1/2的概率输出为1endend;qam.m function [y,I,Q]=qam(x,Kbase,fs,fb,fc;%T=length(x/fb; m=fs/fb; nn=length(x;dt=1/fs; t=0:dt:T-dt;%串/并变换分离出I分量、Q分量,然后再分别进行电平映射I=x(1:2:nn-1; [I,In]=two2four(I,4*m;Q=x(2:2:nn; [Q,Qn]=two2four(Q,4*m;if Kbase==2; %基带成形滤波I=bshape(I,fs,fb/4; Q=bshape(Q,fs,fb/4;end;y=I.*cos(2*pi*fc*t-Q.*sin(2*pi*fc*t; %调制qamdet.m %QAM信号解调function [xn,x]=qamdet(y,fs,fb,fc;dt=1/fs; t=0:dt:(length(y-1*dt;I=y.*cos(2*pi*fc*t;Q=-y.*sin(2*pi*fc*t;[b,a]=butter(2,2*fb/fs; %设计巴特沃斯滤波器 I=filtfilt(b,a,I; Q=filtfilt(b,a,Q;m=4*fs/fb; N=length(y/m; n=(.6:1:N*m; n=fix(n;In=I(n; Qn=Q(n; xn=four2two([In Qn];%I分量Q分量并/串转换,最终恢复成码元序列xn nn=length(xn; xn=[xn(1:nn/2;xn(nn/2+1:nn];xn=xn(:; xn=xn';bshape.m %基带升余弦成形滤波器function y=bshape(x,fs,fb,N,alfa,delay;%设置默认参数if nargin<6; delay=8; end;if nargin<5; alfa=0.5; end;if nargin<4; N=16; end;b=firrcos(N,fb,2*alfa*fb,fs;y=filter(b,1,x;two2four.m %二进制转换成四进制function [y,yn]=two2four(x,m;T=[0 1;3 2]; n=length(x; ii=1;for i=1:2:n-1;xi=x(i:i+1+1;yn(ii=T(xi(1,xi(2;ii=ii+1;end;yn=yn-1.5; y=yn;for i=1:m-1;y=[y;yn];end;y=y(:'; %映射电平分别为-1.5;0.5;0.5;1.5four2two.m %四进制转换成二进制function xn=four2two(yn;y=yn; ymin=min(y; ymax=max(y; ymax=max([ymax abs(ymin];ymin=-abs(ymax; yn=(y-ymin*3/(ymax-ymin;%设置门限电平,判决I0=find(yn< 0.5; yn(I0=zeros(size(I0;I1=find(yn>=0.5 & yn<1.5; yn(I1=ones(size(I1;I2=find(yn>=1.5 & yn<2.5; yn(I2=ones(size(I2*2; I3=find(yn>=2.5; yn(I3=ones(size(I3*3;%一位四进制码元转换为两位二进制码元T=[0 0;0 1;1 1;1 0]; n=length(yn;for i=1:n;xn(i,:=T(yn(i+1,:;end;xn=xn'; xn=xn(:; xn=xn';constel.m %画出星座图function c=constel(x,fs,fb,fc;N=length(x; m=2*fs/fb; n=fs/fc;i1=m-n; i=1; ph0=(i1-1*2*pi/n;while i <= N/m;xi=x(i1:i1+n-1;y=2*fft(xi/n; c(i=y(2;i=i+1; i1=i1+m;end;%如果无输出,则作图if nargout<1;cmax=max(abs(c;ph=(0:5:360*pi/180;plot(1.414*cos(ph,1.414*sin(ph,'c';hold on;for i=1:length(c;ph=ph0-angle(c(i;a=abs(c(i/cmax*1.414;plot(a*cos(ph,a*sin(ph,'r*';end;plot([-1.5 1.5],[0 0],'k:',[0 0],[-1.5 1.5],'k:'; hold off; axis equal; axis([-1.5 1.5 -1.5 1.5]; end;。

16QAM调制与解调的MATLAB实现及调制性能分析

16QAM调制与解调的MATLAB实现及调制性能分析

通信原理课程设计报告书课题名称16QAM 调制与解调 的MATLAB 实现及调制性能分析姓名 学号学院通信与电子工程学院 专 通信工程※※※※※※※※※※※※※ ※※※※※※※※※※※2009级通信工程专业 通信原理课程设计业指导李梦醒教师2012年 01 月 01日16QAM 调制与解调的MATLAB 实现及调制性能分析 1 设计目的(1) 掌握16QAM 调制与解调的原理。

(2) 掌握星座图的原理并能熟悉星座图的应用。

(3) 熟悉并掌握MATLAB 的使用方法。

(4) 通过对16QAM 调制性能的分析了解16QAM 调制相对于其它调制方式的优缺点。

2 设计原理正交振幅调制(Quadrature Amplitude Modulation,QAM )是一种振幅和相位联合键控。

虽然MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。

但是由图1可见,在MPSK 体制中,随着8/15π图 1 8PSK 信号相位8/5π8/3π8/π8/7π8/9π8/11π8/13πM 的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。

为了改善在M 大时的噪声容限,发展出了QAM 体制。

在QAM 体制中,信号的振幅和相位作为两个独立的参量同时受到调制。

这种信号的一个码元可以表示为0()cos() (1)k k k s t A t kT t k T ωθ=+<≤+ (2—1)式中:k=整数;k A 和k θ分别可以取多个离散值。

式(2—1)可以展开为00()cos cos sin sin k k k k k s t A t A t θωθω=- (2—2)令 X k = A k cosk , Y k = -A k sin k 则式(2—1)变为00()cos sin k k k s t X t Y t ωω=+ (2—3)k X 和k Y 也是可以取多个离散的变量。

16QAM调制与解调的MATLAB实现及调制性能分析

16QAM调制与解调的MATLAB实现及调制性能分析

通信原理课程设计报告书课题名称16QAM 调制与解调的MATLAB 实现及调制性能分析姓 名学 号 学 院 通信与电子工程学院专 业 通信工程 指导教师李梦醒2012年 01 月 01日※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※2009级通信工程专业通信原理课程设计16QAM调制与解调的MATLAB实现及调制性能分析(1) 掌握16QAM 调制与解调的原理。

(2) 掌握星座图的原理并能熟悉星座图的应用。

(3) 熟悉并掌握MATLAB 的使用方法。

(4) 通过对16QAM 调制性能的分析了解16QAM 调制相对于其它调制方式的优缺点。

2 设计原理正交振幅调制(Quadrature Amplitude Modulation,QAM )是一种振幅和相位联合键控。

虽然MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。

但是由图1可见,在MPSK 体制中,随着8/15π图 1 8PSK 信号相位M 的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。

为了改善在M 大时的噪声容限,发展出了QAM 体制。

在QAM 体制中,信号的振幅和相位作为两个独立的参量同时受到调制。

这种信号的一个码元可以表示为0()cos() (1)k k k s t A t kT t k T ωθ=+<≤+ (2—1)式中:k=整数;k A 和k θ分别可以取多个离散值。

式(2—1)可以展开为00()cos cos sin sin k k k k k s t A t A t θωθω=- (2—2)令 X k = A k cos θk , Y k = -A k sin θk 则式(2—1)变为00()cos sin k k k s t X t Y t ωω=+ (2—3)8/5π8/3π8/π8/7π8/9π8/11π8/13πk X 和k Y 也是可以取多个离散的变量。

基于FPGA的16QAM调制解调电路设计毕业设计(论文)

基于FPGA的16QAM调制解调电路设计毕业设计(论文)

毕业设计(论文)设计(论文)题目:基于FPGA的16QAM调制解调电路设计摘要正交振幅调制(QAM)技术有着非常广泛的应用范围,不仅在移动通信领域应用,而且在有线电视传输、数字视频广播卫星通信(DVB-S)等领域也都得到广泛应用。

它在调制过程中利用了相位和幅度两维空间资源,比只利用单一维度空间资源的PSK和ASK调制方式频谱利用率高,不仅如此,QAM的星座点比PSK的星座点更分散,星座点之间的距离因此更大,所以能提供更好的传输性能。

本文在对QAM调制解调的基本原理、调制端的基带成形理论研究的基础上,通过Matlab 软件的Simulink仿真平台实现了16QAM调制解调系统的建立及实验验证。

之后利用Alera 公司的Quartus II软件加载ModelSim作为软件开发环境,设计并实现了16QAM调制解调系统的串并转换、差分和星座映射、DDS和加法器等关键模块。

关于载波信号发生器的设计,本文釆取传统DDS采用的正弦查表来实现DDS中相位幅度的转换。

本文主要研究了基于FPGA的16QAM调制与解调的实现。

釆用Verilog硬件描述语言对16QAM调制解调系统中的关键模块进行描述,完成了功能上的仿真验证,通过对比验证了设计的正确性,为下一步的硬件实现打下了很好的基础。

说明了QAM调制和解调的原理,,然后对各系统组成模块分析与仿真之后提出基于FPGA的16QAM调制与解调的总体设计方案。

最后用Verilog语言编写程序完成了整个系统的仿真,并对编好的程序其进行了编译调试。

首先对16QAM调制解调总体进行了系统仿真;然后用Verilog语言在Quartus II软件平台下完成了系统各功能模块的编写、功能与时序仿真和综合,最后把各模块组成的顶层原理图编译成的程序下载到EPMC20T100C5芯片上,手动输入基带信号,经过芯片处理后,基带信号得以有效恢复。

【关键词】正交振幅调制FPGA 调制解调现场可编程逻辑门阵列ABSTRACTQAM(Quadrature Amplitude Modulation) is a new modulation technique, because of the use of phase and amplitude two-dimensional space resources in the modulation process, it has a higher efficiency than PSK and ASK modulation witch use only a single dimension of space resources. Moreover, the QAM constellation points of PSK constellation points more dispersed, the distance between the constellation points is therefore, so it is able to provide better transmission performance. With the rise of third generation mobile communication and the transmission capacity increases, M-ary quadrature amplitude modulation of MQAM (Multiple quadrature the Amplitude Modulation) will be more widely used. This paper studies the realization of FPGA-based 16QAM modulation and demodulation. Firstly, the principle of QAM modulation is presented, and the modeling of the 16QAM modulation&demodulation system is built with the SystemView software.Then, by way of analyzing system composition modules and partial simulation, the design of the l6QAM modulation system based on FPGA is put forwards. Finally the whole system simulation is realized with Verilog, And programmed to compile debug. In this paper, the principle and design method of carrier recovery, quadrature coherent demodulator, FIR low pass filter and sampling and decision are detailedly introduced.Firstly, The system of 16QAM is simulated with SystemView. Then, each functional module is implemented with Verilog HDL on the Quartus II sofiware flat, and the function&timing simulation and the synthesis are finished. Finally, the program compiled from the top schematic diagram is downloaded to the EP2C35F672C6N chip and when manually entered the baseband signal, the signal can be effectively recovered.【Key words】Quadrature amplitude modulation FPGA modulation demodulation field programmable logic gate array目录前言.................................................................................................................................... - 1 - 第一章概述........................................................................................................................ - 3 - 第一节课题研究背景及意义......................................................................................... - 3 - 第二节QAM技术现状与发展 ...................................................................................... - 3 - 第三节本文内容和结构................................................................................................. - 5 - 第四节本章小结............................................................................................................. - 5 - 第二章QAM调制解调整体设计 ......................................................................................... - 6 - 第一节16QAM调制的方法和原理 .............................................................................. - 6 - 第二节16QAM解调方法和原理 .................................................................................. - 8 - 第三节本章小结............................................................................................................. - 9 - 第三章QAM调制器分模块设计 ....................................................................................... - 10 - 第一节FPGA概述 ....................................................................................................... - 10 - 第二节串/并转换模块.................................................................................................. - 12 - 第三节DDS载波和线性加法器模块.......................................................................... - 14 - 第四节差分编码和星座映射模块............................................................................... - 22 - 第五节时钟分频模块................................................................................................... - 25 - 第六节本章小结........................................................................................................... - 27 - 第四章QAM解调器分模块设计 ....................................................................................... - 28 - 第一节解调器顶层模块设计....................................................................................... - 28 - 第三节DDS载波恢复模块设计.................................................................................. - 33 - 第四节乘法器模块设计............................................................................................... - 37 - 第四节低通滤波器模块设计....................................................................................... - 38 - 第五节采样判决模块设计........................................................................................... - 39 - 第六节电平转换模块设计........................................................................................... - 41 - 第七节本章小结........................................................................................................... - 41 - 第五章调制解调系统的仿真............................................................................................ - 42 - 第一节仿真参数设置................................................................................................... - 42 - 第二节仿真结果........................................................................................................... - 42 -一、16QAM调制器的仿真结果 ........................................................................... - 42 -二、16QAM解制器的仿真结果 ........................................................................... - 46 -第三节仿真结果分析................................................................................................... - 50 - 第五节本章小结........................................................................................................... - 50 -结论.................................................................................................................................... - 52 - 致谢.................................................................................................................................... - 53 - 参考文献................................................................................................................................ - 54 - 附录.................................................................................................................................... - 55 -一、英文原文................................................................................................................. - 55 -二、英文翻译................................................................................................................. - 62 -三、源程序..................................................................................................................... - 68 -四、其他......................................................................................................................... - 74 -前言在许多领域现场可编程门阵列(FPGA)芯片都有广泛的应用,尤其是在数字通信领域当中,FPGA极强的实时性和并行处理能力能够完成对信号的实时处理。

MATLAB环境下16QAM调制及解调仿真程序说明

MATLAB环境下16QAM调制及解调仿真程序说明

创作编号:BG7531400019813488897SX创作者:别如克*姓名:NikeyMATLAB环境下16QAM调制及解调仿真程序说明一、正交调制及相干解调原理框图正交调制原理框图相干解调原理框图二、MQAM调制介绍及本仿真程序的几点说明MQAM可以用正交调制的方法产生,本仿真中取M=16,即幅度和相位相结合的16个信号点的调制。

为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了不同强度的高斯白噪声,并统计其译码误码率。

为了简化程序和得到可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接产生与调制时一模一样的载波来进行信号解调。

三、仿真结果图附源程序代码:main_plot.mclear;clc;echo off;close all;N=10000; %设定码元数量fb=1; %基带信号频率fs=32; %抽样频率fc=4; %载波频率,为便于观察已调信号,我们把载波频率设的较低Kbase=2; % Kbase=1,不经基带成形滤波,直接调制;% Kbase=2,基带经成形滤波器滤波后,再进行调制info=random_binary(N); %产生二进制信号序列[y,I,Q]=qam(info,Kbase,fs,fb,fc); %对基带信号进行16QAM调制y1=y; y2=y; %备份信号,供后续仿真用T=length(info)/fb; m=fs/fb; nn=length(info);dt=1/fs; t=0:dt:T-dt;subplot(211);%便于观察,这里显示的已调信号及其频谱均为无噪声干扰的理想情况%由于测试信号码元数量为10000个,在这里我们只显示其总数的1/10plot(t(1:1000),y(1:1000),t(1:1000),I(1:1000),t(1:1000),Q(1:1000),[0 35],[0 0],'b:');title('已调信号(In:red,Qn:green)');%傅里叶变换,求出已调信号的频谱n=length(y); y=fft(y)/n; y=abs(y(1:fix(n/2)))*2;q=find(y<1e-04); y(q)=1e-04; y=20*log10(y);f1=m/n; f=0:f1:(length(y)-1)*f1;subplot(223);plot(f,y,'r');grid on;title('已调信号频谱'); xlabel('f/fb');%画出16QAM调制方式对应的星座图subplot(224);constel(y1,fs,fb,fc); title('星座图');SNR_in_dB=8:2:24; %AWGN信道信噪比for j=1:length(SNR_in_dB)y_add_noise=awgn(y2,SNR_in_dB(j)); %加入不同强度的高斯白噪声y_output=qamdet(y_add_noise,fs,fb,fc); %对已调信号进行解调numoferr=0;for i=1:Nif (y_output(i)~=info(i)),创作编号:BG7531400019813488897SX创作者:别如克*numoferr=numoferr+1;end;end;Pe(j)=numoferr/N; %统计误码率end;figure;semilogy(SNR_in_dB,Pe,'red*-');grid on;xlabel('SNR in dB');ylabel('Pe');title('16QAM调制在不同信道噪声强度下的误码率');random_binary.m%产生二进制信源随机序列function [info]=random_binary(N)if nargin == 0, %如果没有输入参数,则指定信息序列为10000个码元N=10000;end;for i=1:N,temp=rand;if (temp<0.5),info(i)=0; % 1/2的概率输出为0elseinfo(i)=1; % 1/2的概率输出为1endend;qam.mfunction [y,I,Q]=qam(x,Kbase,fs,fb,fc);%T=length(x)/fb; m=fs/fb; nn=length(x);dt=1/fs; t=0:dt:T-dt;%串/并变换分离出I分量、Q分量,然后再分别进行电平映射I=x(1:2:nn-1); [I,In]=two2four(I,4*m);Q=x(2:2:nn); [Q,Qn]=two2four(Q,4*m);if Kbase==2; %基带成形滤波I=bshape(I,fs,fb/4); Q=bshape(Q,fs,fb/4);end;y=I.*cos(2*pi*fc*t)-Q.*sin(2*pi*fc*t); %调制qamdet.m%QAM信号解调function [xn,x]=qamdet(y,fs,fb,fc);dt=1/fs; t=0:dt:(length(y)-1)*dt;I=y.*cos(2*pi*fc*t);Q=-y.*sin(2*pi*fc*t);[b,a]=butter(2,2*fb/fs); %设计巴特沃斯滤波器I=filtfilt(b,a,I);Q=filtfilt(b,a,Q);m=4*fs/fb; N=length(y)/m; n=(.6:1:N)*m; n=fix(n);In=I(n); Qn=Q(n); xn=four2two([In Qn]);%I分量Q分量并/串转换,最终恢复成码元序列xnnn=length(xn); xn=[xn(1:nn/2);xn(nn/2+1:nn)];xn=xn(:); xn=xn';bshape.m%基带升余弦成形滤波器function y=bshape(x,fs,fb,N,alfa,delay);%设置默认参数if nargin<6; delay=8; end;if nargin<5; alfa=0.5; end;if nargin<4; N=16; end;b=firrcos(N,fb,2*alfa*fb,fs);y=filter(b,1,x);two2four.m创作编号:BG7531400019813488897SX创作者:别如克*%二进制转换成四进制function [y,yn]=two2four(x,m);T=[0 1;3 2]; n=length(x); ii=1;for i=1:2:n-1;xi=x(i:i+1)+1;yn(ii)=T(xi(1),xi(2));ii=ii+1;end;yn=yn-1.5; y=yn;for i=1:m-1;y=[y;yn];end;y=y(:)'; %映射电平分别为-1.5;0.5;0.5;1.5four2two.m%四进制转换成二进制function xn=four2two(yn);y=yn; ymin=min(y); ymax=max(y); ymax=max([ymax abs(ymin)]);ymin=-abs(ymax); yn=(y-ymin)*3/(ymax-ymin);%设置门限电平,判决I0=find(yn< 0.5); yn(I0)=zeros(size(I0));I1=find(yn>=0.5 & yn<1.5); y n(I1)=ones(size(I1));I2=find(yn>=1.5 & yn<2.5); y n(I2)=ones(size(I2))*2;I3=find(yn>=2.5); yn(I3)=ones(size(I3))*3;%一位四进制码元转换为两位二进制码元T=[0 0;0 1;1 1;1 0]; n=length(yn);for i=1:n;xn(i,:)=T(yn(i)+1,:);end;xn=xn'; xn=xn(:); xn=xn';constel.m%画出星座图function c=constel(x,fs,fb,fc);N=length(x); m=2*fs/fb; n=fs/fc;i1=m-n; i=1; ph0=(i1-1)*2*pi/n;while i <= N/m;xi=x(i1:i1+n-1);y=2*fft(xi)/n; c(i)=y(2);i=i+1; i1=i1+m;end;%如果无输出,则作图if nargout<1;cmax=max(abs(c));ph=(0:5:360)*pi/180;plot(1.414*cos(ph),1.414*sin(ph),'c');hold on;for i=1:length(c);ph=ph0-angle(c(i));a=abs(c(i))/cmax*1.414;plot(a*cos(ph),a*sin(ph),'r*');end;plot([-1.5 1.5],[0 0],'k:',[0 0],[-1.5 1.5],'k:');hold off; axis equal; axis([-1.5 1.5 -1.5 1.5]);end;创作编号:BG7531400019813488897SX创作者:别如克*。

16QAM-星形和矩形星座图调制解调MATLAB代码

16QAM-星形和矩形星座图调制解调MATLAB代码

%% ------------------------------------------------------------% 软件无线电课程设计%% 方形、星形16QAM调制解调仿真%%%------------------------------------------------------------%%主程序clcclear%% 定义参数fd=250*10^6; %码元速率250Mfs=2500*10^6; %滤波器采样率fc=2500*10^6; %载波频率2.5Gf=10000*10^6; %对载波采样data_len=200000; %数据长度sym_len=data_len/4; %码元序列长度M_QAM=16;%QAM数k=log2(M_QAM);SNR=1:12;%白噪声信噪比,%% ------------------------------------------------------------bit_tx=randint(1,data_len);%产生随机序列echo off;rec_qam16=QamMod(bit_tx,16); %方形16QAM调制star_qam16=SrarQamMod(bit_tx); %星形16QAM调制base_rec=base_shape(fd,fs,f,rec_qam16); %基带成型滤波base_star=base_shape(fd,fs,f,star_qam16); %基带成型滤波for i=1:length(SNR) %信噪比从1dB到12dB计算误码率SNR_=i%方形映射16QAMrf_rec_qam16=CarrierMod(fc,f,base_rec); %载波调制rf_rec_qam16_n=awgn(rf_rec_qam16,SNR(i),'measured'); %加噪声[rec_qam16_rx base_rec_rx]=CarrierDemod(fd,fs,fc,f,rf_rec_qam16_n); %载波解调bit_rec_rx=QamDemod(rec_qam16_rx,16); %MQAM解调[num_qam16,perr_qam16_rec(i)]=biterr(bit_tx,bit_rec_rx);%误码率qam16_data_rec(i,:)=rec_qam16_rx;%scatterplot(rec_qam16_rx);%星形映射16QAMrf_star_qam16=CarrierMod(fc,f,base_star); %载波调制rf_star_qam16_n=awgn(rf_star_qam16,SNR(i),'measured'); %加噪声[star_qam16_rx base_star_rx]=CarrierDemod(fd,fs,fc,f,rf_star_qam16_n); %载波解调bit_star_rx=StarQamDemod(star_qam16_rx); %MQAM解调[num_qam16,perr_qam16_star(i)]=biterr(bit_tx,bit_star_rx);%误码率qam16_data_star(i,:)=star_qam16_rx;%scatterplot(star_qam16_rx);end%% 理论误码率计算SNRtheo=0:0.1:length(SNR);for i=1:length(SNRtheo)SNRdec=10.^(SNRtheo(i)/10);theo_perr_qam16(i)=(3/8)*erfc(sqrt(SNRdec*2/5));end%% 基带波形N=200;n=1:N;t=1:N*10;%发送端波形figure;stem(n,bit_tx(n)); title('发送序列'); %发送序列figure('Name','发送端基带信号');subplot(411);plot(t,real(base_rec(t))); title('方形映射-Q路');subplot(412);plot(t,imag(base_rec(t))); title('方形映射-I路');subplot(413);plot(t,real(base_star(t))); title('星形映射-Q路');subplot(414);plot(t,imag(base_star(t))); title('星形映射-I路');%接收端波形figure;subplot(211);stem(n,bit_rec_rx(n)); title('方形接收序列');subplot(212);stem(n,bit_star_rx(n)); title('星形接收序列');figure('Name','接收端基带信号');subplot(411);plot(t,real(base_rec_rx(t))); title('方形映射-Q路');subplot(412);plot(t,imag(base_rec_rx(t))); title('方形映射-I路');subplot(413);plot(t,real(base_star_rx(t))); title('星形映射-Q路');subplot(414);plot(t,imag(base_star_rx(t))); title('星形映射-I路');%基带眼图N1=20000;Tn=f/fd;eye_rex=base_rec(1:N1);eyediagram(eye_rex,Tn*4,Tn); title('方形基带眼图');eye_star=base_star(1:N1);eyediagram(eye_star,Tn*4,Tn); title('星形基带眼图');%% 接收端星座图%scatterplot(qam16_data_rec(12,:));figure('Name','方形16QAM接收端星座图');for i=3:3:12subplot(2,2,i/3);plot(real(qam16_data_rec(i,:)),imag(qam16_data_rec(i,:)),'.');xmax=5;axis([-xmax xmax -xmax xmax])title(['Snr=',num2str(SNR(i)),' dB']);endfigure('Name','星形16QAM接收端星座图');for i=3:3:12subplot(2,2,i/3);plot(real(qam16_data_star(i,:)),imag(qam16_data_star(i,:)),'.');xmax=3;axis([-xmax xmax -xmax xmax])grid on; title(['Snr=',num2str(SNR(i)),' dB']);end%% 功率谱密度f_plot;%% 误码率分析%16QAM误码率曲线figure('Name','16QAM误码性能对比');% semilogy(SNRtheo,theo_perr_qam16);% hold on;semilogy(SNR,perr_qam16_rec,'*');hold on;semilogy(SNR,perr_qam16_star,'o');xlabel('SNR in dB');ylabel('Prb of Err');legend('方形16QAM','星形16QAM');title('16QAM误码性能对比');%------------------------------------------------------------------------------- %% 基带成型function base_info=base_shape(fd,fs,f,seq_16QAM)%平方根升余弦滤波器,滚降系数0.5,延迟3个采样点flt=rcosine(fd,fs,'sqrt',0.5);%I路和Q路seq_Q=real(seq_16QAM);seq_I=imag(seq_16QAM);%增采样R=fs/fd;up_seq_Q=upsample(seq_Q,R);up_seq_I=upsample(seq_I,R);%升余弦调制rcos_Q=conv(up_seq_Q,flt);rcos_I=conv(up_seq_I,flt);%提升rcos_Q_up=interp(rcos_Q,f/fs);rcos_I_up=interp(rcos_I,f/fs);base_info=rcos_Q_up+j*rcos_I_up;%--------------------------------------------------------------------%% 载波解调function [data_rx base_rx]=CarrierDemod(fd,fs,fc,f,receive)%% 分两路乘正交高频载波rc_length=length(receive);flt=rcosine(fd,fs,'sqrt',0.5);t=0:rc_length-1;rc_Q=receive .* sin(2*pi*fc*t/f);rc_I=receive .* cos(2*pi*fc*t/f);%减采样后根升余弦匹配滤波,注意对齐采样点down_Q=downsample([0 rc_Q],f/fs);down_I=downsample(rc_I,f/fs);low_Q_rcos=conv(down_Q,flt);low_I_rcos=conv(down_I,flt);base_rx=low_Q_rcos(1:length(low_I_rcos))+j*low_I_rcos;%两次根升余弦滤波延迟,定位初始信号位置%delay+1:end-delay-1R=fs/fd;delay=3*R*2;rc_Q_seq=(downsample(low_Q_rcos(delay+1:end-delay-1),R));rc_I_seq=(downsample(low_I_rcos(delay+1:end-delay-1),R)); %类型转换data_rx=rc_Q_seq+j*rc_I_seq;%--------------------------------------------------------------------------%% 载波调制function transmit=CarrierMod(fc,f,base)%载波调制t=0:length(base)-1;high_freq_Q=real(base) .* sin(2*pi*fc*t/f);high_freq_I=imag(base) .* cos(2*pi*fc*t/f);transmit=high_freq_Q+high_freq_I;%------------------------------------------------------------------------------%% QAM解调程序,将MQAM码元还原为二进制数据% 入口参数:data_QAM:QAM码元数据% M_QAM:MQAM中M的大小% 出口参数:二进制数据比特流%------------------------------------------------------------------------function data_out=QamDemod(data_QAM,M_QAM)k=log2(M_QAM);%每个M进制码元的bit数data_len=length(data_QAM);%码元长度%-------------------------------------------------------------------%QAM信号放缩至与发送端相同比例data_temp=data_QAM(find(real(data_QAM>0)));aver=mean(real(data_temp));data_Qam_temp=data_QAM/aver*(2^(k/2-1));%------------------------------------------------------------------------%平移到第一象限data_Qam_temp2=(data_Qam_temp+(2^(k/2)-1)*(1+j))/2;%----------------------------------------------------------------------%将实部虚部分别映射为二进制数据%实部data_real=round(real(data_Qam_temp2));%实部判决data_real(find(data_real>(2^(k/2)-1)))=2^(k/2)-1;%大于2^(k/2)-1的数据判定为2^(k/2)-1 data_real(find(data_real<0))=0;%小于0的数据判为0bit_real=abs(dec2bin(data_real))-'0';%虚部data_imag=round(imag(data_Qam_temp2));%虚部判决data_imag(find(data_imag>(2^(k/2)-1)))=2^(k/2)-1;%大于2^(k/2)-1的数据判定为2^(k/2)-1 data_imag(find(data_imag<0))=0;%小于0的数据判为0bit_imag=abs(dec2bin(data_imag))-'0';%------------------------------------------------------------------------%还原为二进制比特流bit_rec=[bit_real,bit_imag]';data_out=reshape(bit_rec,1,data_len*k);%-------------------------------------------------------------------------------------------------------------%% QAM调制程序,实现二进制到MQam调制% 入口参数:binary:二进制数据% M_QAM:MQAM中M的大小% 返回参数:MQAM码元%------------------------------------------------------------------------function data_M = QamMod(binary,M_QAM)k=log2(M_QAM);%每个M进制码元的bit数data_len=length(binary);%比特长度binary_rec=reshape(binary,k,data_len/k)';%转化为data_len/k行,k列,的矩阵,以便转化为16进制M进制%计算实部data_str1=num2str(binary_rec(:,1:k/2));data_m_real=bin2dec(data_str1);%计算虚部data_str2=num2str(binary_rec(:,k/2+1:k));data_m_imag=bin2dec(data_str2);%实部虚部映射到MQamdata_M=((data_m_real*2-2^(k/2)+1)+j*(data_m_imag*2-2^(k/2)+1)).';%---------------------------------------------------------------------------------%% 星形16QAM映射function data_m16 = SrarQamMod(binary)%binary=randint(1,100);%产生随机序列data_len=length(binary);%比特长度binary_rec=reshape(binary,4,data_len/4)';%转化为data_len/4行,4列,的矩阵,以便转化为16进制data_str=num2str(binary_rec);data_dec=bin2dec(data_str);data_mm16=(floor(data_dec/8)+1).*exp(j*45/180*pi*mod(data_dec,8));data_m16=reshape(data_mm16,1,data_len/4);%------------------------------------------------------------------------------%% 星形16QAM解调function data_bit = StarQamDemod(qam_rev)%qam_rev=xing_qam16_noise(1:10);am=abs(qam_rev);%幅度判定am(find(am>2))=2;%幅度大于2的判定为2am(find(am<1.5))=1;%幅度大于2的判定为2%相位判定ang=angle(qam_rev)/pi*180;%将-180度到0度变为180度到360度ang(find(ang<0))=ang(find(ang<0))+360;ang_n=round(ang/45);ang_n(find(ang_n>7))=0;data_dec=8*(round(am)-1)+ang_n;%data_dec(find(data_dec>15))=15;%大于15的判定为15%data_dec(find(data_dec<0))=0;%小于0的判定为0data_bit_rec=dec2bin(data_dec);data_bit=reshape(data_bit_rec',1,length(qam_rev)*4)-'0';。

MATLAB环境下16QAM调制与解调仿真程序说明

MATLAB环境下16QAM调制与解调仿真程序说明

姓名: NikeyMATLAB环境下16QAM调制及解调仿真程序说明一、正交调制及相干解调原理框图基带信号x串并转换In电平映射成形滤波Xcoswt载波发生器已调信号 y+90度相移Qn-sinwt已调信号yEPF电平映射成形滤波X正交调制原理框图InX LPF抽样判决coswt并恢复信号 x串载波恢复时钟恢复转换90度相移-sinwtQnX LPF抽样判决相干解调原理框图二、MQAM 调制介绍及本仿真程序的几点说明MQAM 可以用正交调制的方法产生,本仿真中取M=16,即幅度和相位相结合的16个信号点的调制。

为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了不同强度的高斯白噪声,并统计其译码误码率。

为了简化程序和得到可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接产生与调制时一模一样的载波来进行信号解调。

三、仿真结果图附源程序代码:main_plot.mclear;clc;echo off;close all;N=10000;% 设定码元数量fb=1;%基带信号频率fs=32;% 抽样频率fc=4;%载波频率 ,为便于观察已调信号,我们把载波频率设的较低Kbase=2;% Kbase=1, 不经基带成形滤波,直接调制 ;% Kbase=2,基带经成形滤波器滤波后,再进行调制info=random_binary(N);% 产生二进制信号序列[y,I,Q]=qam(info,Kbase,fs,fb,fc);% 对基带信号进行 16QAM 调制y1=y; y2=y;% 备份信号,供后续仿真用T=length(info)/fb;m=fs/fb;nn=length(info);dt=1/fs;t=0:dt:T-dt;subplot(211);%便于观察,这里显示的已调信号及其频谱均为无噪声干扰的理想情况%由于测试信号码元数量为 10000 个,在这里我们只显示其总数的1/10plot(t(1:1000),y(1:1000),t(1:1000),I(1:1000),t(1:1000),Q(1:1000),[0 35],[0 0],'b:');title(' 已调信号 (In:red,Qn:green)');%傅里叶变换,求出已调信号的频谱n=length(y);y=fft(y)/n;y=abs(y(1:fix(n/2)))*2;q=find(y<1e-04); y(q)=1e-04;y=20*log10(y);f1=m/n;f=0:f1:(length(y)-1)*f1;subplot(223);plot(f,y,'r');grid on;title(' 已调信号频谱 '); xlabel('f/fb');%画出 16QAM 调制方式对应的星座图subplot(224);constel(y1,fs,fb,fc);title(' 星座图 ');SNR_in_dB=8:2:24;%AWGN 信道信噪比for j=1:length(SNR_in_dB)y_add_noise=awgn(y2,SNR_in_dB(j)); %加入不同强度的高斯白噪声y_output=qamdet(y_add_noise,fs,fb,fc);% 对已调信号进行解调numoferr=0;for i=1:Nif (y_output(i)~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N;% 统计误码率end;figure;semilogy(SNR_in_dB,Pe,'red*-');grid on;xlabel('SNR in dB');ylabel('Pe');title('16QAM调制在不同信道噪声强度下的误码率');random_binary.m%产生二进制信源随机序列function [info]=random_binary(N)if nargin == 0,% 如果没有输入参数,则指定信息序列为10000 个码元N=10000;end;for i=1:N,temp=rand;if (temp<0.5),info(i)=0;% 1/2 的概率输出为0elseinfo(i)=1;% 1/2 的概率输出为1endend;qam.mfunction [y ,I,Q]=qam(x,Kbase,fs,fb,fc);%T=length(x)/fb;m=fs/fb;nn=length(x);dt=1/fs;t=0:dt:T-dt;%串/ 并变换分离出 I 分量、 Q 分量,然后再分别进行电平映射I=x(1:2:nn-1);[I,In]=two2four(I,4*m);Q=x(2:2:nn);[Q,Qn]=two2four(Q,4*m);if Kbase==2;I=bshape(I,fs,fb/4);% 基带成形滤波Q=bshape(Q,fs,fb/4);end;y=I.*cos(2*pi*fc*t)-Q.*sin(2*pi*fc*t);% 调制qamdet.m%QAM 信号解调function [xn,x]=qamdet(y ,fs,fb,fc);dt=1/fs; t=0:dt:(length(y)-1)*dt;I=y.*cos(2*pi*fc*t);Q=-y.*sin(2*pi*fc*t);[b,a]=butter(2,2*fb/fs);% 设计巴特沃斯滤波器I=filtfilt(b,a,I);Q=filtfilt(b,a,Q);m=4*fs/fb;N=length(y)/m;n=(.6:1:N)*m;n=fix(n);In=I(n);Qn=Q(n);xn=four2two([In Qn]);%I分量Q 分量并/串转换,最终恢复成码元序列xnnn=length(xn);xn=[xn(1:nn/2);xn(nn/2+1:nn)];xn=xn(:);xn=xn';bshape.m%基带升余弦成形滤波器function y=bshape(x,fs,fb,N,alfa,delay);%设置默认参数if nargin<6; delay=8;end;if nargin<5; alfa=0.5;end;if nargin<4; N=16;end;b=firrcos(N,fb,2*alfa*fb,fs);y=filter(b,1,x);two2four.m%二进制转换成四进制function [y ,yn]=two2four(x,m);T=[0 1;3 2];n=length(x); ii=1;for i=1:2:n-1;xi=x(i:i+1)+1;yn(ii)=T(xi(1),xi(2));ii=ii+1;end;yn=yn-1.5;y=yn;for i=1:m-1;y=[y;yn];end;y=y(:)'; % 映射电平分别为-1.5 ;0.5;0.5;1.5four2two.m%四进制转换成二进制function xn=four2two(yn);y=yn; ymin=min(y); ymax=max(y); ymax=max([ymax abs(ymin)]); ymin=-abs(ymax);yn=(y-ymin)*3/(ymax-ymin);% 设置门限电平,判决I0=find(yn< 0.5);I1=find(yn>=0.5 & yn<1.5); I2=find(yn>=1.5 & yn<2.5);yn(I0)=zeros(size(I0)); yn(I1)=ones(size(I1)); yn(I2)=ones(size(I2))*2;I3=find(yn>=2.5);yn(I3)=ones(size(I3))*3; %一位四进制码元转换为两位二进制码元T=[0 0;0 1;1 1;1 0]; n=length(yn);for i=1:n;xn(i,:)=T(yn(i)+1,:);end;xn=xn'; xn=xn(:);xn=xn';constel.m%画出星座图function c=constel(x,fs,fb,fc);N=length(x);m=2*fs/fb;n=fs/fc;i1=m-n; i=1;ph0=(i1-1)*2*pi/n;while i <= N/m;xi=x(i1:i1+n-1);y=2*fft(xi)/n;c(i)=y(2);i=i+1; i1=i1+m;end;%如果无输出,则作图if nargout<1;cmax=max(abs(c));ph=(0:5:360)*pi/180;plot(1.414*cos(ph),1.414*sin(ph),'c');hold on;for i=1:length(c);ph=ph0-angle(c(i));a=abs(c(i))/cmax*1.414;plot(a*cos(ph),a*sin(ph),'r*');end;plot([-1.5 1.5],[0 0],'k:',[0 0],[-1.5 1.5],'k:');hold off; axis equal;axis([-1.5 1.5 -1.5 1.5]); end;。

16QAM调制与解调的MATLAB实现及调制性能分析

16QAM调制与解调的MATLAB实现及调制性能分析

通信原理课程设计报告书课题名称16QAM 调制与解调的MATLAB 实现及调制性能分析姓 名学 号 学 院 通信与电子工程学院专 业 通信工程 指导教师李梦醒2012年 01 月 01日※※※※※※※※※ ※※ ※※ ※※2009级通信工程专业通信原理课程设计16QAM 调制与解调的MATLAB 实现及调制性能分析1 设计目的(1) 掌握16QAM 调制与解调的原理。

(2) 掌握星座图的原理并能熟悉星座图的应用。

(3) 熟悉并掌握MATLAB 的使用方法。

(4) 通过对16QAM 调制性能的分析了解16QAM 调制相对于其它调制方式的优缺点。

2 设计原理正交振幅调制(Quadrature Amplitude Modulation,QAM )是一种振幅和相位联合键控。

虽然MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。

但是由图1可见,在MPSK 体制中,随着8/15π图 1 8PSK 信号相位M 的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。

为了改善在M 大时的噪声容限,发展出了QAM 体制。

在QAM 体制中,信号的振幅和相位作为两个独立的参量同时受到调制。

这种信号的一个码元可以表示为0()cos() (1)k k k s t A t kT t k T ωθ=+<≤+ (2—1)式中:k=整数;k A 和k θ分别可以取多个离散值。

式(2—1)可以展开为00()cos cos sin sin k k k k k s t A t A t θωθω=- (2—2)令 X k = A k cosq k , Y k = -A k sinq k8/5π8/3π8/π8/7π8/9π8/11π8/13π则式(2—1)变为00()cos sin k k k s t X t Y t ωω=+ (2—3)k X 和k Y 也是可以取多个离散的变量。

无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解

无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解

先从IQ调制说起:IQ调制:IQ解调原理:Linux 下使用GNU Octave 运行下面的代码: MATLAB 1 2 3 4 5 6 t =-1:0.001:1;f =1;y =cos (2*pi *2*f *t);subplot (1,2,1);plot (t,y);y =sin (2*pi *2*f *t);subplot (1,2,2);plot (t,y);前面我们讲了IQ 调制和解调的原理,下来我们看一下如何应用IQ 调制来实现MPSK 调制(QPSK 、8PSK 等)、MQAM 调制(16QAM 、64QAM 等)。

先来了解一下BPSK (Binary Phase Shift Keying ,二相相移键控)如何用IQ调制实现QPSK调制?Linux 下使用GNU Octave 运行下面的代码: MATLAB1 2 3 4 5 %输入信号>> subplot (4,1,1);>> t =0:0.001:8;>> d =[0 0 ;0.5 1;1 1;1.5 0;2 1 ;2.5 1;3 0;3.5 0;4 0;4.5 1 ;5 1 ;5.5 0 ;6 1 ;6.56 7 8 9 10 11 1 ;7 0 ;7.5 0];>> s =pulstran (t -0.25,d,'rectpuls',0.5);plot (t,s) ;>> axis ([0 8 -0.5 1.5]);>> text (0.25,1.2,'0') ; text (0.75,1.2,'1') ; text (1.25,1.2,'1') ;text (1.75,1.2,'0') ;>> text (2.25,1.2,'1') ; text (2.75,1.2,'1') ; text (3.25,1.2,'0') ;text (3.75,1.2,'0') ;>> text (4.25,1.2,'0') ; text (4.75,1.2,'1') ; text (5.25,1.2,'1') ;text (5.75,1.2,'0') ;>> text (6.25,1.2,'1') ; text (6.75,1.2,'1') ; text (7.25,1.2,'0') ;text (7.75,1.2,'0') ;MATLAB1 2 3 4 5 6 7 8 9 10 % I 路信号>> subplot (4,1,2);>> t =0:0.001:8;>> a =1/sqrt (2);>> d =[0 -a ;1 +a;2 -a;3 +a; 4 -a ;5 +a;6 -a;7 +a];>> s =pulstran (t -0.5,d,'rectpuls');plot (t,s) ;>> axis ([0 8 -2 2]);>> text (0.5,1.5,'-0.7') ;text (1.5,1.5,'+0.7') ;text (2.5,1.5,'-0.7') ;text (3.5,1.5,'+0.7');>> text (4.5,1.5,'-0.7') ;text (5.5,1.5,'+0.7') ;text (6.5,1.5,'-0.7') ;text (7.5,1.5,'+0.7');MATLAB1 2 3 4 5 6 7 8 9 % Q 路信号>> subplot (4,1,3);>> t =0:0.001:8;>> d =[0 +a;1 -a;2 -a;3 +a; 4 +a;5 -a;6 -a;7 +a];>> s =pulstran (t -0.5,d,'rectpuls');plot (t,s) ;>> axis ([0 8 -2 2]);>> text (0.5,1.5,'+0.7') ; text (1.5,1.5,'-0.7') ; text (2.5,1.5,'-0.7') ; text (3.5,1.5,'+0.7')>> text (4.5,1.5,'+0.7') ; text (5.5,1.5,'-0.7') ; text (6.5,1.5,'-0.7') ; text (7.5,1.5,'+0.7')MATLAB1 2 3 4 5 6 7 8 9 10 11 12 %QPSK 调制信号>> subplot (4,1,4);>> t =0:0.001:8;>> d1=[0 -a ;1 +a;2 -a;3 +a; 4 -a ;5 +a;6 -a;7 +a];>> s1=pulstran (t -0.5,d1,'rectpuls').*cos (2*pi *5*t) ;>> d2=[0 +a;1 -a;2 -a;3 +a; 4 +a;5 -a;6 -a;7 +a];>> s2=pulstran (t -0.5,d2,'rectpuls').*sin (2*pi *5*t);>> plot (t,s1-s2) ;>> axis ([0 8 -2 2]);>> text (0.3,1.5,'3\pi/4') ; text (1.3,1.5, '7\pi/4') ; text (2.3,1.5,'5\pi/4') ; text (3.3,1.5,'\pi/4') ;>> text (4.3,1.5, '3\pi/4') ; text (5.3,1.5, '7\pi/4') ;text (6.3,1.5,'5\pi/4') ; text (7.3,1.5,'\pi/4') ;QPSK调制的星座图星座图,就是说一个坐标,如高中的单位圆,横坐标是I,纵坐标是Q,相应于投影到I轴的,叫同相分量,同理投影到Q轴的叫正交分量。

(完整版)16QAM调制与解调的MATLAB实现及调制性能分析

(完整版)16QAM调制与解调的MATLAB实现及调制性能分析

探※※※※※※※※% 2009级通信工程专业X■通信原理课程设计通信原理课程设计报告书16QAM调制与解调课题名称的MATLAB实现及调制性能分析姓名学号学院通信与电子工程学院专业通信工程指导教师李梦醒2012年01月01日一、设计任务及要求:设计任务:利用MATLAB设计一个16QAM调制与解调系统,并对其进行性能分析。

要求:1. 设计一个16QAM调制与解调系统。

2. 设计程序时必须使得程序尽可能的简单。

3. 利用MATLAB进行程序编写并对系统进行仿真分析。

指导教师签名:20年月日、指导教师评语:指导教师签名:_________________2010年月日二、成绩验收盖章2010年月日16QAM 调制与解调的MATLAB 实现及调制性能分析1设计目的(1) 掌握16QAM 调制与解调的原理。

(2) 掌握星座图的原理并能熟悉星座图的应用。

(3) 熟悉并掌握MATLAB 的使用方法。

(4)通过对16QAM 调制性能的分析了解16QAM 调制相对于其它调制方式的 优缺点。

2设计原理正交振幅调制(QuadratureAmplitude Modulation,QAM )是一种振幅和相位 联合键控。

虽然MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势, 即带宽占用小和比特噪声比要求低。

但是由图1可见,在MPSK 体制中,随着M 的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。

为了改善在M 大时的噪声容限,发展出了 QAM 体制。

在QAM 体制中,信号的 振幅和相位作为两个独立的参量同时受到调制。

这种信号的一个码元可以表示为sjt) A k cos( °tk) kT t (k 1)T(2—1)式中:k=整数; A k 和k 分别可以取多个离散值。

式(2 — 1) 可以展开为sjt)A. cos k cos 0tA . sin k sin 0t(2—2)/815 /8则式(2—1)变为X k和Y k也是可以取多个离散的变量。

MATLAB环境下16QAM调制及解调仿真程序说明精编版

MATLAB环境下16QAM调制及解调仿真程序说明精编版

姓名:NikeyMATLAB环境下16QAM调制及解调仿真程序说明一、正交调制及相干解调原理框图正交调制原理框图相干解调原理框图二、MQAM调制介绍及本仿真程序的几点说明MQAM可以用正交调制的方法产生,本仿真中取M=16,即幅度和相位相结合的16个信号点的调制。

为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了不同强度的高斯白噪声,并统计其译码误码率。

为了简化程序和得到可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接产生与调制时一模一样的载波来进行信号解调。

三、仿真结果图附源程序代码:main_plot.mclear;clc;echo off;close all;N=10000; %设定码元数量fb=1; %基带信号频率fs=32; %抽样频率fc=4; %载波频率,为便于观察已调信号,我们把载波频率设的较低Kbase=2; % Kbase=1,不经基带成形滤波,直接调制;% Kbase=2,基带经成形滤波器滤波后,再进行调制info=random_binary(N); %产生二进制信号序列[y,I,Q]=qam(info,Kbase,fs,fb,fc); %对基带信号进行16QAM调制y1=y; y2=y; %备份信号,供后续仿真用T=length(info)/fb; m=fs/fb; nn=length(info);dt=1/fs; t=0:dt:T-dt;subplot(211);%便于观察,这里显示的已调信号及其频谱均为无噪声干扰的理想情况%由于测试信号码元数量为10000个,在这里我们只显示其总数的1/10plot(t(1:1000),y(1:1000),t(1:1000),I(1:1000),t(1:1000),Q(1:1000),[0 35],[0 0],'b:');title('已调信号(In:red,Qn:green)');%傅里叶变换,求出已调信号的频谱n=length(y); y=fft(y)/n; y=abs(y(1:fix(n/2)))*2;q=find(y<1e-04); y(q)=1e-04; y=20*log10(y);f1=m/n; f=0:f1:(length(y)-1)*f1;subplot(223);plot(f,y,'r');grid on;title('已调信号频谱'); xlabel('f/fb');%画出16QAM调制方式对应的星座图subplot(224);constel(y1,fs,fb,fc); title('星座图');SNR_in_dB=8:2:24; %AWGN信道信噪比for j=1:length(SNR_in_dB)y_add_noise=awgn(y2,SNR_in_dB(j)); %加入不同强度的高斯白噪声y_output=qamdet(y_add_noise,fs,fb,fc); %对已调信号进行解调numoferr=0;for i=1:Nif (y_output(i)~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N; %统计误码率end;figure;semilogy(SNR_in_dB,Pe,'red*-');grid on;xlabel('SNR in dB');ylabel('Pe');title('16QAM调制在不同信道噪声强度下的误码率');random_binary.m%产生二进制信源随机序列function [info]=random_binary(N)if nargin == 0, %如果没有输入参数,则指定信息序列为10000个码元N=10000;end;for i=1:N,temp=rand;if (temp<0.5),info(i)=0; % 1/2的概率输出为0elseinfo(i)=1; % 1/2的概率输出为1endend;qam.mfunction [y,I,Q]=qam(x,Kbase,fs,fb,fc);%T=length(x)/fb; m=fs/fb; nn=length(x);dt=1/fs; t=0:dt:T-dt;%串/并变换分离出I分量、Q分量,然后再分别进行电平映射I=x(1:2:nn-1); [I,In]=two2four(I,4*m);Q=x(2:2:nn); [Q,Qn]=two2four(Q,4*m);if Kbase==2; %基带成形滤波I=bshape(I,fs,fb/4); Q=bshape(Q,fs,fb/4);end;y=I.*cos(2*pi*fc*t)-Q.*sin(2*pi*fc*t); %调制qamdet.m%QAM信号解调function [xn,x]=qamdet(y,fs,fb,fc);dt=1/fs; t=0:dt:(length(y)-1)*dt;I=y.*cos(2*pi*fc*t);Q=-y.*sin(2*pi*fc*t);[b,a]=butter(2,2*fb/fs); %设计巴特沃斯滤波器I=filtfilt(b,a,I);Q=filtfilt(b,a,Q);m=4*fs/fb; N=length(y)/m; n=(.6:1:N)*m; n=fix(n);In=I(n); Qn=Q(n); xn=four2two([In Qn]);%I分量Q分量并/串转换,最终恢复成码元序列xnnn=length(xn); xn=[xn(1:nn/2);xn(nn/2+1:nn)];xn=xn(:); xn=xn';bshape.m%基带升余弦成形滤波器function y=bshape(x,fs,fb,N,alfa,delay);%设置默认参数if nargin<6; delay=8; end;if nargin<5; alfa=0.5; end;if nargin<4; N=16; end;b=firrcos(N,fb,2*alfa*fb,fs);y=filter(b,1,x);two2four.m%二进制转换成四进制function [y,yn]=two2four(x,m);T=[0 1;3 2]; n=length(x); ii=1;for i=1:2:n-1;xi=x(i:i+1)+1;yn(ii)=T(xi(1),xi(2));ii=ii+1;end;yn=yn-1.5; y=yn;for i=1:m-1;y=[y;yn];end;y=y(:)'; %映射电平分别为-1.5;0.5;0.5;1.5four2two.m%四进制转换成二进制function xn=four2two(yn);y=yn; ymin=min(y); ymax=max(y); ymax=max([ymax abs(ymin)]); ymin=-abs(ymax); yn=(y-ymin)*3/(ymax-ymin);%设置门限电平,判决I0=find(yn< 0.5); yn(I0)=zeros(size(I0));I1=find(yn>=0.5 & yn<1.5); y n(I1)=ones(size(I1));I2=find(yn>=1.5 & yn<2.5); y n(I2)=ones(size(I2))*2;I3=find(yn>=2.5); yn(I3)=ones(size(I3))*3; %一位四进制码元转换为两位二进制码元T=[0 0;0 1;1 1;1 0]; n=length(yn);for i=1:n;xn(i,:)=T(yn(i)+1,:);end;xn=xn'; xn=xn(:); xn=xn';constel.m%画出星座图function c=constel(x,fs,fb,fc);N=length(x); m=2*fs/fb; n=fs/fc;i1=m-n; i=1; ph0=(i1-1)*2*pi/n;while i <= N/m;xi=x(i1:i1+n-1);y=2*fft(xi)/n; c(i)=y(2);i=i+1; i1=i1+m;end;%如果无输出,则作图if nargout<1;cmax=max(abs(c));ph=(0:5:360)*pi/180;plot(1.414*cos(ph),1.414*sin(ph),'c');hold on;for i=1:length(c);ph=ph0-angle(c(i));a=abs(c(i))/cmax*1.414;plot(a*cos(ph),a*sin(ph),'r*');end;plot([-1.5 1.5],[0 0],'k:',[0 0],[-1.5 1.5],'k:');hold off; axis equal; axis([-1.5 1.5 -1.5 1.5]); end;。

16qam格雷码编码

16qam格雷码编码

16QAM(Quadrature Amplitude Modulation)是一种调制方式,用于数字信号的传输。

格雷码是一种二进制编码方式,其特点是相邻的两个代码只有一个二进制位不同。

在16QAM中,可以采用格雷码进行编码。

具体来说,16QAM信号的每个符号可以表示为4个比特,这4个比特可以表示为一个格雷码。

例如,对于16QAM信号,其中一个符号可以用格雷码表示为“0001”,另一个符号可以用格雷码表示为“0010”。

由于格雷码相邻的两个代码只有一个二进制位不同,因此采用格雷码进行编码可以降低误码率。

16QAM信号的每个符号可以表示为4个比特,这4个比特可以采用格雷码进行编码。

格雷码的编码方式有很多种,可以采用不同的映射规则进行编码。

例如,可以采用Gray码映射规则进行编码,即将4个比特分成两组,每组2个比特,然后对每组2个比特进行Gray码映射。

这样可以得到一组4个比特的格雷码,这组格雷码可以用来表示一个16QAM信号的符号。

总之,在16QAM中采用格雷码进行编码可以降低误码率,提高信号传输的可靠性。

具体的编码方式可以采用不同的映射规则进行实现。

verilog 16QAM代码

verilog 16QAM代码

QAM调制中,数据信号由相互正交的两个载波的幅度变化表示。

QAM 是一种矢量调制,将输入比特先映射到一个复平面(星座图),形成复数调制符号,然后将该符号的I、Q分量,采用幅度调制,分别对应调制在相互正交(时域正交)的两个载波cos 和sin 上。

数学公式:16QAM信号在星座图上具有16个样点,每个样点表示一种矢量状态,16QAM 有16 态,每4 位二进制数规定了16态中的一个状态,16QAM每个符号时间传送4比特映射。

根据IEEE 802.11a 规定,16QAM 编码表如下所示。

经过表中映射后的I/Q数据再乘上1/√10进行归一化,即得到调制后的I/Q值。

实现代码重要部分:因为是串行输入,得先缓存为4bit,然后每4比特映射一个矢量状态。

经过扰码,卷积编码,交织后的DATA数据,一个符号有192比特,然后经过16QAM ,被调制成48 个复数,作为下一级插入导频模块的输入。

代码:moduleDATA_16QAM_mapper(DM_DIN,DM_ND,DM_RST,DM_CLK,DM_RE,DM_IM,DM_INDEX ,DM_RDY);input DM_DIN; //输入信号input DM_CLK; //脉冲input DM_ND; //来自上一模块的信号提示input DM_RST; //复位信号output[7:0] DM_RE; //输出16QAM调制的实部,八位,一位符号位,一位整数位,六位小数位output[7:0] DM_IM; //输出16QAM调制的虚部output[5:0] DM_INDEX;//输出标号output DM_RDY; //输出信号提示reg[7:0] DM_RE;reg[7:0] DM_IM;reg DM_RDY;reg[7:0] RE_TEMP; //输出实部暂存reg[7:0] IM_TEMP; //输出虚部暂存reg[3:0] STOR; //由于四个输入信号对应一个星座点,因此需要四位的存储器存放reg MAPEN;reg[5:0] DM_COUNT;reg[5:0] DM_INDEX;reg OUTEN; //使Q_RDY比输入四个信号中最后一个晚一个脉冲的过渡,保证转换完成reg[1:0] counter; //四个输入信号的计数reg[1:0] OUT_COUNT;always @(negedge DM_RST or posedge DM_CLK) //Q_RST高电平异步清零if(!DM_RST)beginMAPEN<=1'b0;DM_RE[7:0]<=8'b00000000;DM_IM[7:0]<=8'b00000000;DM_COUNT[5:0]<=6'b000000;DM_INDEX[5:0]<=6'b000000;DM_RDY<=0;RE_TEMP[7:0]<=8'b00000000;IM_TEMP[7:0]<=8'b00000000;STOR[3:0]<=4'b0000;OUTEN<=0;counter[1:0]<=2'b00;OUT_COUNT<=2'b00;endelsebeginif(DM_ND) //16QAM encodingbegincounter<=counter+1;case(counter)2'b00:STOR[0]<=DM_DIN;2'b01:STOR[1]<=DM_DIN; //存入输入数值2'b10:STOR[2]<=DM_DIN;2'b11:STOR[3]<=DM_DIN;endcaseendelsebegincounter[1:0]<=2'b00;STOR[3:0]<=4'b0000;endif (counter==2'b11) // MAPEN 标记四个信号是否已经存入MAPEN<=1'b1;elseMAPEN<=1'b0;if(MAPEN)begincase(STOR[1:0])2'b00:RE_TEMP[7:0]<=8'b11000011;2'b10:RE_TEMP[7:0]<=8'b11101100;2'b01:RE_TEMP[7:0]<=8'b00111101;2'b11:RE_TEMP[7:0]<=8'b00010100;endcasecase(STOR[3:2])2'b00:IM_TEMP[7:0]<=8'b11000011;2'b10:IM_TEMP[7:0]<=8'b11101100;2'b01:IM_TEMP[7:0]<=8'b00111101;2'b11:IM_TEMP[7:0]<=8'b00010100;endcaseOUTEN<=1;endelsebeginOUTEN<=0;RE_TEMP[7:0]<=8'b00000000;IM_TEMP[7:0]<=8'b00000000;endif(OUTEN) // 输出beginDM_RE<=RE_TEMP;DM_IM<=IM_TEMP;DM_COUNT<=DM_COUNT+1;DM_INDEX<=DM_COUNT;DM_RDY<=1'b1;endif (DM_INDEX==47)OUT_COUNT<=OUT_COUNT+1;elseOUT_COUNT<=0;if (OUT_COUNT==2'b11)beginDM_RE[7:0]<=8'b00000000;DM_IM[7:0]<=8'b00000000;DM_INDEX[5:0]<=6'b000000;DM_COUNT[5:0]<=6'b000000;DM_RDY<=0;endendendmodule。

16QAM调制解调源代码

16QAM调制解调源代码

16QAM调制解调源代码一、M=16;k=log2(M);x=randint(30000,1);%产生二进制随机数y=modulate(modem.qammod('M',16,'InputType','Bit'),x);%调制 EbNo=-5:1:10;%信噪比s_b2d=bi2de(reshape(x,k,length(x)/k).','left-msb');%二进制变为十进制for n=1:length(EbNo)snr(n)=EbNo(n)+10*log10(k);%Ratio of symbol energy to noise power spectraldensityynoisy=awgn(y,snr(n),'measured');%加入高斯白噪声z=demodulate(modem.qamdemod('M',16,'OutputType','Bit'),ynoisy);%解调r_b2d=bi2de(reshape(z,k,length(z)/k).','left-msb');%二进制变为十进制[sym(n),sym_rate(n)]=symerr(s_b2d,r_b2d);%计算仿真误码率,不是误比特率。

theo_sym_rate(n)=(3/2*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))))*(1-3/8*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))));%《移动通信》P55的式子,已化简。

enddisp(sym);disp(sym_rate);semilogy(EbNo,sym_rate,'r*',EbNo,theo_sym_rate,'b-');%画图。

设计目的1掌握16QAM调制与解调原理2熟悉并掌握matlab

设计目的1掌握16QAM调制与解调原理2熟悉并掌握matlab

一、设计目的1 掌握16QAM调制与解调原理。

2 熟悉并掌握matlab软件使用方法3 设计16QAM调制与解调观察同相支路、正交支路波形。

二、QAM的产生为了满足现代通信系统对传输速率和带宽提出的新要求。

人们不断地推出一些新的数字调制解调技术。

正交幅度调制解调(quadrature ampli-tude modula tion and demodulation)就是一种高效的数字调制解调方式。

与其它调制技术相比,这种调制解调技术能充分利用带宽,且具有抗噪声能力强等优点。

因而在中、大容量数字微波通信系统、有线电视网络高速数据传输、卫星通信等领域得到广泛应用。

三、QAM调制与解调原理1、调制原理正交振幅调制(QAM)是一种幅度和相位联合键控(APK)的调制方式。

它可以提高系统可靠性,且能获得较高的信息频带利用率,是目前应用较为广泛的一种数字调制方式。

正交振幅调制是用两路独立的基带数字信号对两个相互正交的同频载波进行抑制载波的双边带调制,利用已调信号在同一带宽内频谱正交的性质来实现两路并行的数字信息传输。

在MPSK体制中,随着M的增大,相邻相位的距离逐渐减小,是噪声容限随之减小,误码率难以保证。

为了改善在M的时的噪声容限,发展出了QAM体制。

在QAM体制中,信号的振幅和相位作为两个独立的参量同时受到调制。

这种信号的一个码元可以表示为S(k)=Akcos(Wt+Q) kT<t<=(k+1)T16QAM信号的产生方法主要有两种。

第一种是正交调幅法,即用两路独立的正交4ASK信号叠加,形成16QAM信号。

第二种是复合相移法,他用两路独立的QPSK 信号叠加,形成16QAM 信号。

基带信号经过串并变换后转化为IQ 两路并行数据流,该并行数据流的宽度为4 bit ,其中高位的1 bit 映射到内外圆,低位的3bit 映射到内(外)圆上,这样就形成如图2所示的星型星座图。

差分编码后的数据经过成型滤波器后和相互正交的正弦或余弦载波进行调制,被调制后的I Q 路正交信号再进行矢量相加,即可形成调制信号输出。

16QAM的调制与解调

16QAM的调制与解调

目录一、设计思路及设计方案1)16QAM调制原理在16QAM中,数据信号由相互正交的两个载波合成。

16QAM是一种矢量调制,将输入比特先映射(一般采用格雷码)到一个复平面(星座)上,形成复数调制符号,然后将符号的I、Q分量(对应复平面的实部和虚部,也就是水平和垂直方向)采用幅度调制,分别对应调制在相互正交(时域正交)的两个载波(coswt 和sinwt)上,然后两路正交信号相加得到调制信号。

2)设计思路16-QAM信号,每个样点表示一种矢量状态,16-QAM有16态,每4位二进制数规定了16态中的一态,16-QAM中规定了16种载波和相位的组合,16-QAM的每个符号和周期传送4比特。

16进制的正交振幅调制是一种振幅相位联合键控信号。

16QAM的产生有2种方法:(1)正交调幅法,它是有2路正交的四电平振幅键控信号叠加而成;(2)复合相移法:它是用2路独立的四相位移相键控信号叠加而成。

这里采用正交调幅法。

3)设计方案首先,伪随机码发生器产生速率为Rb的二进制序列,此二进制码流经串一并变换器将分成两个速率为Rb/2的两电平序列,2一4电平变换器将每个速率为Rb/2的两电平序列变成速率为Rb/4,4电平信号,然后分别与两个正交的载波相乘,相加后即产生QAM信号。

QAM信号的解调器同样可以采用正交的相干解调方法。

同相I路和正交Q路的4电平基带信号用判决器判决后,分别恢复出速率等于Rb/2的二进制序列,最后经并一串变换器将两路二进制序列合成一个速率为Rb的二进制序列。

二、总体电路组成与分析1)总体电路图2)总体电路分析a)参数设置:Token 17:频率:19.2kHZ 振幅:0.5V Offset:0.5V 电平:2 (即频率为19.2kHZ的由0、1两个电平构成的伪随机码)Token 18:频率: 76.8kHZ 振幅:1VToken105:高斯噪声 0.3VToken109:低通频率:70kHZToken110:低通频率:70kHZb) 电路分析:该系统主要分为调制和解调两部分,包含有串并变换子系统、2-4变换子系统、4电平判决子系统、4-2变换子系统、并串变换子系统。

16QAM-星形与矩形星座图调制解调MATLAB代码

16QAM-星形与矩形星座图调制解调MATLAB代码

%% ------------------------------------------------------------% 软件无线电课程设计%% 方形、星形16QAM调制解调仿真%%%------------------------------------------------------------%%主程序clcclear%% 定义参数fd=250*10^6。

%码元速率250Mfs=2500*10^6。

%滤波器采样率fc=2500*10^6。

%载波频率2.5Gf=10000*10^6。

%对载波采样data_len=200000。

%数据长度sym_len=data_len/4。

%码元序列长度M_QAM=16。

%QAM数k=log2(M_QAM)。

SNR=1:12。

%白噪声信噪比,%% ------------------------------------------------------------bit_tx=randint(1,data_len)。

%产生随机序列echo off。

rec_qam16=QamMod(bit_tx,16)。

%方形16QAM调制star_qam16=SrarQamMod(bit_tx)。

%星形16QAM调制base_rec=base_shape(fd,fs,f,rec_qam16)。

%基带成型滤波base_star=base_shape(fd,fs,f,star_qam16)。

%基带成型滤波for i=1:length(SNR) %信噪比从1dB到12dB计算误码率SNR_=i%方形映射16QAMrf_rec_qam16=CarrierMod(fc,f,base_rec)。

%载波调制rf_rec_qam16_n=awgn(rf_rec_qam16,SNR(i),'measured')。

%加噪声[rec_qam16_rx base_rec_rx]=CarrierDemod(fd,fs,fc,f,rf_rec_qam16_n)。

16QAM仿真代码(matlab)(可编辑修改word版)

16QAM仿真代码(matlab)(可编辑修改word版)

% 16QAM 系统仿真function [ ber_AWGN,ber_Ray] = M16QAM()EbN0dB=1:3:30;EbN0dB1=1:10;N=4*100000;for ii=1:length(EbN0dB)sigma2(ii)=2.5/(2*4*(10^(EbN0dB(ii)/10)));sigma21(ii)=2.5/(2*4*(10^(EbN0dB1(ii)/10)));bits=randint(1,N);%调制s=M16QAM_modulate(bits,length(bits(:)));% Rayleign信道干扰noise=sqrt(sigma2(ii))*( randn(1,N/4)+ 1i*randn(1,N/4) );h= sqrt(0.5)*(randn(1,N/4) + 1i*randn(1,N/4) );receiver=s.*h+noise; %Rayleign 衰减信道% 高斯信道干扰noise1=sqrt(sigma21(ii))*( randn(1,N/4)+ 1i*randn(1,N/4) );receiver1=s+noise1; %高斯信道% 信道均衡receiver = receiver./h;%解调并计算误码率Rayleign信道demodata = M16QAM_demodulate( receiver,length(receiver(:)) );errCount=sum(abs(bits-demodata));ber_Ray(ii)=errCount/N;%解调并计算误码率高斯信道demodata = M16QAM_demodulate( receiver1,length(receiver1(:)) );errCount=sum(abs(bits-demodata));ber_AWGN(ii)=errCount/N;endend% 16QAM 调制function [ s ] = M16QAM_modulate( bits,N)ii=0;for i=1:4:Nii=ii+1;if bits(i)==0&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==0s(ii)=sqrt(2)/2*exp(1i*pi/4);elseif bits(i)==1&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==0s(ii)=sqrt(2)/2*exp(1i*3*pi/4);elseif bits(i)==1&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==0s(ii)=sqrt(2)/2*exp(1i*5*pi/4);elseif bits(i)==0&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==0s(ii)=sqrt(2)/2*exp(1i*7*pi/4);elseif bits(i)==0&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==0s(ii)=sqrt(10)/2*exp(1i*atan(1/3));elseif bits(i)==0&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==1s(ii)=sqrt(10)/2*exp(1i*atan(3));elseif bits(i)==1&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==1s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+pi/2));elseif bits(i)==1&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==0s(ii)=sqrt(10)/2*exp(1i*(pi-atan(1/3)));elseif bits(i)==1&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==0s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+pi));elseif bits(i)==1&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==1s(ii)=sqrt(10)/2*exp(1i*(3*pi/2-atan(1/3)));elseif bits(i)==0&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==1s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+3*pi/2));elseif bits(i)==0&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==0s(ii)=sqrt(10)/2*exp(1i*(2*pi-atan(1/3)));elseif bits(i)==0&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==1s(ii)=sqrt(2)*3/2*exp(1i*pi/4);elseif bits(i)==1&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==1s(ii)=sqrt(2)*3/2*exp(1i*3*pi/4);elseif bits(i)==1&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==1s(ii)=sqrt(2)*3/2*exp(1i*5*pi/4);elseif bits(i)==0&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==1s(ii)=sqrt(2)*3/2*exp(1i*7*pi/4);endendend% 16 QAM 解调function [ demodata ] = M16QAM_demodulate( receiver ,N)A=[0 1 0 1; -1 0 0 1;-1 0 -1 0;0 1 -1 0;1 inf 0 1;0 1 1 inf;-1 0 1 inf;-inf -1 0 1;-inf -1 -1 0;-1 0 -inf -1;0 1 -inf -1;1 inf -1 0;1 inf 1 inf;-inf -1 1 inf;-inf -1 -inf -1;1 inf -inf -1];for k=1:Nif (real(receiver(k))>=A(1,1))&&(real(receiver(k))<A(1,2))&&...(imag(receiver(k))>=A(1,3))&&(imag(receiver(k))<A(1,4)) demodata(k*4-3)=0;demodata(k*4-2)=0;demodata(k*4-1)=0;demodata(k*4)=0;elseif (real(receiver(k))>=A(2,1))&&(real(receiver(k))<A(2,2))...&&(imag(receiver(k))>=A(2,3))&&(imag(receiver(k))<A(2,4)) demodata(k*4-3)=1;demodata(k*4-1)=0;demodata(k*4)=0;elseif (real(receiver(k))>=A(3,1))&&(real(receiver(k))<A(3,2))...&&(imag(receiver(k))>=A(3,3))&&(imag(receiver(k))<A(3,4)) demodata(k*4-3)=1;demodata(k*4-2)=0;demodata(k*4-1)=1;demodata(k*4)=0;elseif (real(receiver(k))>=A(4,1))&&(real(receiver(k))<A(4,2))...&&(imag(receiver(k))>=A(4,3))&&(imag(receiver(k))<A(4,4)) demodata(k*4-3)=0;demodata(k*4-2)=0;demodata(k*4-1)=1;demodata(k*4)=0;elseif (real(receiver(k))>=A(5,1))&&(real(receiver(k))<A(5,2))...&&(imag(receiver(k))>=A(5,3))&&(imag(receiver(k))<A(5,4)) demodata(k*4-3)=0;demodata(k*4-2)=1;demodata(k*4-1)=0;demodata(k*4)=0;elseif (real(receiver(k))>=A(6,1))&&(real(receiver(k))<A(6,2))...&&(imag(receiver(k))>=A(6,3))&&(imag(receiver(k))<A(6,4)) demodata(k*4-3)=0;demodata(k*4-2)=0;demodata(k*4-1)=0;demodata(k*4)=1;elseif (real(receiver(k))>=A(7,1))&&(real(receiver(k))<A(7,2))...&&(imag(receiver(k))>=A(7,3))&&(imag(receiver(k))<A(7,4)) demodata(k*4-3)=1;demodata(k*4-2)=0;demodata(k*4-1)=0;demodata(k*4)=1;elseif (real(receiver(k))>=A(8,1))&&(real(receiver(k))<A(8,2))...&&(imag(receiver(k))>=A(8,3))&&(imag(receiver(k))<A(8,4)) demodata(k*4-3)=1;demodata(k*4-2)=1;demodata(k*4-1)=0;demodata(k*4)=0;elseif (real(receiver(k))>=A(9,1))&&(real(receiver(k))<A(9,2))...&&(imag(receiver(k))>=A(9,3))&&(imag(receiver(k))<A(9,4)) demodata(k*4-3)=1;demodata(k*4-2)=1;demodata(k*4)=0;elseif (real(receiver(k))>=A(10,1))&&(real(receiver(k))<A(10,2))...&&(imag(receiver(k))>=A(10,3))&&(imag(receiver(k))<A(10,4)) demodata(k*4-3)=1;demodata(k*4-2)=0;demodata(k*4-1)=1;demodata(k*4)=1;elseif (real(receiver(k))>=A(11,1))&&(real(receiver(k))<A(11,2))...&&(imag(receiver(k))>=A(11,3))&&(imag(receiver(k))<A(11,4)) demodata(k*4-3)=0;demodata(k*4-2)=0;demodata(k*4-1)=1;demodata(k*4)=1;elseif (real(receiver(k))>=A(12,1))&&(real(receiver(k))<A(12,2))...&&(imag(receiver(k))>=A(12,3))&&(imag(receiver(k))<A(12,4)) demodata(k*4-3)=0;demodata(k*4-2)=1;demodata(k*4-1)=1;demodata(k*4)=0;elseif (real(receiver(k))>=A(13,1))&&(real(receiver(k))<A(13,2))...&&(imag(receiver(k))>=A(13,3))&&(imag(receiver(k))<A(13,4)) demodata(k*4-3)=0;demodata(k*4-2)=1;demodata(k*4-1)=0;demodata(k*4)=1;elseif (real(receiver(k))>=A(14,1))&&(real(receiver(k))<A(14,2))...&&(imag(receiver(k))>=A(14,3))&&(imag(receiver(k))<A(14,4)) demodata(k*4-3)=1;demodata(k*4-2)=1;demodata(k*4-1)=0;demodata(k*4)=1;elseif (real(receiver(k))>=A(15,1))&&(real(receiver(k))<A(15,2))...&&(imag(receiver(k))>=A(15,3))&&(imag(receiver(k))<A(15,4)) demodata(k*4-3)=1;demodata(k*4-2)=1;demodata(k*4-1)=1;demodata(k*4)=1;elseif (real(receiver(k))>=A(16,1))&&(real(receiver(k))<A(16,2))...&&(imag(receiver(k))>=A(16,3))&&(imag(receiver(k))<A(16,4)) demodata(k*4-3)=0;demodata(k*4-2)=1;demodata(k*4-1)=1;demodata(k*4)=1;end endend。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EbNo=-5:1:10;%信噪比
s_b2d=bi2de(reshape(x,k,length(x)/k).','left-msb');%二进制变为十进制
for n=1:length(EbNo)
snr(n)=EbNo(n)+10*log10(k);%Ratio of symbol energy to noise power spectral density
%单步运行就会知道每个语句的意思了的。
M=16;
k=log2(M);
x=randint(30000,1);%产生二进制随机数
y=modulate(modem.qammod('M',16,'InputType','Bit'),x);%调制
mod=abs(y);%对y求模
Es=mean(mod.*mod);%对y的模取平方,得出了平均符号的能量
legend('仿真误码率','理论误码率');
h=scatterplot(ynoisy(1:1*5e3),1,0,'g.');%画图。
hold on;
scatterplot(y(1:1*5e3),1,0,'r*',h);%画图。
title('Received Signal');
legend('接收信号','星座点');
一、
M=16;
k=log2(M);
x=randint(30000,1);%产生二进制随机数
y=modulate(modem.qammod('M',16,'InputType','Bit'),x);%调制
EbNo=-5:1:10;%信噪比
s_b2d=bi2de(reshape(x,k,length(x)/k).','left-msb');%二进制变为十进制
semilogy(EbNo,sym_rate,'r*',EbNo,theo_sym_rate,'b-');%画图。
title('误码率性能');
xlabel('Eb/No(dB)');
ylabel('误码特率');
legend('仿真误码率','理论误码率');
h=scatterplot(ynoisy(1:1*5e3),1,0,'g.');%画图。
noisy=wgn(length(y),1,10*log10(Es)-snr(n),'complex');%产生高斯白噪声
ynoisy=y+noisy;%加入高斯白噪声
z=demodulate(modem.qamdemod('M',16,'OutputType','Bit'),ynoisy);%解调
ylabel('误码率Pe');
title('误码率性能');
legend('仿真误码率','理论误码率');
subplot(1,2,2)
plot(ynoisy(1:1*750),'r.');%画图。
hold on;
plot(y(1:1*750),'b*');
axis([-5,5,-5,5]);
xlabel('I ');
ylabel('Q ');
legend('接收信号','星座点');
title('16QAM 星座图');
for n=1:length(EbNo)
snr(n)=EbNo(n)+10*log10(k);%Ratio of symbol energy to noise power spectral densred');%加入高斯白噪声
%《移动通信》P55的式子,已化简。
end
disp(sym);
disp(sym_rate);
semilogy(EbNo,sym_rate,'r*',EbNo,theo_sym_rate,'b-');%画图。
title('误码率性能');
xlabel('Eb/No(dB)');
ylabel('误码特率');
%《移动通信》P55的式子,已化简。
end
figure(1)
subplot(1,2,1)
plot(EbNo,sym_rate,'ro',EbNo,theo_sym_rate,'b-');
axis([-5,10,10^-3,10^0]);
xlabel('Eb/No(dB) ');
end
sym_rate(n)=sum(sym_rate0)/5;
theo_sym_rate(n)=(3/2*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))))*(1-3/8*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))));
xsym=bi2de(reshape(x,k,length(x)/k).','left-msb');%二进制变为十进制
y=modulate(modem.qammod('M',16,'InputType','Bit'),x);%调制
ynoisy=awgn(y,snr(n),'measured');%加入高斯白噪声
r_b2d=bi2de(reshape(z,k,length(z)/k).','left-msb');%二进制变为十进制
[sym(n),sym_rate(n)]=symerr(s_b2d,r_b2d);%计算仿真误码率,不是误比特率。
theo_sym_rate(n)=(3/2*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))))*(1-3/8*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))));
theo_sym_rate(n)=(3/2*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))))*(1-3/8*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10)))));
%《移动通信》P55的式子,已化简。
end
disp(sym);
disp(sym_rate);
z=demodulate(modem.qamdemod('M',16,'OutputType','Bit'),ynoisy);%解调
r_b2d=bi2de(reshape(z,k,length(z)/k).','left-msb');%二进制变为十进制
[sym(n),sym_rate(n)]=symerr(s_b2d,r_b2d);%计算仿真误码率,不是误比特率。
axis([-5 5 -5 5]);
hold off;
三、
M=16;
k=log2(M);
EbNo=-5:1:10;%信噪比
for n=1:length(EbNo)
for m=1:5
x=round(rand(3000,1));%产生二进制随机数
snr(n)=EbNo(n)+10*log10(k);%Ratio of symbol energy to noise power spectral density
hold on;
scatterplot(y(1:1*5e3),1,0,'r*',h);%画图。
title('Received Signal');
legend('接收信号','星座点');
axis([-5 5 -5 5]);
二、用自己编写程序产生高斯白噪声
%用R2008a运行是没有问题的,低于这个版本的可能有问题。
z=demodulate(modem.qamdemod('M',16,'OutputType','Bit'),ynoisy);%解调
zsym=bi2de(reshape(z,k,length(z)/k).','left-msb');%二进制变为十进制
[sym0(m),sym_rate0(m)]=symerr(xsym,zsym);%计算仿真误码率,不是误比特率。
相关文档
最新文档