16QAM_星形和形星座图调制解调MATLAB代码

合集下载

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现一、引言MIMO-OFDM系统是一种融合了多输入多输出(MIMO)和正交频分复用(OFDM)技术的无线通信系统,能够显著提高数据传输速率和系统可靠性。

在MIMO-OFDM系统中,调制方式的选择对系统性能具有重要的影响。

QPSK和16QAM是两种常用的调制方式,它们在MIMO-OFDM系统中的应用对系统的性能和效率有着明显的影响。

本文将针对QPSK和16QAM调制下的MIMO-OFDM系统进行Matlab仿真实现,以研究两种调制方式对系统性能的影响。

二、MIMO-OFDM系统基本原理MIMO-OFDM系统由MIMO技术和OFDM技术组成。

MIMO技术利用多个天线发射和接收信号,通过空间分集和空间复用的方式提高系统的性能和可靠性。

而OFDM技术将带宽分成多个子载波,并采用正交调制方式传输数据,能够有效克服多径干扰和频率选择性衰落,提高系统的抗干扰能力和频谱利用率。

MIMO-OFDM系统将MIMO技术和OFDM技术结合,充分发挥两者的优势,实现了高速率和高可靠性的无线通信。

1. Matlab仿真环境搭建需要在Matlab环境中搭建MIMO-OFDM系统的仿真环境。

在Matlab中,可以使用Communications Toolbox和Wireless Communications Toolbox工具箱来搭建MIMO-OFDM系统的仿真环境。

通过这些工具箱,可以方便地构建MIMO通道模型、OFDM调制器和解调器等系统组件,并进行参数设置和仿真运行。

2. QPSK调制方式在QPSK调制方式下,将复数信号映射到星座图上,每个符号点代表两个比特。

QPSK调制方式可以实现较高的传输速率和频谱利用率,适用于高速率和大容量的无线通信场景。

在MIMO-OFDM系统中,QPSK调制方式通常用于传输速率要求较高的场景,例如视频传输和高速数据传输等。

2. MIMO-OFDM系统仿真实现与QPSK调制方式类似,利用Matlab中的Wireless Communications Toolbox,可以进行16QAM调制下MIMO-OFDM系统的仿真实现。

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

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

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

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

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

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

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

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

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

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

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

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

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

16QAM的调制与解调

16QAM的调制与解调

通信专业课程设计二太原科技大学课程设计(论文)设计(论文)题目:16 QAM的调制解调姓名学号班级学院指导教师2012年 1月 4 日太原科技大学课程设计(论文)任务书学院(直属系):电子信息工程学院时间: 2012年12月19日16QAM的调制与解调摘要随着无线通信频带日趋紧张,研究和设计自适应信道调制技术体制是建立宽带移动通信网络的关键技术之一。

正交振幅调制技术(QAM)是一种功率和带宽相对高效的信道调制技术,因此在大容量数字微波通信系统、有线电视网络高速数据传输、卫星通信系统等领域得到了广泛应用。

在移动通信中,随着微蜂窝和微微蜂窝的出现,使得信道传输特性发生了很大变化。

过去在传统蜂窝系统中不能应用的正交振幅调制也引起了人们的重视。

本文首先简单简绍了QAM调制解调系统和Simulink的工作原理。

然后利用Simulink 对16QAM调制系统进行仿真,不但得到了信号在加噪前后的星座图、眼图,而且在信噪比变化条件下,得到了16QAM系统的误码率。

最后,在简单做了一个2DPSK系统仿真之后,将它与16QAM系统进行了比较,并得出了16QAM是一种相对优越的调制解调系统这一结论。

关键词:QAM ;SIMULINK ;仿真; 2DPSK ;误码率目录摘要........................................................................ 第1章绪论.. 01.1 QAM简介 01.2 SIMULINK 01.3 SIMULINK与通信仿真 (1)第2章正交振幅调制 (2)2.1 MQAM信号的星座图 (2)2.2 16QAM的调制解调原理 (4)2.3 16QAM的改进方案 (5)第3章 16QAM调制解调系统实现与仿真 (7)3.1 16QAM 调制模块的模型建立与仿真 (9)3.1.1 信号源 (9)3.1.2 串并转换模块 (9)3.1.3 2/4电平转换模块 (10)3.1.4 其余模块 (12)3.1.5 调制系统的实现 (13)3.2 16QAM解调模块的模型建立与仿真 (14)3.2.1 相干解调 (14)3.2.2 4/2电平判决 (15)3.2.3 并串转换 (17)参考文献 (20)第1章绪论1.1 QAM简介在现代通信中,提高频谱利用率一直是人们关注的焦点之一。

16QAM的调制与解调

16QAM的调制与解调

目录一、设计思路及设计方案 (2)1)16QAM调制原理 (2)2)设计思路 (2)3)设计方案 (2)二、总体电路组成与分析 (3)1)总体电路图 (3)2)总体电路分析 (3)三、子电路系统分析 (4)1)串并变换子系统 (4)3)四电平判决子系统 (8)4)4-2变换子系统 (10)5)串并转换子系统 (13)四、仿真波形 (15)1)调制部分 (15)2).解调部分 (18)3).星座图: (22)五、设计总结 (22)六、参考文献 (23)一、设计思路及设计方案1)16QAM调制原理在16QAM中,数据信号由相互正交的两个载波合成。

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

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

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

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

这里采用正交调幅法。

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

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

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

16QAM

16QAM

