主要内容

为FPGA实现数字下变频器

这个例子展示了如何设计一个数字下变频器(DDC) LTE等无线电通信的应用程序,并生成HDL代码。

介绍

监护系统广泛应用于数字通信接收机射频(RF)转换或中频(IF)基带信号。监护系统操作变化信号到一个较低的频率和降低采样率,促进后续处理阶段。如DDC在本例中执行复杂的频率使用四级翻译后跟采样率转换过滤器链。首先设计的例子,DDC浮点DSP系统工具箱™功能。然后,每个阶段转换为定点,在仿真软件中使用®模型,生成synthesizable HDL代码。万博1manbetx本例使用这两个测试信号来演示和验证,DDC操作:

  • 一个正弦信号调制到一个32 MHz如果载体。

  • 一个LTE下行信号带宽为1.4 MHz调制到一个32 MHz如果载体。

这个例子比较了信号质量的输出浮点,DDC与定点监护系统的输出信号质量。

最后,提供了一个示例实现fpga的过滤器链,并合成结果。

这个示例使用DDCTestUtils一个助手类,其中包含函数生成刺激和分析监护系统的输出。有关更多信息,请参见DDCTestUtils.m文件。

监护系统结构

监护系统由数控振荡器(NCO),混合机,过滤器链的。过滤器链由一系列integrator-comb (CIC)杀害多人者,中投获得校正,中投公司补偿杀害多人者(杉木)halfband冷杉杀害多人者和最终的冷杉杀害多人者。

过滤器链的整体反应相当于一大批杀害滤波器具有相同的规范。然而,将滤波器分解到多个阶段力量的结果在一个更高效的设计,使用更少的硬件资源。

中投杀害多人者提供了一个大的初始大量毁灭因素,较低的利率使后续的过滤工作。中投补偿杀害多人者提高了光谱响应的补偿中投下垂而残杀由两个。halfband中间杀害多人者,最后杀害多人者实现了精确成就Fstop监护系统的特性。较低的采样率附近连锁意味着结束后过滤器可以通过共享乘数来优化资源的使用。

这个图显示了一个监护系统的框图。

监护系统的输入的采样率是122.88议员,和采样率是1.92 m / s的输出。这些利率给整体大批杀害64倍。LTE接收器使用1.92议员作为典型的采样率对细胞搜索和主信息块(MIB)复苏。监护系统过滤器是为了适合这个应用程序。监护系统优化运行时钟频率为122.88 MHz。

监护系统设计

本节解释如何使用浮点操作设计,DDC在MATLAB®和滤波器函数。

监护系统参数

这个例子的设计,DDC过滤器特点来满足这些规范给定输入采样率和载波频率。

傅氏国际= 122.88 e6;%,DDC输入的采样率FsOut = 1.92 e6;%,DDC产出的采样率Fc = 32 e6;%载波频率成就= 540年e3;%通带频率,相当于36 x15khz LTE副载波Fstop = 700年e3;%阻带频率美联社= 0.1;%通带纹波Ast = 60;%阻带衰减

中投杀害多人者

阶段第一个过滤器是一个中投杀害多人者,因为它能有效地实现大型大量毁灭的因素。CIC滤波器的反应类似于移动平均滤波器级联,但CIC滤波器不使用乘法或除法。因此,CIC滤波器有一个很大的直流增益。

cicParams。DecimationFactor = 8;cicParams。DifferentialDelay = 1;cicParams。NumSections = 3;cicParams。FsOut =国际/ cicParams.DecimationFactor;cicFilt = dsp.CICDecimator (cicParams.DecimationFactor,cicParams.DifferentialDelay cicParams.NumSections)% #好< * NOPTS >cicGain =获得(cicFilt)
cicFilt = dsp。CICDecimator属性:DecimationFactor: 8 DifferentialDelay: 1 NumSections: 3 FixedPointDataType:全精密cicGain = 512

因为中投获得是2的幂,增益系数的硬件实现容易正确使用移位操作。进行分析的目的,MATLAB中的示例代表获得校正一抽头dsp.FIRFilter系统对象™。

