主要内容

用于FPGA的高吞吐量信道化器

这个示例演示了如何使用多相滤波器组实现高吞吐量(每秒gigassamples, GSPS)的硬件信道化。

高速信号处理是雷达、宽带无线和回程等应用的要求。

现代adc能够以高达每秒几千兆采样的采样率对信号进行采样。但是最快的FPGA的时钟速度达不到这个采样率。fpga通常运行在数百兆赫兹。在FPGA上执行GSPS处理的一种方法是将标量处理转移到矢量处理,并以更低的时钟速率同时处理多个样本。许多现代fpga支持JESD204B金宝app标准接口,该接口接受GHz时钟率的标量输入,并在较低的时钟率下生成样本向量。

在这个例子中,我们展示了如何在Simulink中设计一个GSPS吞吐量的信号处理应用程序。金宝app输入数据通过JESD204B接口向量化,在FPGA中以较低的时钟速率可用。该模型是一个多相滤波器组,由一个滤波器和一次处理16个样本的FFT组成。采用多相滤波器组技术来减小由于泄漏和扇形损失造成的FFT误差。看到MATLAB中的高分辨率谱分析有关多相滤波器组的更多信息。

示例的第一部分实现了一个带有4抽头滤波器的多相滤波器组。

示例的第二部分使用配置为12-tap过滤器的Channelizer HDL Optimized块。Channelizer HDL优化块采用多相滤波器组技术。

多相滤波器组

modelname =“PolyphaseFilterBankHDLExample_4tap”;open_system (modelname);

InitFcncallback (Model Properties > callback > InitFcn)设置模型。这个模型使用512点FFT,每个频带有四个抽头滤波器。使用dsp。信道器系统对象™来生成系数。多相法的Channelizer对象产生512 × 4矩阵。每一行代表每个波段的系数。系数被转换成与输入信号相同字长的定点。

FFTLength = 512;h = dsp.Channelizer;h.NumTapsPerBand = 4;h.NumFrequencyBands = FFTLength;h.StopbandAttenuation = 60;系数= fi(多相(h), 1, 15日,14日“RoundingMethod”,“收敛”);

该算法需要512个滤波器(每个波段一个滤波器)。对于一个包含16个样本的向量输入,我们可以重复使用16个过滤器,共32次。

InVect = 16;ReuseFactor = FFTLength / InVect;

为了将滤波器合成为更高的时钟速率,我们将乘法器和系数组流水线化。这些值在“优化硬件注意事项”部分中进行了解释。

Multiplication_PipeLine = 2;CoefBank_PipeLine = 1;

数据源

输入数据由两个正弦波组成,200 KHz和250 KHz。

仿真结果

要可视化频谱结果,请打开频谱查看器并运行模型。

open_system ('多相滤波器组HDLEXSAMPLE4tap/FFT频谱查看器/功率谱查看器(FFT)');open_system (PolyphaseFilterBankHDLExample_4tap/PFB频谱查看器/功率频谱查看器(PFB));sim (modelname);

与仅使用FFT相比,多相滤波器组的功率谱查看器显示了功率谱的改善和频率泄漏和扇形的最小化。通过比较两种频谱,并在100 KHz和300 KHz之间放大,观察多相滤波器组在-40 dB以上的峰值比经典FFT要少。