1
%% 进行调制 y = qammod(xsym,M); % 16-QAM.此处为方形星 座图 %% 发送的基带信号 ytx = y;
2
%% 信道 % 在AWGN信道传输信号 %% 比特到符号的映射 % 将向量x中的比特转换成k比特长的符号流 EbNo = 10; % 信噪比定义(In dB) snr = EbNo + 10*log10(k) - 10*log10(nsamp); xsym = bi2de(reshape(x,k,length(x)/k).','left-msb'); ynoisy = awgn(ytx,snr,'measured'); %加噪声 %% 接收信号 yrx = ynoisy;
• SystemView:用SystemView,可以构造各种复杂的模
拟、数字、数模混合系统,各种多速率系统,用户在进行 系统设计时,只需从System View配置的图标库中调出有 关图标并进行参数设置,完成图标间的连线,然后运行仿 真操作,最终以时域波形、眼图、功率谱等形式给出系统 的仿真分析结果。
3
16QAM产生方法
1
• 正交调幅法:两路正交的四电平振幅键控信 号叠加而成。 • 复合相位法:两路正交的四相位移相键控信 2 号叠加而成。 • 16进制正交调幅法是一种振幅调制和相位调 制相结合的调制方式,即用16进制数字基带 信号去控制去控制载波的振幅和相位。
3
16QAM调制原理
1
2
速率为Rb的二进制码元序列经过串/并转换分为两路,再经 过2/4电平转换转换为四电平信号,这两路四电平信号分 别与正交载波相乘,完成正交调制,将两路信号叠加后产 3 生16QAM信号。
1

16apsk调制matlab代码

16apsk调制matlab代码

16apsk调制matlab代码16APSK调制是一种常用的数字调制技术,它广泛应用于无线通信系统中,特别是卫星通信领域。

在本文中,我们将逐步解答关于16APSK调制的问题,并提供MATLAB代码实现。

首先,我们需要了解什么是16APSK调制。

16APSK是一种组合了相移键控(PSK)和星座点(AM)调制技术的调制方式。

具体来说,16APSK 调制将16个相位恒定的载波信号与4个星座点进行组合,使得每个星座点对应于不同的相位,从而实现16种不同的调制符号。

接下来,我们将介绍16APSK调制的原理。

1. 构建星座图:首先,我们需要构建16APSK星座图。

星座图是一个画在复平面上的点阵,其中每个点表示一个可能的调制符号。

对于16APSK 调制,我们可以将星座图分为两个环状区域,分别表示8个相移键控(PSK)符号和8个星座点符号。

2. 星座点选择:选择星座点是16APSK调制过程中的关键步骤。

它通常是通过最小距离准则或其他优化算法来确定的。

我们可以使用MATLAB 中的“combinator”函数生成所有可能的星座点组合,并通过计算每个组合之间的最小距离来选择最佳的星座点。

3. 星座点映射:一旦选择了星座点,我们需要将输入数据映射到最接近的星座点上。

这个过程通常是通过计算输入数据与每个星座点之间的欧几里德距离来实现的。

选择最小距离的星座点作为输出调制符号。

MATLAB中的“kmeans”函数可以用于实现星座点映射。

4. 符号映射:一旦得到调制符号,我们需要将它们映射到16个相位相移键控(PSK)载波信号和4个星座点中的一个。

这可以通过使用MATLAB 的“modulate”函数来实现,该函数通过将调制符号与相应的相位偏移进行相乘来生成16APSK调制信号。

现在我们已经了解了16APSK调制的原理,接下来我们将提供MATLAB 代码实现。

matlab定义调制参数M = 16; 调制阶数pskModulator = comm.PSKModulator('ModulationOrder', M,'BitInput', true);amModulator =comm.RectangularQAMModulator('ModulationOrder', M/4);生成星座图constellation = pskModulator.constellation;选择星座点numBits = log2(M);combinations = combinator(length(constellation), numBits, 'p'); minDist = Inf;optimalPoints = [];for i = 1:size(combinations, 1)points = constellation(combinations(i, :), :);dist = minDistance(points);if dist < minDistminDist = dist;optimalPoints = points;endend进行星座点映射mapping = kmeans(constellation, optimalPoints);生成调制符号importSym = randi([0 M-1], 10000, 1); 随机生成输入数据modSym = mapping(importSym + 1); 进行星座点映射进行符号映射modSignal = modulate(pskModulator, pskModulator(modSym)); 进行相移键控调制amSignal = amModulator(modSym); 进行星座点调制以上是一个简单的MATLAB代码,用于实现16APSK调制过程。

matlab中16qam的解调原理

matlab中16qam的解调原理

matlab中16qam的解调原理
16QAM是一种常见的调制技术,它使用16个不同的调制符号来传输数据。

解调16QAM信号的原理如下:
1. 信号接收:接收器将接收到的16QAM信号进行取样和量化,并将其转换为数字信号。

2. 同步:接收器通过同步技术来获取发送信号的时钟和载波频率。

这可以使用接收信号中的同步比特序列来实现。

3. 相干解调:接收器将接收到的16QAM信号与参考载波进行
相关处理,以检测和解析发送信号中的数据符号。

4. 解调符号:解调器使用已检测到的信号幅度和相位信息来确定每个符号的值。

这可以通过在接收信号的信噪比(SNR)处进行阈值检测来实现。

5. 解调过程中的误码修正:在解调过程中,可能会出现误码。

为了纠正错误,可以使用纠错编码和纠错解码技术。

总的来说,16QAM的解调原理是通过同步、相干解调和解调
符号等步骤将接收到的信号转换为原始的数字数据。

利用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进行预处理。

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

相关文档
最新文档