cicGainCorr = dsp.FIRFilter (“分子”1 / cicGain)
cicGainCorr = dsp。FIRFilter属性:结构:“直接形式”NumeratorSource:“财产”分子:0.0020 InitialConditions: 0使用能显示所有属性

显示CIC滤波器的幅度响应和没有获得校正用fvtool。进行分析,结合中投和增益校正过滤器进行过滤dsp.FilterCascade系统对象。中投过滤器在内部使用定点运算,所以fvtool情节量化和unquantized反应。

ddcPlots。cicDecim = fvtool (cicFilt,dsp.FilterCascade (cicFilt cicGainCorr),“Fs”,国际,国际);传奇(ddcPlots.cicDecim“中投没有校正”,“中投与增益校正”);

中投下垂补偿滤波器

因为CIC滤波器的幅度响应显著下垂通频带内的地区,平的例子使用FIR-based下垂补偿滤波器通带响应。下垂的补偿器和中投杀害多人者相同的属性。这个过滤器实现了大批杀害的两倍,所以你也必须指定过滤器bandlimiting特征。使用设计函数返回一个过滤系统对象与指定的特征。

compParams。R = 2;%中投公司赔偿大量毁灭的因素compParams。成就= Fstop;% CIC补偿通频带的频率compParams。FsOut = cicParams.FsOut / compParams.R;%的新采样率compParams。Fstop= compParams.FsOut - Fstop;% CIC补偿阻带频率compParams。美联社=美联社;%整体滤波器通带波纹一样compParams。Ast = Ast;%整体滤波器阻带衰减一样compSpec = fdesign.decimator (compParams.R,“ciccomp”,cicParams.DifferentialDelay,cicParams.NumSections,cicParams.DecimationFactor,“Fp,置,美联社,Ast”,compParams.Fpass、compParams.Fstop compParams.Ap compParams.Ast,cicParams.FsOut);compFilt =设计(compSpec,“SystemObject”,真正的)
compFilt = dsp。FIRDecimator属性:主要DecimationFactor: 2 NumeratorSource:“财产”分子:[-0.0398 -0.0126 0.2901 0.5258 0.2901 -0.0126 -0.0398]结构:直接形式的使用显示所有属性

情节的结合响应CIC滤波器(增益校正)和下垂的补偿。

ddcPlots。cicComp = fvtool (dsp.FilterCascade (cicFilt cicGainCorr compFilt),“Fs”傅氏国际,“传奇”,“关闭”);

Halfband杀害多人者

由两个halfband过滤器提供了高效的大批杀害。Halfband过滤器是有效率,因为大约一半的系数等于零,和这些乘数是排除在硬件实现。

hbParams。FsOut = compParams.FsOut / 2;hbParams。TransitionWidth = hbParams。FsOut - 2 * Fstop;hbParams。StopbandAttenuation = Ast;hbSpec = fdesign.decimator (2“halfband”,“Tw, Ast”,hbParams.TransitionWidth,hbParams.StopbandAttenuation,compParams.FsOut);hbFilt =设计(hbSpec,“SystemObject”,真正的)
hbFilt = dsp。FIRDecimator属性:主要DecimationFactor: 2 NumeratorSource:“财产”分子:[0.0089 0 0 0.2977 0.5000 0.2977 -0.0565 -0.0565……)结构:直接形式的使用显示所有属性

情节的反应,DDC halfband滤波器的输出。

ddcPlots。halfbandFIR = fvtool (dsp.FilterCascade (cicFilt cicGainCorr、compFilt hbFilt),“Fs”傅氏国际,“传奇”,“关闭”);

最后冷杉杀害多人者

最后的冷杉实现监护系统的详细的通带和阻带特性。这个过滤器已经比早期的FIR滤波器系数,而是因为它运行在一个较低的采样率可以使用一个高效的硬件实现资源共享。

加3 dB净空的阻带衰减,这样,DDC定点量化后仍然符合规范。这个值被发现通过使用经验fvtool

finalSpec = fdesign.decimator (2低通滤波器的,“Fp,置,美联社,Ast”成就,Fstop,美联社,Ast + 3, hbParams.FsOut);finalFilt =设计(finalSpec,“equiripple”,“SystemObject”,真正的)
finalFilt = dsp。FIRDecimator属性:主要DecimationFactor: 2 NumeratorSource:“财产”分子:[9.3365 e-04 0.0013 9.3466 -5.3189 e-04 e-04 -0.0022……)结构:直接形式的使用显示所有属性

