无线通信系统的Matlab实现(一)

Part III Digital Modulations

数字调制器和解调器:复基带等效模型

摘要

在波形级仿真模型中,正弦载波的每个周期都要进行仿真,因此需要消耗更多的内存和时间。另一方面,复基带等效模型,本章的主题,操作符号的基础上。这种方法实现起来要简单得多。它提供了一个很大的优势,大幅减少内存需求,以及在更短的时间跨度产生的结果。本章的重点是开发仿真代码,用于使用复基带等效方法实现各种调制。

5.1通带和复基带等效模型

对于给定的调制技术,有两种方法来实现仿真模型:通带模型和等效基带模型。通带模型也称为波形级仿真模型。本章中描述的波形级仿真技术用于表示传输信号与信道的物理交互。在波形级仿真中,发射信号、噪声和接收信号都由波形的样本表示。

通常,波形级模拟使用每个符号的许多样本。对于各种数字调制技术的误码率性能的计算,符号采样时刻的符号值比整个波形的外观更重要。在这种情况下,不需要详细的波形级仿真,而是可以使用本章中描述的等效基带离散时间模型。

离散时间等效基带信道模型每个符号只需要一个样本,因此它消耗更少的内存,并在非常短的时间跨度内产生结果。这样的模型工作在零频率附近,抑制了射频载波,因此大大减少了模拟所需的样本数量。它们更适合于性能分析仿真。如果系统的行为被很好地理解,模型可以进一步简化。

5.1.1调制信号的复基带表示

根据定义,通带信号是其单侧能量谱以非零载波频率fc为中心并且不延伸到DC的信号。通带信号或任何数字调制的RF波形表示为

认识到等式5.1中的正弦和余弦项是相对于彼此正交的分量,信号可以以复数形式表示为:

当以这种形式表示时,信号s(t)被称为真实的信号s(t)的复包络或复基带等效表示。分量sI(t)和sQ(t)分别称为同相分量和正交分量。比较等式5.1和5.3,很明显,在复基带等效表示中,载波频率被抑制。这大大降低了采样频率要求和模拟模型所需的内存。此外,公式5.1提供了一种将通带信号转换为其基带等效信号的实用方法,反之亦然[1],如图5.1†所示

5.1:从基带到通带的转换,反之亦然

5.2信道响应的复基带表示

在图5.2(a)所示的典型通信系统模型中,所表示的信号是真实的通带信号。数字调制信号s~(t)占据载波频率(fc)周围的带限频谱。将信道h~(t)建模为线性时不变系统,其本质上也是带限的。信道对调制信号的影响表示为线性卷积(由卷积算子表示)。然后,接收信号由下式给出:

相应的复基带等效值(图5.2(b))表示为:

5.2:通带信道模型及其基带等效

5.3用于幅度和相位调制的调制器

在以下各节中,以下数字调制器的离散时间基带模型将以模块化函数的形式实现。

·脉冲幅度调制(PAM)- mpam调制。

·脉冲移位键控调制(PSK)- mpsk调制。

·正交幅度调制(QAM)- mqam调制。

·正交频移键控调制(FSK)- mfsk调制。

为了保持连续性,在下面的部分中仅描述前三个调制器。用于MFSK调制的调制器在第5.5节中单独描述。

起草的函数将有一个通用的格式,我们可以起草一个包装函数来合并所有的模型,如下所示。包装器函数变得很方便,可以合并到更大的实现方案中。