优化硬件方面的考虑

  • 数据类型:数据字长影响结果的准确性和硬件中所使用的资源。在这个例子中,我们以全精度设计了滤波器。输入数据类型为fixdt(1, 15日,13),则输出为fixdt(1, 18岁,17).过滤系数的绝对值都小于1,所以每次乘法后数据不会增长,我们需要为每次加法添加一位。为了保持FFT的准确性,我们需要为每个阶段增加一位。这使得旋转因子相乘在每个阶段都变得更大。对于许多fpga来说,保持乘法大小小于18x18是可取的。由于512点FFT有9级,FFT的输入不能超过11位。通过对滤波系数的考察,我们观察到最大系数的前8位二进制数为零,因此我们可以将系数转换为fixdt(1、7、14)而不是fixdt(1,15,14).我们还观察到多相滤波器组内的数据类型块输出的最大值在二进制点之后有7个前导零,因此我们将滤波器输出转换为fixdt(1,11,17)相反,这将使FFT内的乘法器大小小于18乘18,并节省硬件资源。

  • 设计速度

  1. 国家控制块:国家控制(高密度脂蛋白编码器)块在同步模式下使用,为启用端口的延迟块生成硬件友好代码。

  2. 减少时钟使:模型被设置为在最小化时钟使能选项打开时生成HDL代码(在配置参数中选择> HDL代码生成>全局设置>端口>最小化时钟使能)。当型号为单速率时,支持此选项。金宝app时钟使能是一个全局信号,不建议用于高速设计。

  3. DSP模块在FPGA中的使用:为了将乘法器映射到FPGA中的DSP块中,乘法器应该是流水线的。在本例中,我们通过设置乘法_pipeline=2来流水线乘法器(之前2个延迟,之后2个延迟);这些流水线寄存器不应该有重置。为每个流水线将重置类型设置为“无”(右键单击延迟块,然后选择HDL代码>HDL块属性>重置类型=无)。

  4. ROM在FPGA中的使用:系数库内部的系数块是一个组合块。为了将这个块映射到ROM中,在块之后添加一个寄存器。延迟长度为CoefBank_PipeLine.将这些延迟的重置类型设置为none(右键单击Delay块并选择HDL Code > HDL块属性> reset type = none)。

生成HDL代码和测试平台

您必须拥有一个HDL Coder™许可证才能为这个示例模型生成HDL代码。使用此命令生成HDL代码。systemname = ' PolyphaseFilterBankHDLExample_4tap / PolyPhaseFilterBank ';makehdl (systemname);

使用此命令生成一个测试台,将HDL模拟的结果与Simulink模拟行为进行比较;金宝app

合成的结果

本设计采用ISE合成Xilinx Virtex 7 (xc7vx550t-ffg1158,速度等级3)。该设计实现了499.525 MHz的时钟频率(放置前和路由前)。在每个时钟16个样品,这转换为8 GSPS吞吐量。注意,这个子系统有大量的I/O端口,它不适合作为针对FPGA的独立设计。

HDL优化信道发生器

为了改善频率响应,使用更多的点击滤波器。以下型号使用了Channelizer HDL优化块,配置了12分频滤波器以改善频谱。使用内置的Channelizer HDL优化块可以更容易地更改设计参数。

modelname =“PolyphaseFilterBankHDLExample_HDLChannelizer”;open_system (modelname);

该模型使用工作空间变量来配置FFT和过滤器。在这种情况下,模型使用512点FFT和每个频带的12抽头滤波器。信道分配器的系数数为512个频带乘以每个频带12分频。的tf(h)方法生成所有系数。

InVect = 16;FFTLength = 512;h = dsp.Channelizer;h.NumTapsPerBand = 12;h.NumFrequencyBands = FFTLength;h.StopbandAttenuation = 60;coef12Tap =特遣部队(h);

数据源

输入数据由两个正弦波组成,200 KHz和206.5 KHz。频率比第一个例子更接近,以说明信道化器和四抽头滤波器在频谱分辨率上的差异。

仿真结果

要可视化频谱结果,请打开频谱查看器并运行模型。

open_system ('多相滤波器组HDL采样仪HDL通道发生器/PFB\U 4tap频谱查看器/功率谱查看器(PFB\U 4tap)');open_system (多相滤波器bankhdlexample_hdlchannelizer /Channelizer频谱查看器/功率频谱查看器(Channelizer_12tap));sim (modelname);

Channelizer_12tap模型的功率谱查看器显示,与之前模型中的4抽头滤波器相比,带有12抽头滤波器的多相滤波器组的功率谱有所改善。比较了信道化器和四抽头多相滤波器组的频谱结果。放大到100 KHz和300 KHz之间,观察到信道器只检测两个峰值,而4抽头多相滤波器组检测超过2个峰值。两个峰值是预期的结果,因为输入信号只有两个频率分量。