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

合集下载

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调制解调仿真%%%------------------------------------------------------------%%主程序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实现及调制性能分析

通信原理课程设计报告书课题名称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调制及解调仿真程序说明

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调制及解调仿真程序说明

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)。

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 也是可以取多个离散的变量。

(完整版)16QAM仿真代码(matlab)

(完整版)16QAM仿真代码(matlab)

(完整版)16QAM仿真代码(matlab)% 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;ifbits(i)==0&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==0 s(ii)=sqrt(2)/2*exp(1i*pi/4);elseifbits(i)==1&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==0 s(ii)=sqrt(2)/2*exp(1i*3*pi/4);elseifbits(i)==1&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==0 s(ii)=sqrt(2)/2*exp(1i*5*pi/4);elseifbits(i)==0&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==0 s(ii)=sqrt(2)/2*exp(1i*7*pi/4);elseifbits(i)==0&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==0 s(ii)=sqrt(10)/2*exp(1i*atan(1/3));elseifbits(i)==0&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==1 s(ii)=sqrt(10)/2*exp(1i*atan(3));elseifbits(i)==1&&bits(i+1)==0&&bits(i+2)==0&&bits(i+3)==1 s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+pi/2));elseifbits(i)==1&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==0 s(ii)=sqrt(10)/2*exp(1i*(pi-atan(1/3)));elseifbits(i)==1&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==0 s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+pi));elseifbits(i)==1&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==1 s(ii)=sqrt(10)/2*exp(1i*(3*pi/2-atan(1/3)));elseifbits(i)==0&&bits(i+1)==0&&bits(i+2)==1&&bits(i+3)==1 s(ii)=sqrt(10)/2*exp(1i*(atan(1/3)+3*pi/2));elseifbits(i)==0&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==0 s(ii)=sqrt(10)/2*exp(1i*(2*pi-atan(1/3)));elseifbits(i)==0&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==1 s(ii)=sqrt(2)*3/2*exp(1i*pi/4);elseifbits(i)==1&&bits(i+1)==1&&bits(i+2)==0&&bits(i+3)==1 s(ii)=sqrt(2)*3/2*exp(1i*3*pi/4);elseifbits(i)==1&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==1 s(ii)=sqrt(2)*3/2*exp(1i*5*pi/4);elseifbits(i)==0&&bits(i+1)==1&&bits(i+2)==1&&bits(i+3)==1 s(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))&&...<p="">(imag(receiver(k))>=A(1,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(2,3))&&(imag(receiver(k))demodata(k*4-1)=0;demodata(k*4)=0;elseif(real(receiver(k))>=A(3,1))&&(real(receiver(k))<a(3,2))...< p=""> &&(imag(receiver(k))>=A(3,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(4,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(5,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(6,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(7,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(8,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(9,3))&&(imag(receiver(k))demodata(k*4-2)=1;demodata(k*4)=0;(real(receiver(k))>=A(10,1))&&(real(receiver(k))<a(10,2))...< p=""> &&(imag(receiver(k))>=A(10,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(11,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(12,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(13,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(14,3))&&(imag(receiver(k))demodata(k*4-2)=1;demodata(k*4-1)=0;demodata(k*4)=1;(real(receiver(k))>=A(15,1))&&(real(receiver(k))<a(15,2))...< p=""> &&(imag(receiver(k))>=A(15,3))&&(imag(receiver(k))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))...< p=""> &&(imag(receiver(k))>=A(16,3))&&(imag(receiver(k))demodata(k*4-2)=1;demodata(k*4-1)=1;demodata(k*4)=1;end endend</a(16,2))...<></a(15,2))...<></a(14,2))...<></a(13,2))...<></a(12,2))...<></a(11,2))...<></a(10,2))...<></a(9,2))...<></a(8,2))...<></a(7,2))...<></a(6,2))...<></a(5,2))...<></a(4,2))...<></a(3,2))...<></a(2,2))...<></a(1,2))&&...<>。

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

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;。

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

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

MATLAB环境下16QAM调制及解调仿真程序说明(同名17609)姓名: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分量并/串转换,最终恢复成码元序列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.5 four2two.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;。

利用matlab实现16QAM调制

利用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实现及调制性能分析

(完整版)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调制解调(MATLAB)

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信号的误码率随着信噪比的增大而逐渐减小,这与理论趋势是一致的,但是存在偏差。

设计目的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 路正交信号再进行矢量相加,即可形成调制信号输出。

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: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('已调信号频谱'); x label('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: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); %调制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: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;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=(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'; constel.m%画出星座图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;。

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

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;。

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

%% ------------------------------------------------------------% 软件无线电课程设计%% 方形、星形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';。

相关文档
最新文档