×
嵌入式 > 技术百科 > 详情

一种MQAM调制器的设计与实现

发布时间:2023-04-23 发布时间:
|

滤波器系数对称性、csd编码和数据选择器简化mqam调制器设计的新方法。用该方法在fpga上实现4、16、64、256qam调制器。实验证明该方法在硬件资源消耗和工作时钟频率方面都有较大的改善。

随着移动用户数量的不断增加和人们对图像等多媒体信息的通信要求,传统通信系统的容易已经越来越不能满足要求,而可用频谱资源有限,也不能靠无限增加频道数目来解决系统容易问题。确定一种高频谱利用率的调制方案能在很大程度上解决这一问题。多电平正交振幅调制(multilevel quadrature amplitude modulation)是一种具有高频谱利用率的调制技术。在无线通信中,它可以根据信道的衰落程度、信道流量等参数动态改变调制方式,提高信道利用率和信息传输速率。这种高效的数据传输方式实现的关键是fir(finite impulse response)滤波器和数字混频器的设计,它们通常限制了调制器的速率。本文采用基于csd(canonic signed digit)编码的fir滤波器,并利用fir滤波器系数对称性、数据选择器实现模块重用,简化mqam调制器设计,既节约了硬件资源又提高了器件的工作频率。1 mqam调制器设计

mqam调制框图如图1所示。

mqam和调制器由串并转换、iq分路、脉冲形成和调制混频单元组成。串并转换单元将串行的数据流转化为串行的数据流;iq分路单元根据不同的调制星座要求,将输入的信号分解成同相和正交分量(i路和q路信号分量);脉冲形成滤波器对i、q两路信号进行波形形成;调制混频单元对i、q两路信号进行混频、合成,形成调制信号输出。 1.1 串行转换

串并转换通过log2m级移位寄存器实现,调制方式控制串并转换单元的工作时钟频率。若数据输入的速率为f,则串并转换单元的工作频率是f/log2m。输入数据按log2m个比特一组起作用,输入的二进制数据分别进入log2m个信道,每个信道的比特率等于输入比特速率的1/log2m,log2m比特串行输入比特分离器,然后同时并行输出,信号进入iq分路单元。 1.2 iq分路单元

图2是iq分路的实现框图。l为输入和输出查找表的数据线组数,数值上等于mqam调制器的调制方式种数,如实现4、16、64、256qam调制器,则l=4。宽度为log2m的数据输入星座映射模块,根据调制方式控制字,星座映射的l组输出线中,相应的一组起作用,输入数据被映射为宽度为1/2log2m的数据输出,作为查找表阵列中对应查找表的地址输入。查找表存储的是与调制方式对应的数据,位宽n根据需要的精度设定。由于i、q两路查找表数据一样,可以控制在不同的时刻使星座映射单元映射输出不同的地址,使i、q两路使用同一个查找表,这样星座映射单元输出数据的频率为2f/log2m,i、q两路的输出相差一个查找表的工作时钟。最后,数据选择器根据控制字选择一组作为i分路单元的输出。

1.3 脉冲形式滤波器

脉冲形成滤波器采用fir滤波器,fir滤波器公式:

fir滤波器的系数是偶对称或者奇对称,即有:

f(n)=h(n-1-n)(偶对称)或者h(n)=-h(n-1-n) (奇对称) (2)

利用系数对称性减少乘法器数量的fir滤波器结构如图3所示。

在滤波器参数确定后,系数是一个固定值,所以滤波器的所有乘法都是固定系数乘法。实现固定系数乘法就可以用移位、加/减来代替并行乘法。任何滤波器系数都可表示成csd码的形式,这样加减法的次数就可以达到最少,对理想滤波器的系数进行csd量化可简化硬件实现时乘法器部分的结构。

二进制补码与csd编码的转换方法如下:

一个数x=x(n-1)x(n-2)…x(0),如果对于所有i=0,1,…,n-1,x(i)=0,1,或-1,且对于所有i=1,…,n-1,满足x(i)x(i-1)=0,则x=x(n-1)x(n-2)…x(0)称为y的csd编码表示。

一个数的csd表示中的非0比特位总是不相邻的,用一个2bit的二进制数表示一个csd码中的非0比特数,01代表+1,11代表-1(最高位通过符号位扩展实现),则可以将一个数 的csd编码表示转换为二进制csd编码(bcsd)表示。二者具有一一对应关系。根据上述原理,一种将二进制补码数变换得到其csd编码表示的过程描述为:首先将二进制补码表示转换为称为bcsd编码的表示,然后按照01代表+1,11代表-1相反的过程转换bcsd编码得到数的csd编码表示。一种将二进制补码数据转换得到bcsd编码的算法描述如下:

(1)初始化:输入x=x(n-1)x(n-2)…x(0);符号扩展x(n)=x(n-1);计数器置0(i=0);标志位置0(f=0)。

