主要内容

AWGN生成器的HDL实现

这个例子展示了一个可加性高斯白噪声(AWGN)发生器的实现,它针对HDL代码生成和硬件实现进行了优化。AWGN的硬件实现加速了使用AWGN信道的无线通信系统的性能评估。在本例中,Simulink®模型接受信噪比金宝app(SNR)值作为输入,并生成带有有效信号的高斯随机噪声。该示例支持信噪比输入范围金宝app为-20到31 dB,步长为0.1 dB。

现代无线通信系统包括许多不同的仿真参数,如信道带宽、调制类型和码率。利用这些仿真参数对这些系统进行性能评估是一个瓶颈。fpga的硬件功能可以加快模拟速度。

模型架构

%使用该命令打开HDLAWGNGenerator模型。
modelname =“HDLAWGNGenerator”;open_system (modelname);

本例演示了基于Box-Muller方法的AWGN生成器的实现。Box-Muller方法由于其硬件友好的结构和恒定的输出速率被广泛应用于高斯噪声的产生。模型的顶层结构包括这三个子系统。

  • 信噪比到线性尺度变换器

  • 单位方差高斯噪声发生器

  • 具有所需方差的高斯噪声发生器

%使用该命令打开AWGNGenerator模型内的子系统。
open_system ([modelname' / AWGNGenerator ']);

信噪比到线性尺度变换器

dBtoLinearConverter子系统将以dB为单位的信噪比值作为输入,并将其转换为线性尺度的噪声方差。该噪声功率用于将高斯噪声的输出与单位方差相乘。这种查找表方法用于将以dB为单位的信噪比值转换为以线性尺度为单位的噪声功率值。在转换过程中,假设信号功率为1。该子系统的时延为1个时钟周期。

单位方差高斯噪声发生器

GaussianNoiseWithUnitVar子系统采用Box-Muller方法产生单位方差的高斯噪声。Box-Muller方法使用两个均匀分布的随机变量,通过一系列对数、平方根、正弦和余弦运算,生成两个正态分布的随机变量,如图所示。这两个均匀分布的随机变量是用Tausworthe算法生成的。

统一随机数的HDL实现

Tausworthe Uniform Random Number Generator模块用于生成两个32位的统一随机整数。将三个基于线性反馈移位寄存器(LFSR)的均匀随机数发生器(urng)组合在一起,得到一个具有改进统计特性的32位均匀随机数。这个实现需要两个种子:ta篡位ng1和ta篡位ng2。的whdlexamples.hdlawgnGen_init.m脚本文件初始化这些种子。

ConcatandExtract子系统接受32位统一随机整数,一个而且b,生成两个均匀随机数,情况而且u1,在[0,1)范围内,位宽分别为48和16。情况的32位值拼接一个更高的16位b.均匀随机数u1是通过提取?的下16位生成的b

open_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar / TausUniformRandGen ']);close_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar / TausUniformRandGen ']);open_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar TausUniformRandGen / TausURNG1 ']);close_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar TausUniformRandGen / TausURNG1 ']);

HDL对数的实现

HDL对数子系统基于分段线性多项式方法对近似对数进行求值。该模块有3个时钟周期的延迟。HDL对数的实现涉及这三个步骤。

  1. 范围缩减-在这一步中,输入的原始范围[0,1 -2^(- 48))被缩减到更方便的更小的范围[1,2)。在下一步中,对数函数在缩减的范围上近似。

  2. 函数求值-对数函数在范围[1,2)中使用二次多项式逼近256个等距段。二次多项式的系数是用polyfit函数。这些系数存储在一个查找表中,该查找表使用函数求值块输入的前8位进行索引。

  3. 范围重建-函数评估的结果被扩展回原始范围。位左移位操作用于范围重构和实现2 *日志函数。

运行此命令打开HDL对数子系统。

open_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar / logImplementation /日志”]);

实现HDL的平方根

HDL平方根子系统基于分段线性多项式方法求近似平方根。该模块的延迟时间为2。HDL平方根的实现涉及这三个步骤。

  1. 范围缩减-模块的输入数据类型为Fi (0,31,24).这个范围被缩小到一个更小的范围[1,4)。在下一步中,平方根函数在缩小的范围上近似。

  2. 函数计算-平方根函数在[1,2)和[2,4)范围内的64个等距段上使用一级多项式逼近。一阶多项式的系数存储在一个查找表中,该查找表使用函数计算块输入的前6位进行索引。

  3. 范围重建-使用左移操作将函数评估的结果扩展回原始范围。

close_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar / logImplementation /日志”]);open_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar SqrtImplementation / SqrtEval ']);

HDL的正弦和余弦的实现

正弦或余弦函数的HDL优化实现使用查找表方法。而且因为是否使用现有的正弦HDL优化和余弦HDL优化(高密度脂蛋白编码器)在HDL编码器/查找表库中的块。

