基于FPGA的AGWN信号生成器
扫描二维码
随时随地手机看文章
在通信系统中分析计算系统抗噪声性能时,经常假定信道噪声为加性高斯型白噪声(AGWN)。本文就是通过分析AGWN的性质,采用自顶向下的设计思路,将AGWN信号分成若干模块,最终使用Verilog硬件描述语言,完成了通信系统中AGWN信号发生电路的设计和仿真,其实质上是设计一个AGWN信号发生器。该信号主要应用在数字通信系统中,所以只需要产生数字形式的AGWN信号,这样既便于信号产生,也便于在数字通信系统中运用。
1 AGWN信号的产生
AWGN信号指同时满足白噪声和高斯噪声的条件的信号。白噪声功率密度函数在整个频率域内是常数,即服从均匀分布。完全理想的白噪声不存在。高斯噪声指概率密度函数服从高斯分布(即正态分布)。AGWN信号其实就是一个具有确定功率谱密度和概率分布函数的随机信号。
由随机过程的理论可以知道,不相关随机序列的功率谱密度为常数(白噪声),伪随机序列(PN)就是这样的不相关序列。再由中心极限定理,独立同分布的随机变量的和收敛于高斯随机变量。这样就可根据PN序列的性质和中心极限定理来设计AWGN信号。
为简单起见,设计用8个PN序列发生器产生8个独立的伪随机序列(每个分为实部和虚部),根据中心极限定理,将8个信号相加之后的信号,更加接近于AG-WN信号,最后再乘以一个可变系数,就产生了可在数字通信系统中直接引用的AGWN信号。AGWN信号生成的总体框图如图1所示。
在FPGA内部产生n位并行伪随机序列,可由n个并行的结构相同但初始态互不相同的线性反馈移位寄存器(LFSR)产生。结构相同的LFSR在不同初始状态下产生的序列之间存在着一种移位关系,导致n个序列并非相互独立。如果所期望的序列长度为k,那么只有在保证任一状态在k次移位操作之内都不会与其他状态发生重复后,这种方法才是可取的。
在通信中,信号一般都表示为复数形式,所以该设计采用了实部与虚部的表示方法,AGWN信号分为实部与虚部,它们满足正交关系。
2 模块的设计与实现
设计主要分为三大模块:PN序列产生模块,产生符合高斯型白噪声伪随机序列;加法器模块,将产生的8个PN序列相加产生更加符合AGWN信号的伪随机序列;乘法器模块,将加法器产生的伪随机序列乘以一个可变系数,得到最终的符合数字信号的伪随机序列。
2.1 n个PN序列发生器的设计与实现
PN序列产生模块的主要功能就是产生PN序列。而PN序列中m序列又是周期最大,伪随机性最好的一种移位寄存器序列。m序列的自相关性、随机性特性很好地满足了AGWN信号的要求,故用其产生的序列可以来产生该设计中的信号。
要产生m序列,就要求移位寄存器的反馈链路满足本原多项式,由,n个并行的结构相同但初始态互不相同的线性反馈移位寄存器(LFSR)产生的序列在其周期足够长的情况下可以把它们看作是独立的。
设计中选取n=8,移位寄存器位数选取为25位,其m序列周期为33 554 431。其信号实部抽头选取3,0,虚部抽头选取3,2,1,0,分别对应PN序列的特征多项式。这样选取是因为一个移位寄存器的本原多项式有很多种,这里选取的两个抽头比较简单,对电路实现在资源、结构上都有优势。PN发生器选择8个是考虑到资源利用率方面的问题,这样选取可使资源利用率达到最大。
2.2 叠加电路设计与实现
根据中心极限定理,对于若干个独立同分布的随机变量,其和的极限分布是标准正态分布。这样将产生的8个序列叠加将产生符合高斯特性的序列。发生器串行输出的实部,虚部8个独立的码相异或。即每8个一位二进制数相异或。
2.3 乘法系数电路的设计与实现
2.3.1 设计思想
乘法器设计是FPGA设计中的一个难点,有很多种算法来实现它。可以采用移位加实现,在GF(28)域上乘法是这样进行的:乘以2相当于将该8位二进制数向高位移一位,如果此8位二进制数的最高位为1,则需要将移位结果异或8位二进制数00000001。还有一种方法就是,在代码中直接将乘法写成*,让综合工具自己去综合出可用的硬件电路。本文采用综合工具自带的模块电路。
2.3.2 电路实现
设计对时序要求较严格。乘法器电路必须用到三个寄存器以用来保存加法器串行输出的连续8个PN码,乘法系数和乘积。
在reset之后,PN序列发生电路已经产生第一个输出码,同时加法器也将结果运算出来,但这时乘数寄存器中只有最低位是有用的刚传进来的一位码,其他位还是无用信号,只有到了8个时钟信号之后,乘数寄存器中才保存了8个连续的有用的PN码,这时必须很快地进行乘法运算并将结果保存在乘积寄存器中,第9个时钟信号到来时乘法运算必须进行完毕,空闲出来的乘数寄存器用来寄存后面的8个连续的PN码,然后一直这样循环工作。8个乘数寄存器保存PN码时钟信号后,立即进行乘法运算并保存乘积,这就要求乘积寄存器空出来,为了空出乘积寄存器,第8个时钟到来时必须将乘积寄存器中的数据一位一位串行输出。乘积寄存器中有16位二进制数,这就要求一个时钟信号的2倍频信号作为乘积寄存器串行输出的时钟信号。基于以上问题的考虑,乘法电路用综合工具自己生成的8位乘法器,该模块电路中还要用到一个2倍频电路,这也用综合工具自带的模块电路。
3 综合、仿真结果
在QuartusⅡ集成了多种设计输入方式,并可使用Assignment Editor(分配编辑器)方便地设定管脚约束和时序约束,正确地使用时序约束可以得到设计的详细时序报告,便于分析设计是否满足时序要求。在整个设计流程中,完成了设计输入以及成功综合、布局布线,只能说明设计符合一定的语法规范,但其是否满足设计者的功能要求并不能保证,这需要通过仿真进行验证。
3.1 功能仿真
功能仿真(前仿真),不带时延信息,对电路物理行为进行仿真,速度较快。
图2是对顶层模块(AGWN模块)进行功能仿真后在不同时段的波形。由图中可以看出,输出序列具有随机性。
图3~图5分别是对各个分模块进行前仿真后的波形图。图3是8个PN序列发生器的仿真波形图。
图4是加法器模块的仿真波形:因为reset之后的第一个clk上升沿输出的是PN序列的第二个码字,第一个码字在reset同时已经输出,加法电路是一个组合电路,所以加法器的输出(addi/addq)在系统刚启动时不会出现不确定值。
图5是系统正常运行后乘法模块的仿真波形。值得注意的是在系统刚开始运转时,reset信号之后,由于PN序列发生器和加法器中的串行输出数据,还没有传递到乘法器模块中的被乘数寄存器(multiregi/multi-regq)和乘积寄存器中,这时从乘积寄存器中串行输出一些不确定值。
3.2 综合、布局布线
综合是指将HDL语言,原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接,并根据目标及要求优化所生成的逻辑,最后输出edf或vqm网表文件供布局布线用。
布局布线是将综合生成的逻辑网表适配到具体器件中,并把工程的逻辑和时序要求与器件的可用资源相匹配,它将每个逻辑功能分配给最好的逻辑单元位置,进行布线和时序,并选择相应的互边路径和管脚分配。
3.3 时序仿真
时序仿真也称后仿真,即通过加入综合后网表及时延信息对电路进行综合仿真,速度较慢。前后仿真与综合、布局布线的关系是一脉相承的,又相辅相成。功能仿真与综合、时序分析形成一个反馈工作过程,只有过程收敛之后的综合、布局布线等环节才有意义,孤立的功能仿真即使通过也是没有意义的,如果在时序分析中发现时序不满足需要更改代码,则功能仿真必须重新进行。图6是在QuartusⅡ中综合布局布线之后的时序仿仿真波形。由于用了2倍频电路,所以系统只用了一个时钟信号clk,a为8位的系数。为观察产生的AGWN的随机性,截取的图形是同一仿真在不同时段的波形图。
4 结 语
本文使用Verilog硬件设计语言,采用自顶下的设计思路,将整个设计分为了不同的小模块,分别实现每一个模块的功能,最终设计出AGWN信号产生的Ver-ilog电路,并实现了功能仿真、综合、布局布线、时序仿真。该电路实现了在数字通信系统中常用的AGWN信号,由于数字通信系统中用到的是数字信号,可以直接在数字通信系统中加载所产生的数字信号使用。如果需要用到模拟的AGWN信号,可将产生的数字信号通过A/D转换器转换为模拟信号再进行使用。