5.3.1脉冲幅度调制(M-PAM

MPAM调制是没有正交分量(sQ = 0)的一维调制技术。所有信息都被编码在信号幅度中。一种用于M-PAM调制器的离散时间基带模型,传输从集合m∈{1,2,..M},每个发送的符号保存k比特的信息(k = log 2(M))。使用M-PAM信令对信息符号进行数字调制。用于生成M-PAM信号星座集的一般表达式由下式给出:

这里,M表示调制阶数,它定义了理想参考星座中的点数。M的值取决于参数k -我们希望在单个M-PAM符号中挤压的比特数。例如,如果在一个发送符号中压缩3个比特(k = 3),则M= 2K = 23 = 8,这导致8-PAM配置。对于M-PAM信令,星座点位于±1,±3,.,±(M−1),如图5.3所示。MPAM调制器的离散时间基带等效模型被编码为函数。

5.3.2相移键控调制(M-PSK

在相移键控中,所有的信息都被编码在载波信号的相位中。M-PSK调制器发送从集合m ∈{1,2,· · ·,M}中抽取的一系列信息符号。每个发送的符号保持k比特的信息(k = log 2(M))。使用M-PSK映射来调制信息符号。用于生成M-PSK信号集的一般表达式由下式给出:

5.3M-PAM星座图

这里,M表示调制阶数,并且它定义参考星座中的星座点的数量。Fm的值取决于参数k-我们希望在单个M-PSK码元中压缩的比特数。例如,如果我们希望在一个发送码元中挤入3比特(k=3),则M=2k=23=8,这导致8-PSK配置。M=2给出BPSK(二进制相移键控)配置。M=4的配置称为QPSK(正交相移键控)。参数A是幅度比例因子。使用三角恒等式,方程式5.7可分为余弦和正弦基函数,如下所示

这可以表示为I-Q平面上的同相和正交相位分量的组合,

将幅度归一化为A=1/√2,参考星座上的点将放置在单位圆上。基于该方程构造了MPSK调制器,M=4、8和16PSK调制的理想星座如图5.4所示。

5.4M-PSK星座图

5.3.3正交幅度调制(M-QAM

在MQAM调制中,信息比特被编码为信号的幅度和相位的变化。M-QAM调制器发送从集合m∈{1,2,.,M},每个发送的符号保存k比特的信息(k = log 2(M))。为了将错误的接收机判决限制为单个比特错误,对信息符号进行格雷编码。然后使用矩形M-QAM技术对信息符号进行数字调制,其信号集由下式给出:

卡诺图漫步与格雷码

在任何M-QAM星座中,为了将错误符号判决限制为单个比特错误,发射机星座中的相邻符号不应相差多于一个比特。这通常通过将输入符号转换为格雷编码符号,然后将其映射到期望的QAM星座来实现。但是通过使用查找表(LUT)方法可以完全跳过这个中间步骤,该查找表方法将输入符号适当地转换到星座图中的适当位置。

本文利用卡诺图的固有性质,为矩形对称(M = 4,16,64,256,· · ·)的格雷码MQAM星座图生成N× N(N = N × M)维的查找表。构造QAM星座的第一步是将表示消息符号的序列号转换为格雷码格式。下面给出将十进制数转换为格雷码的函数。

如果您熟悉卡诺图(K-Maps),则更容易识别K-Maps是基于Gray码构造的。根据K-Map构造的性质,相邻单元的地址仅相差一位。如果我们将给定的M-QAM星座图映射到K-Map上,并以一定的模式遍历每个单元的地址,则会给出格雷编码的M-QAM星座图。图5.5显示了4×4 K图上的两个点。这可以很容易地扩展到更高阶的任何K-Map配置。

5.5卡诺图漫步和格雷码

在行走类型1、3和4中,起点和终点的地址仅相差一位,并且相应的单元彼此相邻。实际上,该步可以循环以给出给予循环格雷码。但是在类型2的游走中,起始单元(0000)和结束单元(1101)彼此不相邻,因此使用这种游走模式生成的格雷码不是循环的。到目前为止,第1类步行是最简单的。我们所要做的就是改变每一行的行走方向,然后读取格雷编码的地址。在下一小节中给出的Matlab函数constructQAM.m实现了用于构造MQAM星座的步行类型1。

来自PAM星座的矩形QAM

还有其他星座形状(如圆形,三角形星座)比标准的矩形星座更有效[2]。对称矩形(正方形)星座是优选的实现方式,因为它们在实现调制和解调功能方面简单。

任何矩形QAM星座都等效于在正交载波上叠加两个PAM信号。例如,可以从两个4-PAM信号生成16-QAM星座点,类似地,可以从两个8-PAM信号生成64-QAM星座点。生成D维PAM信号的通用方程为

为了生成16-QAM,PAM的维度D被设置为D = 16 = 4。因此,为了构造M-QAM星座,PAM维度被设置为D = M/M。下面给出了用于基于卡诺图Gray code walk动态生成M-QAM星座点的Matlab代码。格雷编码的16-QAM和64-QAM的理想星座图如图5.6所示。

接下来给出实现MQAM调制器的包装器函数,该函数返回调制符号和参考星座点,这些符号和参考星座点可以在接收机中用于解调。图5.6给出了使用以下函数生成的信号空间星座图。

5.616-QAM64-QAM的信号空间星座图

MATLAB代码

function [s,ref]=modulate(MOD_TYPE,M,d,COHERENCE)
%Wrapper function to call various digital modulation techniques
% MOD_TYPE - 'PSK','QAM','PAM','FSK'
% M - modulation order, For BPSK M=2, QPSK M=4, 256-QAM M=256 etc..,
% d - data symbols to be modulated drawn from the set {1,2,...,M}
% COHERENCE - only applicable if FSK modulation is chosen
% - 'coherent' for coherent MFSK
% - 'noncoherent' for coherent MFSK
% s - modulated symbols
% ref - ideal constellation points that could be used by an IQ detector
switch lower(MOD_TYPE)
case 'bpsk'
[s,ref] = mpsk_modulator(2,d);
case 'psk'
[s,ref] = mpsk_modulator(M,d);
case 'qam'
[s,ref] = mqam_modulator(M,d);
case 'pam'
[s,ref] = mpam_modulator(M,d);
case 'fsk'
[s,ref] = mfsk_modulator(M,d,COHERENCE);
otherwise
error('Invalid Modulation specified');
end
function [s,ref]=mpam_modulator(M,d)
%Function to MPAM modulate the vector of data symbols - d
%[s,ref]=mpam_modulator(M,d) modulates the symbols defined by the
%vector d using MPAM modulation, where M specifies the order of
%M-PAM modulation and the vector d contains symbols whose values
%in the range 1:M. The output s is the modulated output and ref
%represents the reference constellation
m=1:1:M;
Am=complex(2*m-1-M); %All possibe amplitude levels
s = complex(Am(d)); %M-PAM transmission
ref = Am; %reference constellation
end
function [s,ref]=mqam_modulator(M,d)
%Function to MQAM modulate the vector of data symbols - d
%[s,ref]=mqam_modulator(M,d) modulates the symbols defined by the vector d
% using MQAM modulation, where M specifies order of M-QAM modulation and
% vector d contains symbols whose values range 1:M. The output s is modulated
% output and ref represents reference constellation that can be used in demod
if(((M~=1) && ~mod(floor(log2(M)),2))==0), %M not a even power of 2
error('Only Square MQAM supported. M must be even power of 2');
end
ref=constructQAM(M); %construct reference constellation
s=ref(d); %map information symbols to modulated symbols
end
function [s,ref]=mpsk_modulator(M,d)
%Function to MPSK modulate the vector of data symbols - d
%[s,ref]=mpsk_modulator(M,d) modulates the symbols defined by the
%vector d using MPSK modulation, where M specifies the order of
%M-PSK modulation and the vector d contains symbols whose values
%in the range 1:M. The output s is the modulated output and ref
%represents the reference constellation that can be used in demod
ref_i= 1/sqrt(2)*cos(((1:1:M)-1)/M*2*pi);
ref_q= 1/sqrt(2)*sin(((1:1:M)-1)/M*2*pi);
ref = ref_i+1i*ref_q;
s = ref(d); %M-PSK Mapping
end
function [ref,varargout]= constructQAM(M)
%Function to construct gray codes symbol constellation for M-QAM
% [ref]=constructQAM(M) - returns the ideal signaling points (ref) in a
% symmetric rectangular M-QAM constellation, where M is the level of QAM
% modulation. The returned constellation points are arranged such that the
% index of the points are arranged in a Gray-coded manner. When plotted,
% indices of constellation points will differ by 1 bit.
%
% [ref,I,Q]=constructQAM(M) - returns the ideal signaling points (ref) along
% with the IQ components breakup in a symmetric rectangular M-QAM constellation,
% where M is the level of QAM modulation. The returned constellation points are
% arranged such that the index of the points are arranged in a Gray-coded manner.
n=0:1:M-1; %Sequential address from 0 to M-1 (1xM dimension)
%------Addresses in Kmap - Gray code walk---------------
a=dec2gray(n); %Convert linear addresses to gray code
N=sqrt(M); %Dimension of K-Map - N x N matrix
a=reshape(a,N,N).'; %NxN gray coded matrix
evenRows=2:2:size(a,1); %identify alternate rows
a(evenRows,:)=fliplr(a(evenRows,:));%Flip rows - KMap representation
nGray=reshape(a.',1,M); %reshape to 1xM - Gray code walk on KMap
%Construction of ideal M-QAM constellation from sqrt(M)-PAM
D=sqrt(M); %Dimension of PAM constellation
x=floor(nGray/D);
y=mod(nGray,D);
Ax=2*(x+1)-1-D; %PAM Amplitudes 2m-1-D - real axis
Ay=2*(y+1)-1-D; %PAM Amplitudes 2m-1-D - imag axis
ref=Ax+1i*Ay; %assign complex numbers to reference
if nargout==2 %if only one variable argument is given
varargout{1}=Ax; %Real part (I)
elseif nargout==3 %if two variable arguments are given
varargout{1}=Ax; %Real part (I)
varargout{2}=Ay; %Imaginary part (Q)
end
clearvars; clc;close all;
%---------Input Fields------------------------
nSym=10^2;%Number of symbols to transmit
EbN0dB = -4:2:14; % Eb/N0 range in dB for simulation
MOD_TYPE='FSK'; %Set 'PSK' or 'QAM' or 'PAM' or 'FSK'
arrayOfM=[4]; %array of M values to simulate
%arrayOfM=[4,16,64,256]; %uncomment this line if MOD_TYPE='QAM'
COHERENCE = 'coherent';%'coherent'/'noncoherent'-only for FSK
plotColor =['b','g','r','c','m','k']; p=1; %plot colors
legendString = cell(1,length(arrayOfM)*2); %for legend entries
for M = arrayOfM
%-----Initialization of various parameters----
k=log2(M); EsN0dB = 10*log10(k)+EbN0dB; %EsN0dB calculation
SER_sim = zeros(1,length(EbN0dB));%simulated Symbol error rates
d=ceil(M.*rand(1,nSym));%uniform random symbols from 1:M
s=modulate(MOD_TYPE,M,d,COHERENCE);%(Refer Chapter 3)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值