(2)循环执行下列语句:如果i>n-1,则跳转到(3),否则继续执行下列语句:

①如果f=0:如果x(i+1)x(i)=11,则f=1,i=i+2;如果x(i+1)x(i)=01,则f=0,i=j+2;否则,f=0,i=i+1。

②如果f=1:如果x(i+1)x(i)=00,则f=0,x(i)=1,i=i+2;如果x(i+1)x(i)=10,则f=1,x(i)=1,i=i+2;否则,f=0,x(i)=0,i=i+1。

③返回到(2)。

(3)如果f=1,则x(i)=!x(i);否则,x(i)=x(i).

(4)结束。

本文采用12抽头hamming形式的低通滤波器,截止频率为0.15。为了便于csd量化,将最大滤波器系数归一化,其余各系数也乘以相应的常数,滤波器特性没有改变。表1是滤波器系数,图4是原始系数与csd编码系数fir滤波器幅频响应图。

表1 均方根升余弦滤波器系数表

系数h(n) 系数值 归一化 csd编码
h(0),h(11) 0.002419 0.0166 2 -6
h(1),h(10) 0.009229 0.0633 2 -4
h(2),h(9) 0.031634 0.2169 2 -2 -2 -5
h(3),h(8) 0.071222 0.4883 2 -1 - 2 -6
h(4),h(7) 0.115973 0.7949 1 -2 -2+ 2 -5
h(5),h(6) 0.145847 1.0000 1

1.4 调制混频器的设计

混频器输出信号为:

s(k)=i(k)cos(2πkfc/fd)+q(k)sin(2πkfc/fd) (3)

其中,fd为dds的工作频率,当fd=4fc时,得到:

s(k)=i(k)cos(πk/2)+q(k)sin(πk/2) (4) 以上两式中,1≤k≤∞,cos(πk/2)可以表示为1,0,-1,0…的序列,sin(πk/2)可以表示为0,1,0,-1...的序列。设同相路i(f)的样本序列i(k)为i1,i2,i3...,正交路q(f)的样本序列q(k)为q1,q2,q3…,正交路q(f)的样本序列q(k)为q1,q2,q3…,则s(k)的样本序列为i2,i2,-i3,-q4,i5,q6…。这样,正交调制就可以简化成子滤波器和数据选择器构成。如图5所示,输出由每一个时刻使能不同的子滤波器得到。这种结构适合高速设计,而且占用硬件资源少,输出时钟是子滤波器时钟的2倍。

其中,n为滤波器的抽头数,又由上面的分析可以知道输出序列可以表示为:

h(0)x(n)+h(4)x(n-4)+h(8)x(n-8)+… (5)

h(1)x(n-1)+h(5)x(n-5)+h(9)x(n-9)+… (6)

-h(2)x(n-2)-h(6)x(n-6)-h(10)x(n-10)-… (7)

-h(3)x(n-3)-h(7)x(n-7)-h(11)x(n-11)-… (8)

综合(2)(5)(6)(7)(8)可以看出,(5)(8)可以用同一组滤波器实现,(6)(7)可以用同一组滤波器实现,滤波器组的输入是n/4组宽度为n的数据,输出是n/4组宽度为m的数据,m与查找表和滤波器系数的位宽有关,利用数据选择器选择一组滤波器输出送到加法器,最后即为调制混频输出,位宽x根据需要确定。图52 mqam调制器各部分工作时钟

mqam调制器各模块工作时钟关系如图6所示。

输入速率为f的串行数据流,经过工作时钟为f1=f/log2m的串并转换单元,得到速率为f1的并行数据流,经过查找表lut、数据选择器mux和延时单元delay之后的数据选择器以f1的时钟频率工作,输出数据分别进入两个滤波器组,以2f1时钟工作的数据选择器交替把滤波器组的输出送给后级加法器单元,完成整个调制过程。3 验证与实现

根据以上实现,用altera公司的stratixii系数器件ep2s30f484c3实现4、16、64、256qam调制器。将本文的mqam调制器设计方法和传统方法在硬件资源消耗和最高工作频率等方面进行比较,结果如表2所示。

表2 本文结构与传统结构滤波器性能比较

参 数 传统结构 本文结构
组合函数总数 673 105
寄存器总数 523 146
存储单元总位数 480 240
自适应查找表总数 816 184
最大工作时钟/mhz 251.76 370.23

由表2可以看出,本文结构较之传统结构在硬件资源消耗和最大工作频率方面有较大的改善。

本文讨论了mqam调制器在fpga上的一种简化高效的实现方法。其中,主要是系数对称的csd编码滤波器和简化混频器的设计,使得系统中不需要乘法器,而且实现模块复用。仿真实验表明,该方法可以提高系统的工作频率,而且消耗资源少,是较理想的mqam调制器设计方法。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题