可视化的整体反应级监护系统。

ddcFilterChain = dsp.FilterCascade (cicFilt cicGainCorr、compFilt hbFilt, finalFilt);ddcPlots。overallResponse = fvtool (ddcFilterChain,“Fs”傅氏国际,“传奇”,“关闭”);

定点转换

的频率响应浮点,DDC过滤器链现在符合规范。接下来,量化每个过滤阶段使用定点类型和分析他们确认过滤器链仍然符合规范。

过滤器量子化

这个示例使用16位系数,满足规范。使用少于18位系数的数量降至最低,DSP模块所需的FPGA实现。监护系统的输入过滤器链与15分16位数据位。滤波器输出的是18位值,提供额外的空间在中间和精确的信号。

中投杀害多人者的选择“最低部分单词长度”定点数据类型选项自动优化内部基于输出字和字其他中投参数。

cicFilt。FixedPointDataType =“最低部分单词长度”;cicFilt。OutputWordLength = 18;

配置定点获得校正和FIR-based系统对象的属性。使用默认的对象RoundingMethodOverflowAction属性值(“地板”“包装”分别)。

%中投获得校正cicGainCorr。FullPrecisionOverride = false;cicGainCorr。CoefficientsDataType =“自定义”;cicGainCorr。CustomCoefficientsDataType = numerictype (fi (cicGainCorr.Numerator 1 16));cicGainCorr。OutputDataType =“自定义”;cicGainCorr。CustomOutputDataType = numerictype (1、18、16);%中投下垂补偿compFilt。FullPrecisionOverride = false;compFilt。CoefficientsDataType =“自定义”;compFilt。CustomCoefficientsDataType = numerictype(15)[], 16日;compFilt。ProductDataType =“充分精确”;compFilt。AccumulatorDataType =“充分精确”;compFilt。OutputDataType =“自定义”;compFilt。CustomOutputDataType = numerictype ([]、18、16);% HalfbandhbFilt。FullPrecisionOverride = false;hbFilt。CoefficientsDataType =“自定义”;hbFilt。CustomCoefficientsDataType = numerictype(15)[], 16日;hbFilt。ProductDataType =“充分精确”;hbFilt。AccumulatorDataType =“充分精确”;hbFilt。OutputDataType =“自定义”;hbFilt。CustomOutputDataType = numerictype ([]、18、16);%冷杉finalFilt。FullPrecisionOverride = false;finalFilt。CoefficientsDataType =“自定义”;finalFilt。CustomCoefficientsDataType = numerictype(15)[], 16日;finalFilt。ProductDataType =“充分精确”;finalFilt。AccumulatorDataType =“充分精确”;finalFilt。OutputDataType =“自定义”;finalFilt。CustomOutputDataType = numerictype ([]、18、16);

定点分析

检查量化效果fvtool。你可以单独分析过滤器或级联。fvtool显示了量化和unquantized(参考)响应功能。例如,此图显示了量化最后冷杉过滤阶段的影响。

ddcPlots。quantizedFIR = fvtool (finalFilt,“Fs”hbParams.FsOut,“算术”,“固定”);

重新定义ddcFilterChain级联对象包括个人的定点属性过滤器。然后,用fvtool分析整个过滤器链和确认量子化,DDC仍然符合规范。

ddcFilterChain = dsp.FilterCascade (cicFilt,cicGainCorr、compFilt hbFilt finalFilt);ddcPlots。quantizedDDCResponse = fvtool (ddcFilterChain,“Fs”傅氏国际,“算术”,“固定”);传奇(ddcPlots.quantizedDDCResponse“如DDC过滤器链”);

HDL-Optimized仿万博1manbetx真软件模型

下一步的设计流程是实现DDC仿真软件使用块支持HDL代码生成。万博1manbetx万博1manbetx

模型配置

MATLAB的模式依赖于变量和设置工作空间配置块。它使用相同的过滤器链变量前面定义的例子。接下来,定义区域特征和输入信号。本例使用这些特征配置区域块。

