0 1等概分布的信号1.51 信号幅度0.50-0.505101520253035404550 图2 0、1等概分布的随机信号波形图
星座图映射
将等概分布的0、1信号映射到16QAM星座图上。每四个bit构成一个码子,具体实现的方法是,将输入的信号进行串并转换分成两路,分别叫做I路和Q路。再把每一路的信号分别按照两位格雷码的规则进行映射,这样实际上最终得到了四位格雷码。为了清楚说明,参看表1:
表1 两位格雷码的映射规律
两位0、1码 映射后(按格雷码) 0 0 0 1 1 1 1 0 源代码如下所示:
function [y1,y2]=Qam_modulation(x) %QAM_modulation
%============================== %对产生的二进制序列进行QAM调制
%=====首先进行串并转换,将原二进制序列转换成两路信号 N=length(x); a=1:2:N; y1=x(a); y2=x(a+1);
%=====分别对两路信号进行QPSK调制
%======对两路信号分别进行2-4电平变换 a=1:2:N/2; temp1=y1(a); temp2=y1(a+1);
y11=temp1*2+temp2;
temp1=y2(a); temp2=y2(a+1);
y22=temp1*2+temp2;
%=======对两路信号分别进行相位调制 a=1:N/4;
-3 -1 1 3 y1=(y11*2-1-4)*1.*cos(2*pi*a); y2=(y22*2-1-4)*1.*cos(2*pi*a); %========按照格雷码的规则进行映射 y1(find(y11==0))=-3; y1(find(y11==1))=-1; y1(find(y11==3))=1; y1(find(y11==2))=3;
y2(find(y22==0))=-3; y2(find(y22==1))=-1; y2(find(y22==3))=1; y2(find(y22==2))=3;
得到的星座图如图3所示,图上注明了每一个点对应的01序列。
16 QAM星座图54(1 1 1 1) 3(0 1 0 0) (0 1 1 0) (1 1 1 0) 2(0 1 0 1) (0 1 1 1) (1 1 1 0) (1 1 0 1) 10(1 0 1 1) -1(0 0 0 1) (0 0 1 1) (1 0 0 1) -2(0 0 0 0) (0 0 1 0) (1 0 1 0) -3(1 0 0 0) -4-5-5-4-3-2-1012345 图3 16QAM星座图
从上边的星座图上可以清楚的看到,任意相邻的两个点之间它们对应的4个bit中只有一个有差别,也就是格雷码的特点。而采用格雷码主要目的是当信噪比较大时,也就是系统的误码率比较低的情况下,当出现一个符号错误的情况下,往往只是这个符号中的一个bit位出现了误码,因此这个情况下误码率和误bit率是4:1,这一特性在后边的误码率计算的过程中会有应用。
插值
为了能够模拟高斯白噪声的宽频谱特性,以及为了能够显示波形生成器(平方根升余弦滤波器)的效果,所以在原始信号中间添加一些0点。具体实现是分别在信号的I路和Q路中,任意相邻的两个码字之间添加7个0。源代码如下所示:
function y=insert_value(x,ratio)
%=============================== %x是待插值的序列,ratio是插值的比例。 %两路信号进行插值
%首先产生一个长度等于ratio倍原信号长度的零向量 y=zeros(1,ratio*length(x));
%再把原信号放在对应的位置 a=1:ratio:length(y); y(a)=x;
对I路和Q路信号进行插值后的波形图如图4所示。
两路信号的波形图420-2-4010203040实部信号50607080420-2-4010203040虚部信号50607080 图4 经过插值后的两路信号波形图
波形成形(平方根升余弦滤波器)
为了避免相邻传输信号之间的串扰,多元符号需要有合适的信号波形。图1中的方波是在本地数字信号处理时常见的波形,但在实际传输时这种方波并不合适。根据奈奎斯特第一准则,在实际通信系统中一般均使接收波形为升余弦滚降信号。这一过程由发送端的基带成形滤波器和接收端的匹配滤波器两个环节共同实现,因此每个环节均为平方根升余弦滚降滤波,两个环节合成就实现了一个升余弦滚降滤波。实现平方根升余弦滚降信号的过程称为“波形成形”,通过采用合适的滤波器对多元码流进行滤波实现,由于生成的是基带信号,因此这一过程又称“基带成形滤波”。
平方根升余弦滤波器的冲激响应
基带平方根升余弦滤波器具有以下定义的理论函数
H(f)?1?1?当|f|?f(1??)2?11?fN?|f|??H(f)??sin()? 当f(1??)?|f|?f(1??) ??222f?N???当|f|?f(1??)H(f)?0??其中:fN?R1?s是奈奎斯特平率,?是滚降系数。 2Ts2下面给出平方根升余弦滤波器的冲激响应曲线,如图5所示。
平方根升余弦滤波器的冲激响应0.60.50.4Amplitude0.30.20.10-0.10510152025n (samples)30354045 图5 平方根升余弦滤波器的冲激响应曲线
从上图上不难看出来,平方根升余弦滤波器的冲激响应很显然的引入了符号间干扰(ISI)即它的冲激响应在相邻的抽样点上的值并不象升余弦滤波器那样恒为0。然而造成这一后果的原因在于,当我们引入平方根升余弦滤波器的时候,就是认为整个信道,也就是说,包括信号发送端的滤波器和信号接收端的滤波器,总体的效果是避免了符号间干扰(ISI),所以,单独看这每一个滤波器,勿庸置疑,它们都是存在着符号间干扰(ISI)的。
经过平方根升余弦滤波器后的信号
I路和Q路信号经过平方根升余弦滤波器后,成形后的波形如图6所示。 源代码如下
%x1、x2是两路输入信号,fd是信号信息位的频率,fs是信号的采样频率 function [y1,y2]=rise_cos(x1,x2,fd,fs) %生成平方根升余弦滤波器 [yf, tf]=rcosine(fd,fs, 'fir/sqrt'); %对两路信号进行滤波
[y1, to1]=rcosflt(x1, fd,fs,'filter/Fs', yf); [y2, to2]=rcosflt(x2, fd,fs,'filter/Fs', yf);
10倍载波调制
将通过成形滤波器后的信号调制到10倍于原频率的载波上。由于在仿真的过程中,只
4 滤波后的信号原始信号 20-2-4010203040实部信号506070804 滤波后的信号原始信号 20-2-4010203040虚部信号50607080 图6 通过平方根升余弦滤波器后的两路信号
能用离散的点来模拟连续信号,因而为了能够显示出一个正弦曲线,至少需要在一个正弦周期内采样到4个以上的点,这里,我们在一个周期内采10个点。假设最初的0、1信号的频率是1Hz,那么I路和Q路符号传输的频率是1/4Hz,而10倍频是建立在I路或Q路符号频率的基础上,也就是说,载频的频率是2.5Hz。按照前面的假设,那么相邻两个采样点之间的时间间隔是0.04s。而一个完整周期内的正弦波形的幅值是相同的,都是对应的这个周期内的I路和Q路线性叠加,调制后的信号为,
y(t)?I(t)cos2?fct?Q(t)sin2?fct 其中,fc为载波频率。
源代码如下
%载波调制
%x1,x2代表两路输入信号,f是输入信号的频率,hf是载波的频率 function [t,y]=modulate_to_high(x1,x2,f,hf)
%产生两个中间变量,用来存储插值后的输入信号 yo1=zeros(1,length(x1)*hf/f*10); yo2=zeros(1,length(x2)*hf/f*10); n=1:length(yo1);
%对输入信号分别进行插值,相邻的两个点之间加入9个点,且这9个点的值同第0个点的值相同 yo1(n)=x1(floor((n-1)/(hf/f*10))+1); yo2(n)=x1(floor((n-1)/(hf/f*10))+1); %生成输出输出信号的时间向量 t=(1:length(yo1))/hf*f/10; %生成载波调制信号
y=yo1.*cos(2*pi*hf*t)-yo2.*sin(2*pi*hf*t);
得到的调制到载频的信号波形如图7和图8所示,其中图7主要为了显示一个脉宽周期内的调制信号波形,图8则是显示载波信号的整体情况。