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);16QAM星形映射%rf_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;%% 误码率分析_x0016_QAM误码率曲线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;%两次根升余弦滤波延迟,定位初始信号位置Tlay+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%QAM码元数据入口参数:data_QAM:%的大小中M_QAM:MQAMM %出口参数:二进制数据比特流%%------------------------------------------------------------------------function data_out=QamDemod(data_QAM,M_QAM)进制码元的Mbit数每个k=log2(M_QAM);% 码元长度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)-1data_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)-1data_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;úta_dec(find(data_dec>15))=15;%大于15的判定为15úta_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';。
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 也是可以取多个离散的变量。
MATLAB环境下16QAM调制及解调仿真程序说明
姓名:Nikey之阳早格格创做MATLAB环境下16QAM调造及解调仿实步调证明一、正接调造及相搞解调本理框图正接调造本理框图相搞解调本理框图二、MQAM调造介绍及本仿实步调的几面证明MQAM不妨用正接调造的要领爆收,本仿实中与M=16,即幅度战相位相分散的16个旗号面的调造.为了瞅察疑讲噪声对于该调造办法的做用,咱们正在已调旗号中又加进了分歧强度的下斯黑噪声,并统计其译码误码率.为了简化步调战得到稳当的误码率,咱们正在解调时并已从已调旗号中回复载波,而是间接爆收与调造时一模一般的载波去举止旗号解调.三、仿实截止图附源步调代码: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_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;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); %调造%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';%基戴降余弦成形滤波器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;%四进造变更成二进造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';%绘出星座图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;。
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调制解调仿真%%%------------------------------------------------------------%%主程序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的解调原理16QAM(Quadrature Amplitude Modulation,16进制幅度调制)是一种常用的数字调制技术,广泛应用于无线通信系统中。
它将信息信号分成了4个相位和4个幅度级别,共有16种信号组合,有效提高了频谱利用率和传输容量。
下面我们来详细讨论一下16QAM的解调原理。
首先,我们需要了解16QAM调制的原理。
在16QAM中,每个符号代表4个比特,根据幅度和相位的不同组合,生成16种不同的调制符号。
这些调制符号可以通过查找表、映射函数或者二进制到十进制转换方式得到。
解调是调制的逆过程,我们需要将收到的信号从16QAM调制符号还原成原始的比特序列。
解调过程可以分为两个主要步骤:接收信号的分离和调制符号的恢复。
第一步是接收信号的分离。
接收到的信号通常是通过无线或有线传输介质传输的,并且在信道中可能受到干扰或失真影响。
因此,我们需要对接收到的信号进行一定的处理,以消除干扰和失真影响。
在16QAM中,接收信号是通过I路(In-phase)和Q路(Quadrature)两个正交信道传输的。
在无噪声情况下,接收信号可以表示为:r(t) = A * cos(2πfct + φ) + B * sin(2πfct + φ)其中,A和B分别表示幅度,f为载波频率,t为时间,φ为相位。
根据16QAM的调制规则,我们可以把A和B分别分成4个幅度级别和4个相位级别。
因此,接收信号可以表示为:r(t) = ∑ Ai * cos(2πfct + φi) + Bi * sin(2πfct + φi)其中,i=1,2,3,4分别表示4个幅度级别,i=1,2,3,4表示4个相位级别。
接下来,我们需要进行调制符号的恢复。
这涉及到对接收到的信号进行采样,并将采样结果映射回16QAM调制符号。
通常情况下,我们会使用匹配滤波器来实现。
匹配滤波器的作用是将接收到的信号与一组已知的4个幅度级别和4个相位级别进行相关性检测。
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)。
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;。
MATLAB环境下16QAM调制及解调仿真程序说明
姓名:Nikey之马矢奏春创作MATLAB环境下16QAM调制及解调仿真法式说明一、正交调制及相干解调原理框图正交调制原理框图相干解调原理框图二、MQAM调制介绍及本仿真法式的几点说明MQAM可以用正交调制的方法发生,本仿真中取M=16,即幅度和相位相结合的16个信号点的调制.为了观察信道噪声对该调制方式的影响,我们在已调信号中又加入了分歧强度的高斯白噪声,并统计其译码误码率.为了简化法式和获得可靠的误码率,我们在解调时并未从已调信号中恢复载波,而是直接发生与调制时一模一样的载波来进行信号解调.三、仿真结果图附源法式代码: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:Tdt;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<1e04); y(q)=1e04; 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调制在分歧信道噪声强度下的误码率');%发生二进制信源随机序列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;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:Tdt;%串/并变换分离出I分量、Q分量,然后再分别进行电平映射I=x(1:2:nn1); [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); %调制%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';%基带升余弦成形滤波器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);%二进制转换成四进制function [y,yn]=two2four(x,m);T=[0 1;3 2]; n=length(x); ii=1;for i=1:2:n1;xi=x(i:i+1)+1;yn(ii)=T(xi(1),xi(2));ii=ii+1;end;yn=yn1.5; y=yn;for i=1:m1;y=[y;yn];end;%四进制转换成二进制function xn=four2two(yn);y=yn; ymin=min(y); ymax=max(y); ymax=max([ymax abs(ymin)]);ymin=abs(ymax); yn=(yymin)*3/(ymaxymin);%设置门限电平,判决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';%画出星座图function c=constel(x,fs,fb,fc);N=length(x); m=2*fs/fb; n=fs/fc;i1=mn; i=1; ph0=(i11)*2*pi/n; while i <= N/m;xi=x(i1:i1+n1);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=ph0angle(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 实现及调制性能分析姓 名学 号 学 院 通信与电子工程学院专 业 通信工程 指导教师李梦醒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)8/5π8/3π8/π8/7π8/9π8/11π8/13π令 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)k X 和k Y 也是可以取多个离散的变量。
利用matlab实现16QAM调制
利用matlab实现16QAM调制一、随机信号的调制第一个示例描述以下问题:下表描述了解决此问题的关键任务和相应的通信工具箱函数,其中选择基带16QAM作为调制制式以及加性高斯白噪声(AWGN)作为信道模型。
问题解决方案:1.产生随机二进制数据序列。
在MATLAB中表示信号的常规格式是向量或者矩阵。
本示例中利用randint 函数来产生一个表示二进制数据序列连续值的列向量。
其中二进制数据序列的长度(即为列向量中的行数)设置为30,000。
下面的代码同时还绘制了数据序列的杆图(stem plot),用来显示数据的0、1值。
你所产生的图可能与次示例中的图有一点不一样,这是因为本示例中应用了随机数。
%% Setup% Define parameters.M = 16; % Size of signal constellationk = log2(M); % Number of bits per symboln = 3e4; % Number of bits to processnsamp = 1; % Oversampling rate%% Signal Source% Create a binary data stream as a column vector.x = randint(n,1); % Random binary data stream% Plot first 40 bits in a stem plot.stem(x(1:40),'filled');title('Random Bits');xlabel('Bit Index'); ylabel('Binary Value');2、准备调制modem.qammod对象实现M-QAM调制器,本示例中M为16。
其输入参数是从0到15的整数而不是4bits二进制数据。
因此,在利用此对象的modulate方法之前需要对二进制数据序列x进行预处理。
(完整版)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调制及解调仿真程序说明精编版
姓名: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)
题目:基于MATLAB 的16QAM 及32QAM 系统的仿真原理:QAM 是一种矢量调制,将输入比特映射到一个复平面,形成复数调制信号,然后将I 信号和Q 信号(实部虚部)分量采用幅度调制,分别对应调制在相互正交的两个载波(cos t ω,sin t ω)上。
下图为MQAM 的调制原理图。
MQAM 的信号表达式:()()()cos sin 1,2,...,,0M C S C S i i T C i T C S i i s t a g t t a g t ti M t T a a ωω=-=≤≤与是具有种不同幅度的加权值上述表达式可以看出,QAM 为两个正交载波振幅相位调制的结合。
波形矢量可以表示为:()()()11221,2,...,,0i i i S s t s f t s f t i M t T =+=≤≤()()()()()()()()121102202cos,02sin ,01,2,...,1,2,...,S ST C S g T C S g T i i T i i f t g t t t T E f t g t t t T E s s t f t dt i M s s t f t dt i M ωω=≤≤=≤≤====⎰⎰ MQAM 信号最佳接收:实验仿真条件:码元数量设定为10000个,基带信号频率1HZ ,抽样频率32HZ ,载波频率4HZ 。
实验结果分析:对于QAM ,可以看成是由两个相互正交且独立的多电平ASK 信号叠加而成。
因此,利用多电平误码率的分析方法,可得到M 进制QAM 的误码率为:])(1log 3[)11(022n E L L erfc L P b e --= 式中,M L =,Eb 为每码元能量,n 0为噪声单边功率谱密度。
通过调整高斯白噪声信道的信噪比SNR (Eb/No ),可以得到如图所示的误码率图:QAM信号误码率分析10010-1率码误10-210-3信噪比可见16QAM和32QAM信号的误码率随着信噪比的增大而逐渐减小,这与理论趋势是一致的,但是存在偏差。
16QAM调制解调(MATLAB)
题目基于MATLAB的16QAM 及32QAM 系统的仿真原理:QAM是一种矢量调制,将输入比特映射到一个复平面,形成复数调制信号,然后将I信号和Q信号(实部虚部)分量采用幅度调制,分别对应调制在相互正交的两个载波(cos t , sin t )上。
下图为MQAM 的调制原理图。
MQAM 的信号表达式:S i t a i c g T t cos c t a i s g T t sin 点i 1,2,..., M , 0 t T sa ic与a iS是具有i M种不同幅度的加权值上述表达式可以看出,QAM为两个正交载波振幅相位调制的结合波形矢量可以表示为:s t S i1 f1 t s2 f2 t i 1,2,..., M, 0 t T ST SS i 0 S i t f i t dt i 1,2,..., MTsS2 0 S i t f2 t dt i 1,2,..., MMQAM信号最佳接收:实验仿真条件:码元数量设定为10000个,基带信号频率1HZ,抽样频率32HZ , 载波频率4HZ 实验结果分析:P e对于QAM ,可以看成是由两个相互正交且独立的多电平 ASK 信号叠加而成因此,利用多电平误码率的分析方法,可得到 M 进制QAM 的误码率为:(1 >fcL 3L O 2g21L (Eb )]L V L 1 n ° 式中,L M ,Eb 为每码元能量,n o 为噪声单边功率谱密度。
通过调整高斯白噪声信道的信噪比 SNR (Eb/No ),可以得到如图所示的误码率 图:0 10QAM 信号误码率分析-110-2 10*** +■ -310-1 -0.5 0.5 1 信噪比1.52.5-1可见16QAM 和32QAM 信号的误码率随着信噪比的增大而逐渐减小,这与理论趋势是一致的,但是存在偏差。
总结:与16QAM 比较,32QAM 解调的误码率高,但数据速率高。
16QAM 一般工作32QAr ;l 误比特率性能O-3 «oO在大信噪比环境下,误码率会很小,在同等噪声条件下, 16QAM 的抗噪声性能是相当优越的附录代码: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;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(212);plot(f,y,'b');grid on;title(' 已调信号频谱 '); xlabel('f/fb');%画出 16QAM 调制方式对应的星座图%%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,'blue*-');grid on;xlabel('SNR in dB');ylabel('Pe');title('16QAM 调制误码率 ');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);four2two.mfunction 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';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.5 random_binary.mfunction [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;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';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);32QAMM = 32;k = log2(M);x = randint(20000,1);y = modulate(modem.qammod('M',32,'InputType','Bit'),x);EbNo = -5:1:10;for n=1:length(EbNo)snr(n) = EbNo(n) + 10*log10(k);ynoisy = awgn(y,snr(n),'measured');zms = demodulate(modem.qamdemod('M',32,'OutputType','Bit'),ynoisy); z = de2bi(zms,'left-msb');[nErrors(n), BITBER(n)] = biterr(x,z);theo_err_prb( n)=(1/k)*3/2*efc(sqrt(k*0.1*(10.A(EbNo( n)/10)))); enddisp (nErrors);disp (BITBER);semilogy(EbNo,BITBER,'b*-',EbNo,theo_err_prb,'k*-');title('32QAM 误比特率性能 ');xlabel('Eb/N0(dB)');ylabel(' 误比特率 ');legend(' 仿真误码率 ',' 理论误码率 ');。
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@
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:基于MATLAB 的16QAM 及32QAM 系统的仿真原理:QAM 是一种矢量调制,将输入比特映射到一个复平面,形成复数调制信号,然后将I 信号和Q 信号(实部虚部)分量采用幅度调制,分别对应调制在相互正交的两个载波(cos t ω,sin t ω)上。
下图为MQAM 的调制原理图。
MQAM 的信号表达式:()()()cos sin 1,2,...,,0M C S C S i i T C i T C S i i s t a g t t a g t ti M t T a a ωω=-=≤≤与是具有种不同幅度的加权值上述表达式可以看出,QAM 为两个正交载波振幅相位调制的结合。
波形矢量可以表示为:()()()11221,2,...,,0i i i S s t s f t s f t i M t T =+=≤≤()()()()()()()()121102202cos ,02sin ,01,2,...,1,2,...,S ST C S g T C S g T i i T i i f t g t t t T E f t g t t t T E s s t f t dt i M s s t f t dt i M ωω=≤≤=≤≤====⎰⎰ MQAM 信号最佳接收:实验仿真条件:码元数量设定为10000个,基带信号频率1HZ ,抽样频率32HZ ,载波频率4HZ 。
实验结果分析:对于QAM ,可以看成是由两个相互正交且独立的多电平ASK 信号叠加而成。
因此,利用多电平误码率的分析方法,可得到M 进制QAM 的误码率为:])(1log 3[)11(022n E L L erfc L P b e --= 式中,M L =,Eb 为每码元能量,n 0为噪声单边功率谱密度。
通过调整高斯白噪声信道的信噪比SNR (Eb/No ),可以得到如图所示的误码率图:-1-0.500.511.522.510-310-210-1100QAM 信号误码率分析信噪比误码率可见16QAM和32QAM信号的误码率随着信噪比的增大而逐渐减小,这与理论趋势是一致的,但是存在偏差。
总结:与16QAM比较,32QAM解调的误码率高,但数据速率高。
16QAM一般工作在大信噪比环境下,误码率会很小,在同等噪声条件下,16QAM的抗噪声性能是相当优越的。
附录代码: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;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(212);plot(f,y,'b');grid on;title('已调信号频谱'); xlabel('f/fb');%画出16QAM调制方式对应的星座图%%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,'blue*-');grid on;xlabel('SNR in dB');ylabel('Pe');title('16QAM调制误码率');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);four2two.mfunction 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';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.5random_binary.mfunction [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;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); Q n=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';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);32QAMM = 32;k = log2(M);x = randint(20000,1);y = modulate(modem.qammod('M',32,'InputType','Bit'),x);EbNo = -5:1:10;for n=1:length(EbNo)snr(n) = EbNo(n) + 10*log10(k);ynoisy = awgn(y,snr(n),'measured');zms = demodulate(modem.qamdemod('M',32,'OutputType','Bit'),ynoisy); z = de2bi(zms,'left-msb');[nErrors(n), BITBER(n)] = biterr(x,z);theo_err_prb(n)=(1/k)*3/2*erfc(sqrt(k*0.1*(10.^(EbNo(n)/10))));enddisp (nErrors);disp (BITBER);semilogy(EbNo,BITBER,'b*-',EbNo,theo_err_prb,'k*-');title('32QAM误比特率性能');xlabel('Eb/N0(dB)');ylabel('误比特率');legend('仿真误码率','理论误码率');。