16QAM的调制与解调要点
- 格式:doc
- 大小:538.76 KB
- 文档页数:25
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_rxbase_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的数据判为0 bit_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的数据判为0 bit_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';。
编号:审定成绩:重庆邮电大学毕业设计(论文)设计(论文)题目:基于FPGA的16QAM调制解调电路设计学院名称:自动化学生姓名:赵国强专业:机械设计制造及其自动化班级:0841003学号:2010213292指导教师:周围答辩组负责人:张开碧填表时间:2014 年 5 月重庆邮电大学教务处制摘要正交振幅调制(QAM)技术有着非常广泛的应用范围,不仅在移动通信领域应用,而且在有线电视传输、数字视频广播卫星通信(DVB-S)等领域也都得到广泛应用。
它在调制过程中利用了相位和幅度两维空间资源,比只利用单一维度空间资源的PSK和ASK调制方式频谱利用率高,不仅如此,QAM的星座点比PSK的星座点更分散,星座点之间的距离因此更大,所以能提供更好的传输性能。
本文在对QAM调制解调的基本原理、调制端的基带成形理论研究的基础上,通过Matlab 软件的Simulink仿真平台实现了16QAM调制解调系统的建立及实验验证。
之后利用Alera 公司的Quartus II软件加载ModelSim作为软件开发环境,设计并实现了16QAM调制解调系统的串并转换、差分和星座映射、DDS和加法器等关键模块。
关于载波信号发生器的设计,本文釆取传统DDS采用的正弦查表来实现DDS中相位幅度的转换。
本文主要研究了基于FPGA的16QAM调制与解调的实现。
釆用Verilog硬件描述语言对16QAM调制解调系统中的关键模块进行描述,完成了功能上的仿真验证,通过对比验证了设计的正确性,为下一步的硬件实现打下了很好的基础。
说明了QAM调制和解调的原理,,然后对各系统组成模块分析与仿真之后提出基于FPGA的16QAM调制与解调的总体设计方案。
最后用Verilog语言编写程序完成了整个系统的仿真,并对编好的程序其进行了编译调试。
首先对16QAM调制解调总体进行了系统仿真;然后用Verilog语言在Quartus II软件平台下完成了系统各功能模块的编写、功能与时序仿真和综合,最后把各模块组成的顶层原理图编译成的程序下载到EPMC20T100C5芯片上,手动输入基带信号,经过芯片处理后,基带信号得以有效恢复。
16-QAM 基带传输系统1. 引言随着通信业迅速的发展,传统通信系统的容量已经越来越不能满足当前用户的要求,而可用频谱资源有限,业不能靠无限增加频道数目来解决系统容量问题。
另外,人们亦不能满足通信单一的语音服务,希望能利用移动电话进行图像等多媒体信息的通信。
但由于图像通信比电话需要更大的信道容量。
高效、可靠的数字传输系统对于数字图像通信系统的实现很重要,正交幅度调制QAM 是数字通信中一种经常利用的数字调制技术,尤其是多进制QAM 具有很高的频带利用率,在通信业务日益增多使得频带利用率成为主要矛盾的情况下,正交幅度调制方式是一种比较好的选择。
为了加深对QAM 调制解调数字传输系统的理解,本实验对整个16-QAM 基带传输系统的仿真,结构框图如图1所示:2. QAM 调制解调原理2.1 QAM 调制正交幅度调制QAM 是数字通信中一种经常利用的数字调制技术,尤其是多进制QAM 具有很高的频带利用率,在通信业务日益增多使得频带利用率成为主要矛盾的情况下,正交幅度调制方式是一种比较好的选择。
正交幅度调制(QAM )信号采用了两个正交载波t f t f c c ππ2sin 2cos 和,每一个载波都被一个独立的信息比特序列所调制。
发送信号波形如图2.1.1所示,2sin )(2cos )()(t f t g A t f t g A t u c T ms c T mc m ππ+= M m ,...,2,1=图2.1.1 M=16QAM 信号星座图式中{mc A }和{ms A }是电平集合,这些电平是通过将k 比特序列映射为信号振幅而获得的。
例如一个16位正交幅度调制信号的星座图如下图所示,该星座是通过用M =4PAM 信号对每个正交载波进行振幅调制得到的。
利用PAM 分别调制两个正交载波可得到矩形信号星座。
QAM 可以看成是振幅调制和相位调制的结合。
因此发送的QAM 信号波形可表示为),2cos()()(n c T m mn t f t g A t u θπ+= ,,....,2,11M m = ,,....,2,12M n = 如果,211k M =,222k M =那么QAM 方法就可以达到以符号速率)(21k k R B +同时发送12221log M M k k =+个二进制数据。
目录第一章绪论 (3)1.1 QAM简介 (3)1. 2 systemview软件介绍及特点 (3)第二章正交振幅调制 (5)2.1 MQAM信号的星座图 (5)2. 2 QAM的调制解调原理 (7)2. 3 QAM的误码率性能 (8)2. 4 QAM的改进方案 (9)第三章 SYSTEMVIEW概述 (10)3. 1 systemview基本模块库介绍 (10)第四章 16QAM调制解调系统实现与仿真 (12)4.1 16QAM 调制模块的模型建立与仿真 (14)4.1.1 信号源部分 (14)4.1.2 串并转换模块 (15)4.1.3 2/4电平转换模块 (17)4.1.4 其余模块与调制部分的结果 (19)4.2 16QAM解调模块的模型建立与仿真 (22)4.2.1 相干解调 (22)4.2.2 4/2电平判决与毛刺消除仿真电路 (25)4.2.3 并串转换与最终解调结果对比 (30)第五章 16QAM抗噪声性能研究 (34)5.1 16QAM抗噪声性能的systemview仿真 (34)5.2 16QAM抗噪声性能的matlab仿真 (38)第六章结论与总结 (41)6.1 本设计总结 (41)6.2 对设计软件的不足与实验感想 (41)参考文献 (43)第一章绪论1.1 QAM简介在现代通信中,提高频谱利用率一直是人们关注的焦点之一。
近年来,随着通信业务需求的迅速增长,寻找频谱利用率高的数字调制方式已成为数字通信系统设计、研究的主要目标之一。
正交振幅调制QAM(Quadrature Amplitude Modulation)就是一种频谱利用率很高的调制方式,其在中、大容量数字微波通信系统、有线电视网络高速数据传输、卫星通信系统等领域得到了广泛应用。
在移动通信中,随着微蜂窝和微微蜂窝的出现,使得信道传输特性发生了很大变化。
过去在传统蜂窝系统中不能应用的正交振幅调制也引起人们的重视。
QAM数字调制器作为DVB系统的前端设备,接收来自编码器、复用器、DVB网关、视频服务器等设备的TS流,进行RS编码、卷积编码和QAM数字调制,输出的射频信号可以直接在有线电视网上传送,同时也可根据需要选择中频输出。
基于FPGA的16QAM调制解调器的实现组员:目录摘要3一、QAM调制原理3二、QAM的解调原理4三、16QAM调制器的实现51 系统总体框图 52 时钟分频 63 串并转换 64 差分编码和星座映射 65 DDS和线性加法器7四、QAM解调模块设计71 低通滤波器模块设计72 采样判决模块设计8五、16QAM调制器的仿真结果9四、附录121 顶层模块122 时钟分频模块133 串并转换模块144 差分模块和星座映射模块155 DDS 和加法器模块176 testbench 源程序227 用matlab 进行频谱分析23摘要QAM(Quadrature Amplitude Modulation)是一种新的调制技术,它在调制过程中利用了相位和幅度两维空间资源,比只利用单一维度空间资源的PSK 和ASK 调制方式频谱利用率高,不仅如此,QAM 的星座点比PSK 的星座点更分散,星座点之间的距离因此更大,所以能提供更好的传输性能。
随着第三代移动通信的兴起,传输容量增大,多进制正交幅度调制MQAM (Multiple Quadrature Amplitude Modulation)将得到更加广泛的运用。
本文主要研究了基于FPGA 的16QAM 调制与解调的实现。
首先说明了QAM 调制和解调的原理,然后对各系统组成模块分析与仿真之后提出基于FPGA 的16QAM 调制与解调的总体设计方案。
最后用Verilog 语言编写程序完成了整个系统的仿真,并对编好的程序其进行了编译调试。
文中详细介绍了载波恢复、正交相干解调、FIR 低通滤波器和采样判决的基本原理和设计方法。
关键词:正交相干解调,混频,FPGA ,QAM一、QAM 调制原理正交幅度调制(QAM)是一种把数字信息包含在载波的振幅和相位中的数字调制方式,也是ASK 和PSK 的结合。
式(1)表示了QAM 信号,它还可用式(2)来表示在QAM 中是如何结合幅度和相位调制的。
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_rxbase_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的数据判为0 bit_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的数据判为0 bit_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';。
目录摘要 (3)Abstract (4)1.1 选题背景及研究的意义 (5)1.2 论文内容及安排 (5)第二章正交振幅调制理论研究 (6)2.1 QAM调制原理 (6)2.2 QAM解调原理 (8)2.3 本章小结 (10)第三章 16QAM调制解调系统的实现与仿真 (11)3.1 16QAM调制模块模型建立 (11)3.1.1信号源 (11)3.1.2 串/并转换 (11)3.1.3 2/4转换 (13)3.1.4 其他模块 (14)3.1.5 调制实现 (15)3.2 16QAM解调模块模型建立 (17)3.2.1 相干解调 (17)3.2.2 4/2转换 (18)3.2.3 并/串转换 (19)3.2.4 其他模块 (20)3.2.5 解调实现 (21)3.3 16QAM系统Simulink模型建立 (22)3.4 本章小结 (23)第四章 16QAM抗噪声性能分析 (24)4.1 16QAM错误概率计算 (24)4.2 16QAM抗噪声性能仿真 (24)4.3 本章小结 (26)第五章总结与展望 (27)致谢 (28)参考文献 (29)摘要QAM(Quadrature Amplitude Modulation)调制是一种具有高频谱利用率且能够灵活地根据传输环境与传输信源的不同自适应地调整其调制速率的调制技术,因此可以缓和目前通信传输技术中频带紧张状况以及多速率综合业务传输。
目前QAM调制技术在移动通信领域,数字电视广播,因特网宽带接入以及一些专门的军事无线通信领域得到了广泛地应用。
本文首先阐述了QAM调制解调技术的基本原理及QAM信号产生和解调所需的关键步骤,然后利用Simulink仿真平台对16QAM调制与解调系统进行建模仿真并且在加入高斯白噪声信道的情况下得到了调制端与解调端的波形图,星座图与误码率,最后绘制出该仿真系统的误码率曲线。
关键词:16QAM 调制与解调高斯白噪声星座图误码率AbstractQAM is a modulation technique of high spectral efficiency, the modulation rate of QAM can be adjusted adaptively according to the environment and the type of source. Because of these advantages, the current severe situation of band can be eased. Now, QAM technique applies in the field, such as mobile communications, digital television broadcasting, Internet as well as some specialized military fields of wireless communications.The theory and model of QAM modulation and demodulation are analyzed first in this paper. And then design 16QAM modulation and demodulation system by using Simulink. In the case of adding Gaussian white noise channel, the waveform diagram, constellation diagram and BER can be obtained. Finally, by drawing out the BER curves of the simulation system the correctness of the design results can be concluded.Keywords: 16QAM Modulation and Demodulation Gaussian white noise Constellation diagram BER第一章绪论1.1 选题背景及研究的意义在当代社会中信息交换日益频繁,随着通信技术和计算机技术的发展及它们的密切结合,通信能克服对空间和时间的限制,大量的、远距离的信息传递和存取已成为可能。
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合 设计□创新实验日期:2018/6/23 实验成绩:一、实验名称实验八16QAM调制解调与信道分析二、实验目的(1) 掌握QAM及解调原理与特性(2) 了解星座图的原理及用途(3) 分析高斯、瑞利、莱斯信道三、实验内容(1) 设计16QAM调制解调算法(2) 比较GMSK和16QAM在高斯、莱斯和瑞利信道条件下的误码性能(3) 撰写实验报告。
四、实验原理正交振幅调制是用两个独立的基带数字信号对两个相互正交的同频载波进行抑制载波的双边带调制,利用这种已调信号在同一带宽内频谱正交的性质来实现两路并行的数字信息传输。
正交振幅调制信号的一般表示式为16QAM是指包含16种符号的QAM调制方式,产生的框图如图1.图 1 16QAM调制相干解调原理如图2.图 2 16QAM解调五、实验步骤(1) 16QAM调制与解调算法先产生所需的二进制基带信号:%% 产生的随机二进制数据流M = 16; %信号的星座尺寸k = log2(M); %每个符号的比特数n = 30000; %处理的比特数目numSamplesPerSymbol = 1; %过采样因子%% 创建二进制数据流作为列向量rng default%使用缺省随机数发生器dataIn = randi([0 1],n,1); %产生的二进制矢量数据%% 将二进制信号转为整数值信号dataInMatrix = reshape(dataIn,length(dataIn)/k,k);%数据整形成二进制4元组dataSymbolsIn = bi2de(dataInMatrix); %转换为整数使用MATLAB函数qammod()进行QAM的调制%% 使用16-QAM调制dataMod = qammod(dataSymbolsIn',M,'bin'); %二进制编码、相位偏移=0scatterplot(dataMod)title('未加噪声的星座图')axis([-4 4 -4 4])在信号中加入噪声%% 添加高斯白噪声EbNo = 10; % 当信道SNR计算的EB/N0=10dBsnr = EbNo + 10*log10(k) - 10*log10(numSamplesPerSymbol);%% 将信号通过AWGN信道rxSignal = awgn(dataMod,snr,'measured');显示星座图%% 使用scatterplot功能展示星座图sPlotFig = scatterplot(rxSignal ,1,0,'g.');hold onscatterplot(dataMod,1,0,'k*',sPlotFig)title('加了噪声的星座图')使用MATLAB函数qamdemod ()进行QAM的解调%% 16-QAM解调dataSymbolsOut = qamdemod(rxSignal ,M,'bin');%% 将整数值信号转为二进制信号dataOutMatrix = de2bi(dataSymbolsOut,k);dataOut = dataOutMatrix(:); %返回的数据列矢量计算解调后的误码率%% 计算系统的误码率(BER)[numErrors,ber] = biterr(dataIn,dataOut);fprintf('\nThe binary coding bit error rate = %5.2e, based on %d errors\n', ...ber,numErrors)运行效果如图3图 3 运行效果图(2) QAM在高斯、莱斯和瑞利信道条件下的误码性能思路:先产生16QAM信号,然后先通过高斯信道引入噪声,再送入莱斯和瑞利信道后输出,通过给定不同的信噪比,画出误码率曲线。
基于FPGA的16QAM OFDM调制解调器设计与实现OFDM调制(正交频分复用调制)是一种用于高速数据传输的调制技术,其通过将信号分成多个子载波进行传输,显著提高了频谱利用率和抗多径干扰能力。
而16QAM(Quadrature Amplitude Modulation)是一种常用的调制方案,通过在I和Q信道上调制正交载波,实现高效率的数据传输。
本文将基于FPGA进行16QAM OFDM调制解调器的设计与实现。
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,具有灵活性强、可重构性好等特点,适合用于数字信号处理应用。
一、系统设计在设计过程中,我们将分为三个阶段来实现16QAM OFDM调制解调器,分别是:OFDM信号生成、16QAM调制和解调。
1. OFDM信号生成OFDM信号生成是通过将数据块分成多个子载波进行调制来实现的。
在这里,我们将采用128个正交子载波,其中包括64个实部载波和64个虚部载波。
每个子载波的调制方式是QPSK(Quadrature Phase Shift Keying)调制,将4个bit的数据映射为一个复数点。
同时,还需要添加循环前缀以增加系统的抗多径干扰能力。
2. 16QAM调制在16QAM调制中,将每两个子载波看作一个复数点,通过映射的方式将每个复数点对应的16种不同幅度和相位的情况表示为一个符号值。
因此,对于128个子载波,将会有64个符号值。
3. 解调解调的过程与调制过程相反,首先需要将接收到的信号进行16QAM解调,得到对应的符号值。
然后,将符号值映射回原始的子载波上,再进行16QAM解调,最后恢复出原始的数据块。
二、实现方案在FPGA中,可以使用硬件描述语言(例如Verilog)来实现16QAM OFDM调制解调器。
下面我们将分别介绍三个阶段的实现。
1. OFDM信号生成使用Verilog语言编写一个生成128个子载波的模块,每个子载波使用QPSK调制,并添加循环前缀。
姓名: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 实现及调制性能分析姓 名学 号学 院 通信与电子工程学院专 业 通信工程 指导教师李梦醒2012年 01 月 01日※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※2009级通信工程专业通信原理课程设计16QAM 调制与解调的MATLAB 实现及调制性能分析 1设计目的 (1) 掌握16QAM 调制与解调的原理。
(2) 掌握星座图的原理并能熟悉星座图的应用。
(3) 熟悉并掌握MATLAB 的使用方法。
(4) 通过对16QAM 调制性能的分析了解16QAM 调制相对于其它调制方式的优缺点。
2 设计原理正交振幅调制(Quadrature Amplitude Modulation,QAM )是一种振幅和相位联合键控。
虽然MPSK 和MDPSK 等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。
但是由图1可见,在MPSK 体制中,随着图 1 8PSK 信号相位M 的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。
为了改善在M 大时的噪声容限,发展出了QAM 体制。
在QAM 体制中,信号的振幅和相位作为两个独立的参量同时受到调制。
这种信号的一个码元可以表示为(2—1)式中:k=整数;和分别可以取多个离散值。
式(2—1)可以展开为(2—2)令 X k = A k cos θk , Y k = -A k sin θk 则式(2—1)变为(2—3)和也是可以取多个离散的变量。
从式(2—3)看出,可以看作是两个正交的振幅键控信号之和。
在式(2—1)中,若θk 值仅可以取π/4和-π/4,A k 值仅可以取+A 和-A ,则此QAM 信号就成为QPSK 信号,如图2所示:图2 4QAM 信号矢量图所以,QPSK 信号就是一种最简单的QAM 信号。
有代表性的QAM 信号是16进制的,记为16QAM ,它的矢量图示于下图中:三、成绩验收盖章2010年 月 日图3 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分量并/串转换,最终恢复成码元序列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;。
通信专业课程设计二太原科技大学课程设计(论文)设计(论文)题目:16 QAM的调制解调姓名学号班级学院指导教师2012年 1月 4 日太原科技大学课程设计(论文)任务书学院(直属系):电子信息工程学院时间: 2012年12月19日16QAM的调制与解调摘要随着无线通信频带日趋紧张,研究和设计自适应信道调制技术体制是建立宽带移动通信网络的关键技术之一。
正交振幅调制技术(QAM)是一种功率和带宽相对高效的信道调制技术,因此在大容量数字微波通信系统、有线电视网络高速数据传输、卫星通信系统等领域得到了广泛应用。
在移动通信中,随着微蜂窝和微微蜂窝的出现,使得信道传输特性发生了很大变化。
过去在传统蜂窝系统中不能应用的正交振幅调制也引起了人们的重视。
本文首先简单简绍了QAM调制解调系统和Simulink的工作原理。
然后利用Simulink 对16QAM调制系统进行仿真,不但得到了信号在加噪前后的星座图、眼图,而且在信噪比变化条件下,得到了16QAM系统的误码率。
最后,在简单做了一个2DPSK系统仿真之后,将它与16QAM系统进行了比较,并得出了16QAM是一种相对优越的调制解调系统这一结论。
关键词:QAM ;SIMULINK ;仿真; 2DPSK ;误码率目录摘要 (I)第1章绪论 (1)1.1 QAM简介 (1)1.2 SIMULINK (1)1.3 SIMULINK与通信仿真 (2)第2章正交振幅调制 (3)2.1 MQAM信号的星座图 (3)2.2 16QAM的调制解调原理 (5)2.3 16QAM的改进方案 (6)第3章 16QAM调制解调系统实现与仿真 (8)3.1 16QAM 调制模块的模型建立与仿真 (10)3.1.1 信号源 (10)3.1.2 串并转换模块 (10)3.1.3 2/4电平转换模块 (11)3.1.4 其余模块 (13)3.1.5 调制系统的实现 (14)3.2 16QAM解调模块的模型建立与仿真 (15)3.2.1 相干解调 (15)3.2.2 4/2电平判决 (16)3.2.3 并串转换 (18)参考文献 (21)第1章绪论1.1 QAM简介在现代通信中,提高频谱利用率一直是人们关注的焦点之一。
近年来,随着通信业务需求的迅速增长,寻找频谱利用率高的数字调制方式已成为数字通信系统设计、研究的主要目标之一。
正交振幅调制QAM(Quadrature Amplitude Modulation)就是一种频谱利用率很高的调制方式,其在中、大容量数字微波通信系统、有线电视网络高速数据传输、卫星通信系统等领域得到了广泛应用。
在移动通信中,随着微蜂窝和微微蜂窝的出现,使得信道传输特性发生了很大变化。
过去在传统蜂窝系统中不能应用的正交振幅调制也引起人们的重视。
QAM数字调制器作为DVB系统的前端设备,接收来自编码器、复用器、DVB 网关、视频服务器等设备的TS流,进行RS编码、卷积编码和QAM数字调制,输出的射频信号可以直接在有线电视网上传送,同时也可根据需要选择中频输出。
它以其灵活的配置和优越的性能指标,广泛的应用于数字有线电视传输领域和数字MMDS系统。
作为国际上移动通信技术专家十分重视的一种信号调制方式之一,正交振幅调制(QAM)在移动通信中频谱利用率一直是人们关注的焦点之一,随着微蜂窝(Microcell)和微微蜂窝(Picocell)系统的出现,使得信道的传输特性发生了很大变化,接收机和发射机之间通常具有很强的支达分量,以往在蜂窝系统中不能应用的但频谱利用率很高的WAM已引起人们的重视,许多学者已对16QAM及其它变型的QAM在PCN中的应用进行了广泛深入地研究。
1.2 SIMULINKSimulink是MATLAB中的一种可视化仿真工具,是一种基于MATLAB的框图设计环境,是实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中。
Simulink可以用连续采样时间、离散采样时间或两种混合的采样时间进行建模,它也支持多速率系统,也就是系统中的不同部分具有不同的采样速率。
为了创建动态系统模型,Simulink提供了一个建立模型方块图的图形用户接口(GUI) ,这个创建过程只需单击和拖动鼠标操作就能完成,它提供了一种更快捷、直接明了的方式,而且用户可以立即看到系统的仿真结果。
1.3 SIMULINK与通信仿真仿真是衡量系统性能的工具,它通过仿真模型的仿真结果来推断原系统的性能,从而为新系统的建立或原系统的改造提供可靠的参考。
仿真是科学研究和工程建设中不可缺少的方法。
实际的通信系统是一个功能结构相当复杂的系统,对于这个系统作出的任何改变都可能影响到整个系统的性能和稳定。
而Simulink作为Matlab提供的用于对动态系统进行建模、仿真和分析的工具包,提供了仿真所需的信源编码、纠错编码、信道、调制解调以及其它所用的全部库函数和模块。
可见,不管对任何复杂的通信系统,用Simulink对其仿真都是一个不错的选择。
第2章 正交振幅调制2.1 MQAM 信号的星座图MQAM 信号表示式可写成 )sin cos (2)(t w B t w A T t S c i c i B MQAM +=(2.1) 其中,Ai 和Bi 是振幅,表示为⎭⎬⎫-±=-±=)12()12(j Bj i Ai (2.2) 其中,i,j=1,2,…,L ,当L=1时,是4QAM 信号;当L=2时,是16QAM 信号;当L=4时,是64QAM 信号。
选择正交的基本信号为 ⎪⎪⎭⎪⎪⎬⎫==t w T t t w T t c B c B sin 2)(cos 2)(21ϕϕ (2.3) 在信号空间中MQAM 信号点⎪⎪⎭⎫ ⎝⎛=j i ij B A S (i,j=1,2,…,L) (2.4)图2.1是MQAM 的星座图,这是一种矩形的MQAM 星座图。
图2.1 MQAM 信号星座图 为了说明MQAM 比MPSK 具有更好的抗干扰能力,图2.2示出了16PSK 和16QAM 的星座图,这两个星座图表示的信号最大功率相等,相邻信号点的距离d1,d2分别为: 2DPSK A A d 39.016sin 21=≈π, 16QAM A M d 47.01162122=-=-≈。
结果表明,d2>d1,大约超过1.64dB 。
合理地比较两星座图的最小空间距离应该是以平均功率相等为条件。
可以证明,在平均功率相等条件下,16QAM 的相邻信号距离超过16PSK 约4.19dB 。
星座图中,两个信号点距离越大,在噪声干扰使信号图模糊的情况下,要求分开两个可能信号点越容易办到。
因此16QAM 方式抗噪声干扰能力优于16PSK 。
图2.2 16QAM和16PSK的星座图MQAM的星座图除正方形外,还有圆形、三角形、矩形、六角形等。
星座图的形式不同,信号点在空间距离也不同,误码性能也不同。
MQAM和MPSK在相同信号点数时,功率谱相同,带宽均为基带信号带宽的2倍。
2.2 16QAM的调制解调原理MQAM的调制解调框图如图2.3所示。
在发送端调制器中串/并变换使得信息速率为Rb 的输入二进制信号分成两个速率为Rb/2的二进制信号,2/L电平转换将每个速率为Rb/2的二进制信号变为速率为Rb/(2lbL)的电平信号,然后分别与两个正交载波相乘,再相加后即得MQAM信号。
在接收端解调器中可以采用正交的相干解调方法。
接受到的信号分两路进入两个正交的载波的相干解调器,再分别进入判决器形成L进制信号并输出二进制信号,最后经并/串变换后得到基带信号。
MQAM调制MQAM的解调图2.3 MQAM调制解调框图2.316QAM的改进方案为了适应不同的需要,QAM有一些改进方案,如正交部分响应幅度调制(MQPR)、非线性正交振幅调制(NLA-QAM)、叠加式正交振幅调制(SQAM)等,还可以把QAM调制与信道编码技术结合起来设计,取得最优的可靠性和有效性,这种技术称为网格编码调制(TCM)。
1.MQPR调制这是一种在多电平正交调制中,上下两支路的同相和正交基带信号都用部分响应信号(通常采用第Ⅰ类和第Ⅳ类部分响应)的调制方式。
QPR与QAM相比,在相同信息传输速率条件下,严格带宽受限的QPR优于QAM。
2.NLA-QAM调制QAM信号在进行传输之前,还要进行功率放大,而高效的功率放大是非线性的功率放大器,故而需考虑非线性对QAM的特性没有明显的影响措施,这就是NLA-QAM调制。
NLA-QAM信号的产生方法与QAM不相同,但解调的方法与QAM完全一样。
3.SQAM调制QAM调制信号在码元转换时刻有相位跳变的时刻,旁瓣分量比连续相位的调制信号要高。
要改善QAM的频谱特性,应改善其基带波形以平滑码元转换时的相位变化,SQAM就是从这个角度提出的。
SQAM的基本脉冲波形是由两个宽度为TB的升余弦波形与一个宽度为2TB的升余弦波形叠加而成。
采用正交调制方式时,在下支路要延时TB/2,并且上下两支路放大倍数相差60dB。
SQAM信号的功率谱与QAM相比,旁瓣分量得到有效地抑制。
第3章 16QAM调制解调系统实现与仿真前面两章简单介绍了16QAM的调制解调和SIMULINK的工作原理,下面本文将用MATLAB 数学软件中的SIMULINK模块实现16QAM调制、解调通信系统,并进行仿真。
由第二章MQAM 的调制解调原理可以得出,16QAM的调制解调框图如下所示:图3.1 16QAM的调制解调框图由图3.1可以知道,16QAM的调制解调原理比较简单,接下来,我们将通过调制与解调两大模块来介绍SIMULINK下16QAM的仿真结果,并且将对仿真结果作出分析并对系统进行一定的优化,从而获得较好的系统模型。
下页为本次仿真的系统总体框图:图3.2 仿真总体框图3.1 16QAM 调制模块的模型建立与仿真通过对图3.1中16QAM 调制原理框图的分析,16QAM 一个码元所携带的信息为M 2log 即4bit ,是一般基带数字调制(QPSK )码元携带信息量的2倍。
而且16QAM 调制是由两路相互独立的信号进行调制,一个16QAM 码元宽度是基础信号的2倍。
以下我将对系统仿真框图中的各模块进行简单的介绍:3.1.1 信号源本次仿真在信号源部分采用了伪随机序列发生器,由于系统要求基带信号码元速率19.2kbps ,则本序列发生器的基本参数设置如下:Generator polynomial:[1 0 0 0 0 1 1]Initial states:[0 0 0 0 0 1]Output mask vector:0Sample time:1/19200Output data type:double3.1.2 串并转换模块由于系统仿真总框图涉及模块较多,为不失美观同时又能显的浅显易懂特将串并转化作成一个单独子系统而嵌入总系统中。