close_system ([modelname' / AWGNGenerator / GaussianNoiseWithUnitVar SqrtImplementation / SqrtEval ']);

具有所需方差的高斯噪声发生器

GaussianNoiseWithReqVar子系统将单位方差的高斯噪声转换为所需方差的高斯噪声。这个子系统接受来自dBToLinearConvertor和GaussianNoiseWithUnitVar子系统的输入。从dBToLinearConvertor得到的线性噪声方差与从GaussianNoiseWithUnitVar得到的正态分布随机变量相乘。

结果和图

whdlexamples.hdlawgnGen_init.m脚本文件用于指定信噪比范围,生成所需数量的噪声样本,初始化ta篡位ng1和ta篡位ng2子系统的种子,并生成用于HDL log和平方根函数评估的系数。

whdlexamples.hdlawgnGen_init.m脚本文件是HDLAWGNGenerator模型的初始化函数。这个函数生成输入数据,并初始化tasurng的种子和函数求值的系数。模拟HDLAWGNGenerator.slx在信噪比为5 dB和15 dB时,生成10^6个有效AWGN样本。该实现是流水线化的,以最大化合成频率,生成初始延迟为11的AWGN。绘制AWGN输出的概率密度函数。

延迟= 11;NumOfSamples = 10^6;模拟模型open_system (“HDLAWGNGenerator”);set_param (gcs,“SimulationMode”“加速”);流('\n模拟HDL AWGN生成器…\n');out金宝appSimulink = sim(“HDLAWGNGenerator”“ReturnWorkspaceOutputs”“上”);流(\n模拟完成。\n);awgn金宝appSimulink = outSimulink.awgnOut;% Plot PDF图;标题(“AWGN真实部分的PDF”);持有直方图(真实(awgnSimulink金宝app(延迟+ 1:NumOfSamples +延迟),500年,...“归一化”“pdf”“BinLimits”(2 - 2),“FaceColor”“蓝”...“EdgeColor”“没有”);直方图(真实(awgnSimulink金宝app (NumOfSamples +延迟+ 1:结束),500年,...“归一化”“pdf”“BinLimits”(2 - 2),“FaceColor”“黄色”...“EdgeColor”“没有”);传奇(5 dB信噪比信噪比15 dB);图;标题(AWGN虚部PDF);持有直方图(图像放大(awgnSimuli金宝appnk(延迟+ 1:NumOfSamples +延迟),500年,...“归一化”“pdf”“BinLimits”(2 - 2),“FaceColor”“蓝”...“EdgeColor”“没有”);直方图(图像放大(awgnSimuli金宝appnk (NumOfSamples +延迟+ 1:结束),500年,...“归一化”“pdf”“BinLimits”(2 - 2),“FaceColor”“黄色”...“EdgeColor”“没有”);传奇(5 dB信噪比信噪比15 dB);
模拟HDL AWGN生成器…模拟完成。

验证

比较AWGN Simulink模型的输出与HDL等效AWGN 金宝appMATLAB®函数的输出。

NumOfSamples = 1000;% MATLAB输出流('\n模拟MATLAB HDL AWGN生成器进行比较…\n');awgnMatlab = whdlexamples.hdlawgn (snrdBSimInput (1: NumOfSamples) seedsURNG1, seedsURNG2);流(\n模拟完成。\ n”比较MATLAB和Simulink输出金宝app图;ax =轴(“字形大小”, 20);情节(1:1000真实([awgnSimul金宝appink(延迟+ 1:NumOfSamples +延迟)awgnMatlab]));包含(ax,“样本数量”);ylabel (ax,“AWGN的实部”);标题(ax,MATLAB和Simulink输出的比较(实部)金宝app);传奇(模金宝app型输出的MATLAB输出的);图;ax =轴(“字形大小”, 20);情节(1:1000图像放大([awgnSim金宝appulink(延迟+ 1:NumOfSamples +延迟)awgnMatlab]));包含(ax,“样本数量”);ylabel (ax,“AWGN的虚部”);标题(ax,MATLAB和Simulink输出的比较(虚部)金宝app);传奇(模金宝app型输出的MATLAB输出的);
仿真MATLAB HDL AWGN生成器的比较…模拟完成。

HDL代码生成

要检查和生成本例中引用的HDL代码,您必须拥有HDL Coder™许可证。

要生成HDL代码,请在MATLAB命令提示符中输入此命令。

makehdl (“HDLAWGNGenerator / AWGNGenerator”

为了生成一个测试平台,在MATLAB命令提示符中输入这个命令。

makehdltb (“HDLAWGNGenerator / AWGNGenerator”

在本例中,为AWGNGenerator模块生成的HDL代码用于Xilinx®Zynq®-7000 ZC706板。实现结果如表中所示。

参考文献

1.J.D. Lee, J.D. Villasenor, W. Luk和P.H.W. Leong。“使用Box-Muller方法的硬件高斯噪声发生器及其误差分析”,659-71。IEEE 2006。https://doi.org/10.1109/TC.2006.81