指定所需的频率分辨率和计算所需的蓄电池的比特数来实现所需的分辨率。设置所需的伪自由动态范围,然后定义量化蓄电池部分的数量。以区域使用的量化输出蓄电池解决正弦查找表。还计算出相位增量,以区域使用生成指定的载波频率。NCO适用阶段发抖在量子化的蓄电池部分删除。

以区域。Fd = 1;以区域。AccWL = nextpow2(国际/ nco.Fd) + 1;SFDR = 84;以区域。QuantAccWL =装天花板((SFDR-12) / 6);以区域。PhaseInc =圆((fc * 2 ^ nco.AccWL) /国际);以区域。NumDitherBits = nco.AccWL-nco.QuantAccWL;

监护系统的输入来自ddcIn变量。现在,分配一个虚拟价值ddcIn模型可以计算它的数据类型。在测试过程中,ddcIn提供输入数据到模型中。

ddcIn = 0;% #好< NASGU >

您可以创建一个纸浆包信号设置FrameSize1,输出每个样品收到。输入采样频率或更高功率减少考虑,这种设计也可以实现框架处理,FrameSize应相应修改。在本例中,我们显示的情况FrameSize为4。

FrameSize = 4;

模型结构

这个图显示了DDC仿真软件建立模型的顶层。万博1manbetx模型导入ddcIn变量从MATLAB工作区通过使用一个信号从工作区块,将输入信号转换为16位值,并应用信号监护系统。你可以从生成HDL代码HDL_DDC子系统。

modelName =“DDCforLTEHDL”;open_system (modelName);set_param (modelName“SimulationCommand”,“更新”);set_param (modelName“开放”,“上”);

HDL_DDC子系统实现了DDC过滤器。首先,以区域块产生一个复杂的矢量载波频率。这个信号去繁殖的混合器与输入信号矢量。然后,混频器的输出传递给过滤器链和摧毁1.92议员。

set_param ([modelName' / HDL_DDC '),“开放”,“上”);

以区域块参数

NCO的块模型中配置中定义的参数以区域结构。图中显示的两个标签NCO块参数对话框。

中投公司大批杀害并获得修正

舞台是一个中投杀害多人者,第一个过滤器与中投杀害多人者块实现的。块参数设置为cicParams结构的值。实现增益校正、模型选择增益校正参数。图像显示了中投杀害多人者块的参数。

模型配置过滤器使用相应的系统对象的属性。中投补偿,halfband大量毁灭,最终大量毁灭过滤器操作有效样本率低于时钟频率的因素为8,16和32。通过使用该模型实现了这些样本率有效的输入信号指示哪些样品是有效的在每个率。过滤器链中的信号都有相同的模型样品时间。万博1manbetx

中投补偿,Halfband大量毁灭,最终大量毁灭过滤器是每个实现一个冷杉杀害多人者。通过设置最小数量的有效输入样本之间的周期参数,我们可以使用无效的输入样本之间的周期。例如,中投公司的每一个输入补偿杀害多人者之间的间距8,等于大量毁灭的因素。所以杀害多人者有中投补偿最小数量的有效输入样本之间的周期设置为装天花板(cicParams.DecimationFactor / FrameSize),等于2周期。中投的图像显示了块参数补偿大量毁灭。

冷杉杀害多人者块及时充分重用乘数超过您所指定的时钟周期数。为FrameSize4,中投公司赔偿大量毁灭过滤器与复杂的输入数据使用4乘数。终于被赶下台Halfband使用4乘数,最终才使用12乘数。为FrameSize1,因为输入间隔中投补偿大量毁灭和Halfband大批杀害比滤波器长度大,这两个杀害多人者只需要2乘数。最后才需要4乘数。

正弦信号对载波测试和验证

测试监护系统调节一个40 kHz正弦信号载波频率和调制正弦波通过监护系统。然后,测量假-免费动态范围(SFDR)产生的语气和NCO的SFDR输出。情节的SFDR NCO和定点监护系统的输出。

