16QAM理论误码率与实际误码率MATLAB仿真程序
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%%等效基带调制clc;clear all;close all;%%关闭所有窗口,比如之前画的图nsymbol = 10000;%%每种信噪比下符号数的发送符号数,10^6个数errornumber = zeros(1,10);errorratio = zeros(1,10);data = randi([0,1],1,4*nsymbol);%%产生1行,4*nsymbol列均匀分布的随机数data_mod1 = zeros(1,nsymbol);%%各参量初始化data_mod2 = zeros(1,nsymbol);data_demod1 = zeros(1,nsymbol);data_demod2 = zeros(1,nsymbol);data_demod3 = zeros(1,nsymbol);data_demod4 = zeros(1,nsymbol);s_receive1 = zeros(1,nsymbol);s_receive2 = zeros(1,nsymbol);for i = 1:nsymbol %%格雷码调制到星座图的映射if data(4*i-3)==0 && data(4*i-2)==0data_mod1(i) = 3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==0 && data(4*i-2)==1data_mod1(i) = 1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==1data_mod1(i) = -1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==0data_mod1(i) = -3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endendendSNR_dB = 1:10;%%%信噪比dB形式SNR = 10.^(SNR_dB/10);%%信噪比转化为线性值for loop= 1:10sigma = sqrt(5/SNR(loop));s_receive1 = data_mod1 + sigma * randn(1,length(data_mod1));s_receive2 = data_mod2 + sigma * randn(1,length(data_mod2));%%??for k = 1:nsymbolif s_receive1(k)>2data_demod1(k) = 0;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)>0 && s_receive1(k)<2data_demod1(k) = 0;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 &&s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<0 && s_receive1(k)>-2data_demod1(k) = 1;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<-2data_demod1(k) = 1;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endendif (data_demod1(k) ~= data(k*4-3)) || (data_demod2(k) ~= data(k*4-2))||(data_demod3(k) ~= data(k*4-1)) || (data_demod4(k) ~= data(k*4))errornumber(loop) = errornumber(loop) + 1;endenderrorratio(loop) = errornumber(loop)/nsymbol;endt = 0.75*erfc(sqrt(3*SNR/30));ser_theory = 1-(1-t).^2;%理论误码率,注意Q函数和误差函数的对应关系semilogy(SNR_dB,errorratio,'-k*',SNR_dB,ser_theory,'-ro');title('16QAM信号在AWGN信道下的性能(格雷码)');xlabel('信噪比/dB');ylabel('误码率');legend('误码率','理论误码率');grid on;%%坐标线。
Matlab环境中16-QAM的性能仿真
Matlab环境下16-QAM仿真1.原理框图2.matlab程序:clear all;nsymbol=100000;%每种信噪比下的发送符号数M=16;%16-QAMgraycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];%格雷码编码规则EsN0=5:20;%信噪比的范围snr1=10.^(EsN0/10);%将dB值转化成线性值msg=randint(1,nsymbol,M);%由0-15的整数值组成的均匀随机数msg1=graycode(msg+1);%将随机数映射成格雷码msgmod=qammod(msg1,M);%16-QAM调制spow=norm(msgmod).^2/nsymbol;%求出每个符号的平均功率for indx=1:length(EsN0)sigma=sqrt(spow/(2*snr1(indx))) ;%根据符号功率求出噪声功率rx=msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod)));%混入高斯加性白噪声y=qamdemod(rx,M);%16-QAM的解调decmsg=graycode(y+1);%格雷码的逆映射[err,ber(indx)]=biterr(msg,decmsg,log2(M));%求误比特率[err,ser(indx)]=symerr(msg,decmsg);%求误符号率Endp4=2*(1-1/sqrt(M)*qfunc(sqrt(3*snr1/(M-1))));ser1=1-(1-p4).^2;%理论误符号率ber1=1/log2(M)*ser1;%理论误比特率semilogy(EsN0,ber,'o',EsN0,ser,'*',EsN0,ser1,EsN0,ber1,'-k.');title('16-QAM载波调制信号在AWGN信道下的性能');xlabel('Es/N0');ylabel('误比特率和误符号率');legend('误比特率','误符号率','理论误符号率','理论误比特率');scatterplot(msgmod);%画出调制之后的星座图title('16-QAM调制之后的星座图');xlabel('同相分量');ylabel('正交分量');scatterplot(rx);%画出混入高斯加性白噪声后的星座图title('16-QAM信号经过AWGN信道之后的星座图');xlabel('同相分量');ylabel('正交分量');程序说明:先将均匀随机数映射成格雷码,再用qammod函数实现16-QAM调制,已调信号由分别表示幅度和相位的两部分数据构成。
qam调制及误码率matlab
qam调制及误码率matlab标题:QAM调制及误码率Matlab仿真分析摘要:本文旨在介绍正交振幅调制(QAM)的原理和应用领域,并通过Matlab 仿真分析来讨论QAM调制中的误码率。
文章将从QAM调制的基本原理和定义开始,深入探讨其调制方式、调制索引、信道传输、解调算法等关键概念。
接下来,将通过Matlab进行QAM信号的生成和传输效果的仿真模拟,并采用误码率作为性能评估指标,分析调制索引对误码率的影响。
最后,结合仿真结果,我们将对QAM调制技术的应用场景和未来发展进行展望。
关键词:QAM调制;误码率;Matlab仿真;性能评估一、引言正交振幅调制(QAM)是一种常见的调制技术,广泛应用于数字通信、无线传输等领域。
QAM调制既融合了调幅和相位调制的特点,也具备较高的频谱效率和抗噪声能力。
误码率是评估数字通信系统性能的关键指标,通过对QAM调制的误码率进行分析,可以直观地评估系统的可靠性和性能。
二、QAM调制的基本原理和定义1. QAM调制基本原理:QAM调制是将两种不同调制方式(调幅、相位调制)的单一载波合并在一起进行传输的技术。
通过同时调整振幅和相位的方式,在复平面上进行星座点位置映射,实现多位元符号的传输。
2. 正交振幅调制:QAM调制是一种正交振幅调制,它利用正交的基带信号进行调制。
正交性保证了信号之间的相互独立,从而降低了符号间互相干扰的可能性。
三、QAM调制方式和调制索引1. 方式:(1) 4QAM:通过4个正交星座点进行调制,每个星座点代表两个比特传输。
(2) 16QAM:通过16个正交星座点进行调制,每个星座点代表4个比特传输。
(3) 64QAM:通过64个正交星座点进行调制,每个星座点代表6个比特传输。
...2. 调制索引:调制索引是指在特定条件下,每个星座点所对应的载波相对振幅的大小,它决定了星座点的分布密度和调制方式的性能特性。
四、QAM信号的传输过程和解调算法1. 信道传输:QAM信号的传输过程中,会受到各种噪声干扰和衰减等影响,因此信道传输过程需要保证较低的误码率,提高传输的可靠性。
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)(可编辑修改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。
16QAM
16QAM 在AWGN 中的误码性能【Abstract 】:This experiment QAM modulation of the system are briefly introduced, and observe demodulation method in the Matlab software in AWGN channel, spread of error performance. 【Keywords 】:16QAM 、AWGN 、Error performance 、matlab 、demodulation 【内容】:一、16QAM 基本原理QAM (Quadrature Amplitude Modulation )即正交幅度调制,是一种将两种调幅信号汇合到一个信道的方法。
它有两个相同频率的载波,但是相位相差90度(四分之一周期)。
一个信号叫I 信号,另一个信号叫Q 信号。
从数学角度将一个信号可以表示成正弦,另一个表示成余弦。
两种被调制的载波在发射时已被混和。
到达目的地后,载波被分离,数据被分别提取然后和原始调制信息相混和。
二、16QAM 调制解调原理QAM 是用两路独立的基带信号对两个相互正交的同频载波进行抑制载波双边带调幅,利用这种已调信号的频谱在同一带宽内的正交性,实现两路并行的数字信息的传输。
该调制方式通常有二进制QAM (4QAM )、四进制QAM (l6QAM )、八进制QAM (64QAM )、…,对应的空间信号矢量端点分布图称为星座图,分别有4、16、64、…个矢量端点。
电平数m 和信号状态M 之间的关系是对于4QAM ,当两路信号幅度相等时,其产生、解调、性能及相位矢量均与4PSK 相同。
根据上面的策略,采用了两个正交载波t f t f c c ππ2sin 2cos 和,每一个载波都被一个独立的信息比特序列所调制。
发送信号波形如下,2sin )(2cos )()(t f t g A t f t g A t u c T m s c T m c m ππ+= M m ,...,2,1=式中{mc A }和{ms A }是电平集合,这些电平是通过将k 比特序列映射为信号振幅而获得的。
16QAM调制系统仿真
16QAM 调制系统仿真1.QAM 简介正交幅度调制(QAM ,Quadrature Amplitude Modulation )是一种在两个正交载波上进行幅度调制的调制方式。
这两个载波通常是相位差为90度(π/2)的正弦波,因此被称作正交载波。
这种调制方式因此而得名。
QAM 是一种振幅和相位联合键控。
MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。
但是,在MPSK 体制中,随着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) 令 Xk = Akcos θk , Yk = -Aksin θk则式(2—1)变为00()cos sin k k k s t X t Y t ωω=+ (2—3)k X 和k Y 也是可以取多个离散的变量。
从式(2—3)看出,()k s t 可以看作是两个正交的振幅键控信号之和。
在式(2—1)中,若θk 值仅可以取π/4和-π/4,Ak 值仅可以取+A 和-A ,则此QAM 信号就成为QPSK 信号,如下图所示:所以,QPSK信号就是一种最简单的QAM信号。
有代表性的QAM信号是16进制的,记为16QAM,它的矢量图示于下图中:图中用黑点表示每个码元的位置,并且示出它是由两个正交矢量合成的。
类似地,有64QAM 和256QAM等QAM信号,它们总称为MQAM ,调制。
由于从其矢量图看像是星座,故又称星座调制。
matlab误码率仿真代码
matlab误码率仿真代码以下是一个简单的 MATLAB 误码率仿真代码示例,用于模拟二进制传输系统的误码率。
在这个示例中,我们将使用 BPSK(二进制相移键控)调制来进行仿真。
matlab.% 设置参数。
SNR_dB = 0:1:10; % 信噪比范围。
numBits = 1e6; % 要传输的比特数。
ber = zeros(size(SNR_dB)); % 初始化误码率向量。
for i = 1:length(SNR_dB)。
% 生成随机的二进制数据。
txBits = randi([0,1],1,numBits);% BPSK调制。
txSignal = 2txBits 1;% 添加高斯噪声。
noiseVar = 10^(-SNR_dB(i)/10);noise =sqrt(noiseVar/2)(randn(1,numBits)+1irandn(1,numBits)); rxSignal = txSignal + noise;% BPSK解调。
rxBits = real(rxSignal) > 0;% 计算误码率。
ber(i) = sum(rxBits ~= txBits)/numBits;end.% 绘制误码率曲线。
semilogy(SNR_dB,ber,'o-');xlabel('SNR (dB)');ylabel('Bit Error Rate');title('BPSK误码率仿真');grid on;在这个示例中,我们首先设置了信噪比范围和要传输的比特数。
然后我们使用 for 循环来遍历不同的信噪比值。
在每个循环中,我们生成随机的二进制数据,并将其进行 BPSK 调制。
接着我们添加高斯噪声,并进行 BPSK 解调。
最后我们计算误码率,并将结果绘制成误码率曲线。
这个示例代码可以帮助你了解如何使用 MATLAB 进行简单的误码率仿真。
16PSK和16QAM仿真
16QAM和16PSK信号的MATLAB仿真及性能对比于丹,李亚儒一.16QAM信号M进制正交幅度调制信号(MPSK)是由两个正交载波的多电平振幅键控信号叠加而成的,它与MPSK信号的不同之处在于两个支路的多电平幅度序列是相互独立的。
发送机原理图:接收机原理图:16QAM信号的仿真过程:1.产生一个随机的二进制的比特流。
利用randint函数产生代表原始信号的二进制比特序列,此处比特流的长度设为100000,并画出前50个比特的信号图:2.将二进制比特流转换成对应的十六进制信号MATLAB 中的16QAM调制器要求输入的信号为0-15这16个值,因此需要将原始的二进制比特流每4个比特转换为相应的16个值,这一步中用到的函数主要包括reshape和bi2de。
3.用16QAM调制器对信号进行调制并画出信号的星座图利用modem.qammod函数生成16QAM调制器,并对上一步生成的信号进行调制。
4.在16QAM信号中加入高斯白噪声信号通过awgn信道之后相当于在信号上加入了高斯白噪声,这一步假设Eb/No=15db。
5.画出通过信道之后接收信号的星座图利用scatterplot函数画出信号的星座图。
6.生成信号眼图利用eyediagram函数画出经过信道之后接收信号的眼图。
7.16QAM信号的解调利用demodulate和modem.qamdemod函数生成解调器,对接收到的信号进行解调,并将16进制信号转化成二进制比特流信息。
8.计算误码率将最终得到的比特流信息和原始发送的比特流信息进行对比,最终计算出误码率。
相应的MATLAB程序代码如下M=16;k=log2(M);n=100000; %比特序列长度samp=1; %过采样率x=randint(n,1); %生成随机二进制比特流stem(x(1:50),'filled'); %画出相应的二进制比特流信号title('二进制随机比特流');xlabel('比特序列');ylabel('信号幅度');x4=reshape(x,k,length(x)/k); %将原始的二进制比特序列每4个一组分组,并排列成k行length(x)/k列的矩阵xsym=bi2de(x4,'left-msb'); %将矩阵转化为相应的16进制信号序列figure;stem(xsym(1:50)); %画出相应的16进制信号序列title('16进制随机信号');xlabel('信号序列');ylabel('信号幅度');y=modulate(modem.qammod(M),xsym); %用16QAM调制器对信号进行调制scatterplot(y); %画出16QAM信号的星座图text(real(y)+0.1,imag(y),dec2bin(xsym));axis([-5 5 -5 5]);EbNo=15; %假设Eb/No=15db;snr=EbNo+10*log10(k)-10*log10(nsamp); %信噪比yn=awgn(y,snr,'measured'); %加入高斯白噪声h=scatterplot(yn,nsamp,0,'b.'); %经过信道后接收到的含白噪声的信号星座图hold on;scatterplot(y,1,0,'k+',h); %加入不含白噪声的信号星座图title('接收信号星座图');legend('含噪声接收信号','不含噪声信号');axis([-5 5 -5 5]);hold off;eyediagram(yn,2); %眼图yd=demodulate(modem.qamdemod(M),yn); %此时解调出来的是16进制信号z=de2bi(yd,'left-msb'); %转化为对应的二进制比特流z=reshape(z.',numel(z),1);[number_of_errors,bit_error_rate] = biterr(x,z) %计算误码率程序运行结果如下:number_of_errors =bit_error_rate =图1-1图1-2图1-3图1-4图1-5二.16PSK信号多进制相位键控MPSK是利用载波的相位变化来传递信息的调制方式。
16QAM实验报告
基于MATLAB仿真的16QAM在AWGN信道的误码性能姜杰通信1班20080820103摘要:QAM是英文Quadrature Amplitude Modulation的缩略语简称,意为正交幅度调制,是一种数字调制方式。
16QAM是指包含16种符号的QAM调制方式。
以下是基于MATLAB的MC仿真可用于分析16QAM调制在AWGN信道中的误码性能。
关键字:QAM AWGN 误码性能一.16QAM调制原理:16QAM是用两路独立的正交4ASK信号叠加而成,4ASK是用多电平信号去键控载波而得到的信号。
正交幅度调制是利用多进制振幅键控(MASK)和正交载波调制相结合产生的。
16进制的正交振幅调制是一种振幅相位联合信号。
16QAM正交调制的原理如下:二.16QAM解调原理:16QAM信号采用正交相干解调的方法来解调,解调器首先对收到的16QAM信号进行正交相干解调,一路与COSwt相乘,一路与SINwt相乘。
然后经过低通滤波器,低通滤波器滤除乘法器产生的高频分量,获得有用信号低通滤波器经抽样判决可恢复出电平信号,16QAN正交相干解调图如下:三.仿真图:四.仿真结果分析:从仿真图中可以看出,在不同信噪比的情况下,仿真值与理论值都有一定的偏差,且随着信噪比的增大,这种偏差越来越明显。
五.对比仿真图:对比分析可知,2FSK和BPSK的无码性能较好于16QAM的无码性能。
参考文献:【1】刘树棠译.现代通信系统.使用MATLAB.北京:电子工业出版社.2006. 【2】樊昌信.通信原理.第六版.北京:国防工业出版社.2008【3】 John G. Proakis通信系统原理.:北京电子工业出版社.2006。
基于MATLAB高斯信道下的16QAM误码率分析的设计通信系统课程设计报告
目录引言⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2一、相关知识介绍⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2(1)QAM调制解调原理⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3(2)QAM的解调和判决⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4二、设计内容及要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5(1)设计内容⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ (5)(2)技术要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ (5)(3)设计步骤及要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ (5)三、程序流程图及设计方案⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯..⋯ . 5(1)程序流程图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯....⋯ . 5(2)设计方案⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5四、仿真结果及分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯...⋯ . 7(1)信号接收图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ ...⋯⋯⋯ .⋯ . 8(2)误码率曲线图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.. 8五、课程设计总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯. 8六、参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯. 9附录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10引言本次课程设的代码编写和仿真均基于Matlab 仿真软件。
Matlab 是矩阵实验室( Matrix Laboratory )的简称 , 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。
介绍了高斯信道下的16QAM误码率分析的设计方案,并着重介绍了各部分的设计思路及仿真。
整个设计配以误码率和信噪比的性能曲线图和信号接受图加以辅助说明。
设计共有三大组成部分:一是代码的编写及设计思路,本部分详细讲解了本次设计的理论实现,是关键部分;二是仿真结果及分析,这部分是为了分析设计是否合理,便于理;最后是对本次课程设计的总结。
一、相关知识介绍QAM是一种矢量调制,将输入比特先映射(一般采用格雷码)到一个复平面(星座)上,形成复数调制符号,然后将符号的 I 、Q 分量(对应复平面的实部和虚部,也就是水平和垂直方向)采用幅度调制,分别对应调制在相互正交(时域正交)的两个载波( cos wt 和 sin wt )上。
(完整)基于MATLAB下的16QAM仿真
1。
课程设计目的随着现代通信技术的发展,特别是移动通信技术高速发展,频带利用率问题越来越被人们关注.在频谱资源非常有限的今天,传统通信系统的容量已经不能满足当前用户的要求.正交幅度调制QAM(Quadrature Amplitude Modulation)以其高频谱利用率、高功率谱密度等优势,成为宽带无线接入和无线视频通信的重要技术方案.首先介绍了QAM调制解调原理,提出了一种基于MATLAB的16QAM系统调制解调方案,包括串并转换,2—4电平转换,抽样判决,4—2电平转换和并串转换子系统的设计,对16QAM的星座图和调制解调进行了仿真,并对系统性能进行了分析,进而证明16QAM调制技术的优越性。
2.课程设计要求(1)设计一个16QAM调制与解调系统。
(2)设计程序时必须使得程序尽可能的简单。
(3)利用MATLAB进行程序编写并对系统进行仿真分析。
3。
相关知识随着现代通信技术的发展,特别是移动通信技术高速发展,新的需求层出不穷,促使新的业务不断产生,因而导致频率资源越来越紧张.在有限的带宽里要传输大量的多媒体数据,频谱利用率成为当前至关重要的课题,由于具有高频谱利用率、高功率谱密度等优势,16QAM技术被广泛应用于高速数据传输系统.在很多宽带应用领域,比如数字电视广播,Internet宽带接入,QAM 系统都得到了广泛的应用。
QAM也可用于数字调制。
数字QAM有4QAM、8QAM、16QAM、32QAM等调制方式。
其中,16QAM和32QAM广泛用于数字有线电视系统。
当今国际市场上出现了采用16QAM 调制技术的卫通调制解调器,如美国COMTECH EF DATA公司新推出的CDM—600。
该卫通调制解调器支持速率高达20Mbps[1]。
无线通信技术的迅猛发展对数据传输速率、传输效率和频带利用率提出了更高的要求.选择高效可行调制解调手段,对提高信号的有效性和可靠性起着至关重要的作用。
由于QAM已经成为宽带无线接入和无线视频通信的重要技术方案。
QAM调制解调的仿真实现报告-
一、设计任务任务:使用 MATLAB 软件,实现对 QAM 系统调制与解调过程的仿真,并分析系统的可靠性。
二、实验内容(1)对原始信号分别进行 4QAM 和 16QAM 调制,画出星座图;(2)采用高斯信道传输信号,画出信噪比为 13dB 时,4QAM 和 16QAM 的接收信号星座图;(3)画出两种调制方式的眼图;(4)解调接收信号,分别绘制 4QAM 和 16QAM 的误码率曲线图,并与理论值进行对比;(5)提交详细的设计报告和实验报告。
三、设计原理QAM 调制原理:QAM 调制是把 2ASK 和 2PSK 两种调制技术结合起来的一种调制技术,使得带宽得到双倍扩展。
QAM 调制技术用两路独立的基带信号对频率相同、相位正交的两个载波进行抑制载波双边带调幅,并将已调信号加在一起进行传输。
nQAM 代表 n 个状态的正交调幅,一般有二进制(4QAM)、四进制(16QAM)、八进制(64QAM)。
我们要得到多进制的 QAM 信号,需将二进制信号转换为 m 电平的多进制信号,然后进行正交调制,最后相加输出。
正交调制及相干解调原理框图如下:QAM 调制说明:MQAM 可以用正交调制的方法产生,本仿真中分别取 M=16 和 4。
M=16 时,进行的是幅度和相位相结合的 16 个信号点的调制。
M=4 时,进行的是幅度和相位相结合的 4 个信号点的调制。
为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了不同强度的高斯白噪声,并统计其译码误码率。
为了简化程序和得到可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接产生与调制时一模一样的载波来进行信号解调。
四、实验步骤:(1)我们整个代码编写为 MQAM 格式,在刚开始时,会询问选择 4QAM 还16QAM,然后开始运行。
(2)首先生成一个随机且长度为 n*k 的二进制比特流。
(3)在 MATLAB 中 16QAM 调制器要求输入的信号为 0~M-1 这 1M 个值,所以需要用函数 reshape 和 bi2de 将二进制的比特流转换为对应的十进制这 M 个值。
(完整版)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:100 0),[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;。
对QAM调制的误符号率性能进行MATLAB仿真
对QAM调制的误符号率性能进行仿真,并与理论曲线对比。
原理图:程序流程图:相关公式:210av E d = ,σ= ,4M P Q ≤程序1. Qam_test.m绘制误符号率理论曲线;调用cm_sm41.m 绘制仿真曲线。
clearclcSNRindB1 = -5:1:15;SNRindB2 = -5:0.1:15;M = 16;k = log2(M);for i = 1:length(SNRindB1)smld_err_prb(i) = cm_sm41(SNRindB1(i));endfor i = 1:length(SNRindB2)SNR = exp(SNRindB2(i)*log(10)/10);theo_err_prb(i) = 4*0.5*erfc(sqrt(3*k*SNR/(2*(M-1))));endsemilogy(SNRindB1,smld_err_prb,'*');grid on;hold on;semilogy(SNRindB2,theo_err_prb);2. gauss.m产生均值为0,方差可调,具有两个返回值的高斯噪声function [gsrv1,gsrv2] = gauss(sgma_in)if nargin == 0, % 如果没有输入实参,则均值为0,标准差为1。
(awgn ) mean = 0;sgma = 1;elseif nargin == 1, % 如果输入实参为1个参数,则均值为0,标准差为输入实参。
mean = 0;sgma = sgma_in;end;u = rand;z = sgma*(sqrt(2*log(1/(1-u))));u = rand;gsrv1 = mean+z*cos(2*pi*u);gsrv2 = mean+z*sin(2*pi*u);3.cm_sm41.m点数N:10000;产生随机数;QAM信号选择;加入高斯噪声;判决;对比;统计差错率。
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调制解调技术分析与MATLAB仿真
中国科技论文在线
(a)升余弦低通滤波器时域波形
(b)升余弦低通滤波器频域波形
(a) Rose cosine low-pass filter time domain waveform (b) Rose cosine low-pass filter frequency domain waveform 图 3 升余弦低通滤波器的设计
中国科技论文在线
16QAM 调制解调技术分析与 MATLAB
仿真
李瑞,明洋**
5
(长安大学信息工程学院,西安 710064)
摘要:正交幅度调制 QAM (Quadrature Amplitude Modulation)是一种功率和带宽相对高
效的信道调制技术,广泛应用于数字电视,无线宽带等传输领域。本文针对 16QAM 系统调制
解调系统,利用 MATLAB 工具对整个系统进行完整仿真,并通过星座图仿真对误码率进行分
析。仿真结果表明该系统简单可行,对 QAM 相关产品研发和理论研究具有一定的理论和实践
10 意义。
关键词:16QAM;正交振幅调制;MATLAB;误码率
中图分类号:TN92 无线通信
Analysis and simulation of 16QAM modulation and
100
Figure 3 liters cosine low-pass filter design
上下支路经过变换分别进行相干调制,各自通过调制器(相乘器)乘以正交的两个高频 载波,载波的频率为信号的 80 倍。通过载波器后形成两路频带信号携带信源信息,其中各 个支路的已调信号及其功率谱密度的仿真结果如图 4 所示
作者简介:李瑞,(1987-),女,研究生,无线通信,公钥密码学。 通信联系人:明洋,(1979-),男,副教授,公钥密码学,可证明安全理论,无线网络安全。 E-mail: yangming@
基于MATALAB下的16QAM和16PSK的仿真及对比
4.3 数字信号的载波调制4.3.1 正交相移键控(QPSK)QPSK的调制原理是将接收信号乘以同频正弦波就可以解调出相移信息,而其本身是与频率波无关的直流信号。
QPSK的Q表示正交,即载波有同相和正交两种。
这种调制方式能让同一个载波传输2bit的信息,让载波频带利用率提高了一倍。
QPSK是在M=4时,它的载波有四种相位,分别为45°,135°,225°,315°。
QPSK调制采用的是正交调幅方式,即:两路正交边带信号。
如图13所示。
图13 QPSK信号产生原理图QPSK是一种恒包络调制,其信号的平均功率是不变的,不会随着幅度衰减而受到影响。
因其抗干扰能力强,所以多被用于卫星数字电视信号的传输。
4.3.2 正交振幅键控(QAM)它是把2ASK和2PSK两种调制结合起来的调制技术,使得带宽得到双倍扩展。
QAM调制技术用两路独立的基带信号对频率相同、相位正交的两个载波进行抑制载波双边带调幅,并将已调信号加在一起进行传输。
nQAM代表n个状态的正交调幅,一般有二进制(4QAM)、四进制(16QAM)、八进制(64QAM)。
我们需要得到多进制的QAM信号,需将二进制信号转换为m电平的多进制信号,然后进行正交调制,最后相加输出。
如图14所示。
输入2/m电平变化器)(tx串/并变换2/m电平变化器)(ty2/π载波发生器)(tSQAMtcωcostcωsinAB11•••01•••图14 QAM信号产生原理图QAM信号用正交相干解调方法进行解调,通过解调器将QAM信号进行正交相干解调后,用低通滤波器LPF滤除乘法器产生的高频分量,输出抽样判决后可恢复出的两路独立电平信号,最后将多电平码元与二进制码元间的关系进行2/m转换,将电平信号转换为二进制信号,经并/串变换后恢复出原二进制基带信号。
4.3.3 多电平残留边带调制(VSB)VSB是一种幅度调制,它在双边带调制的基础上,通过设计适当的输出滤波器,使信号一个边带的频谱成分原则上保留,另一个边带频谱成分只保留小部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%16QAM%%等效基带调制clc;clear all;close all;%%关闭所有窗口,比如之前画的图nsymbol = 10000;%%每种信噪比下符号数的发送符号数,10^6个数errornumber = zeros(1,10);errorratio = zeros(1,10);data = randi([0,1],1,4*nsymbol);%%产生1行,4*nsymbol列均匀分布的随机数data_mod1 = zeros(1,nsymbol);%%各参量初始化data_mod2 = zeros(1,nsymbol);data_demod1 = zeros(1,nsymbol);data_demod2 = zeros(1,nsymbol);data_demod3 = zeros(1,nsymbol);data_demod4 = zeros(1,nsymbol);s_receive1 = zeros(1,nsymbol);s_receive2 = zeros(1,nsymbol);for i = 1:nsymbol %%格雷码调制到星座图的映射if data(4*i-3)==0 && data(4*i-2)==0data_mod1(i) = 3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==0 && data(4*i-2)==1data_mod1(i) = 1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==1data_mod1(i) = -1;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endelseif data(4*i-3)==1 && data(4*i-2)==0data_mod1(i) = -3;if data(4*i-1)==0 && data(4*i)==0data_mod2(i) = 3;elseif data(4*i-1)==0 && data(4*i)==1data_mod2(i) = 1;elseif data(4*i-1)==1 && data(4*i)==1data_mod2(i) = -1;elseif data(4*i-1)==1 && data(4*i)==0data_mod2(i) = -3;endendendSNR_dB = 1:10;%%%信噪比dB形式SNR = 10.^(SNR_dB/10);%%信噪比转化为线性值for loop= 1:10sigma = sqrt(5/SNR(loop));s_receive1 = data_mod1 + sigma * randn(1,length(data_mod1));s_receive2 = data_mod2 + sigma * randn(1,length(data_mod2));%%??for k = 1:nsymbolif s_receive1(k)>2data_demod1(k) = 0;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;endelseif s_receive1(k)>0 && s_receive1(k)<2 data_demod1(k) = 0;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 &&s_receive2(k)<0 data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<0 && s_receive1(k)>-2 data_demod1(k) = 1;data_demod2(k) = 1;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0 data_demod3(k) = 1;data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endelseif s_receive1(k)<-2data_demod1(k) = 1;data_demod2(k) = 0;if s_receive2(k)>2data_demod3(k) = 0;data_demod4(k) = 0;elseif s_receive2(k)>0 && s_receive2(k)<2 data_demod3(k) = 0;data_demod4(k) = 1;elseif s_receive2(k)>-2 && s_receive2(k)<0data_demod4(k) = 1;elseif s_receive2(k)<-2data_demod3(k) = 1;data_demod4(k) = 0;endendif (data_demod1(k) ~= data(k*4-3)) || (data_demod2(k) ~= data(k*4-2))||(data_demod3(k) ~= data(k*4-1)) || (data_demod4(k) ~= data(k*4))errornumber(loop) = errornumber(loop) + 1;endenderrorratio(loop) = errornumber(loop)/nsymbol;endt = 0.75*erfc(sqrt(3*SNR/30));ser_theory = 1-(1-t).^2;%理论误码率,注意Q函数和误差函数的对应关系semilogy(SNR_dB,errorratio,'-k*',SNR_dB,ser_theory,'-ro');title('16QAM信号在AWGN信道下的性能(格雷码)');xlabel('信噪比/dB');ylabel('误码率');legend('误码率','理论误码率');grid on;%%坐标线。