%初始化随机种子之前执行任何模拟。rng (0);% 40 kHz生成一个测试的语气,调制到载波上。ddcIn = DDCTestUtils.GenerateTestTone (40 e3, Fc);%的测试信号解调浮点监护系统。ddcOut = DDCTestUtils.DownConvert (ddcIn、国际俱乐部、ddcFilterChain);释放(ddcFilterChain);%解调测试信号通过运行仿真软件模型。万博1manbetx= sim (modelName);NCO %测量SFDR,浮点DDC输出,和定点%,DDC输出。结果。sfdrNCO = sfdr(真正的(out.ncoOut),国际);结果。sfdrFloatDDC = sfdr(真正的(ddcOut), FsOut);结果。sfdrFixedDDC = sfdr(真正的(out.ddcFixedOut), FsOut);disp (“SFDR测量”);disp ([“浮点,DDC SFDR:“num2str (results.sfdrFloatDDC)“数据库”]);disp ([“定点NCO SFDR:”num2str (results.sfdrNCO)“数据库”]);disp ([“优化的定点,DDC SFDR:”num2str (results.sfdrFixedDDC)“数据库”]);流(换行符);%绘制SFDR NCO和定点监护系统的输出。ddcPlots。以区域OutSDFR = figure; sfdr(real(out.ncoOut),FsIn); ddcPlots.OptddcOutSFDR = figure; sfdr(real(out.ddcFixedOut),FsOut);
SFDR测量浮点,DDC SFDR: 291.4184 dB定点NCO SFDR: 83.0306 dB优化定点,DDC SFDR: 110.386 dB

LTE信号测试

您可以使用一个LTE测试信号监护系统的执行更严格的测试。生成一个兼容标准LTE波形通过使用LTE工具箱™函数。然后,降频转换器波形与监护系统模型。使用LTE工具箱函数测量误差向量幅度(维生素)产生的信号。

rng (0);%执行这个测试只有如果你有LTE工具箱的产品。如果许可证(“测试”,“LTE_Toolbox”)%生成调制LTE测试信号通过使用LTE工具箱函数。[ddcIn, sigInfo] = DDCTestUtils.GenerateLTETestSignal (Fc);%降频转换器信号与浮点监护系统。ddcOut = DDCTestUtils.DownConvert (ddcIn、国际俱乐部、ddcFilterChain);释放(ddcFilterChain);%降频转换器信号与仿真软件模型,然后测量和绘制万博1manbetx%的维生素与浮点和定点的结果。用零填充的输入%代表传播延迟和返回完整的结果。ddcIn = [ddcIn; 0 (2480 * FrameSize, 1)];= sim (modelName);结果。evmFloat = DDCTestUtils.MeasureEVM (sigInfo ddcOut);结果。evmFixed = DDCTestUtils.MeasureEVM (sigInfo out.ddcFixedOut(1:长度(ddcOut)));disp (LTE误差向量幅度(维生素)测量的);disp ([挣值管理的浮点,DDC RMS都:“num2str (results.evmFloat.RMS * 100, 3)“%”]);disp ([挣值管理的浮点,DDC峰值都:“num2str (results.evmFloat.Peak * 100, 3)“%”]);disp ([的定点,DDC RMS维生素:num2str (results.evmFixed.RMS * 100, 3)“%”]);disp ([挣值管理的定点,DDC峰值都:“num2str (results.evmFixed.Peak * 100, 3)“%”]);流(换行符);结束
LTE误差向量幅度浮点,DDC RMS维生素(维生素)测量:0.633%浮点DDC峰值维生素:2.44%定点,DDC RMS维生素:0.731%定点,DDC维生素:峰值2.69%

HDL代码生成和FPGA实现

生成这个例子中你必须有高密度脂蛋白HDL代码编码器™产品。使用makehdlmakehdltb命令来生成和高密度脂蛋白HDL代码的试验台HDL_DDC子系统。合成了DDC在Xilinx®Zynq®-7000 ZC706评估板。表显示了帖子place-and-route资源利用的结果。设计了计时的时钟频率331 MHz。

T =表(分类({附近地区的;“LUTRAM”;“FF”;“布莱姆。”;“DSP”}),分类({“4341”;“383”;“8248”;“2.0”;“36”}),“VariableNames”,{“资源”,“使用”})
T = 4341 x2词根表资源使用________ _____ LUT LUTRAM 383 FF 8248 BRAM 2.0 DSP 36