主要内容

HDL代码生成的过滤OFDM发射机(F-OFDM)

OFDM (F-OFDM)过滤器适用于过滤后的符号传输线的发射机来提高带宽,同时保持复杂的正交性符号。这个例子实现了一个发射机F-OFDM HDL代码生成。这个例子展示了如何从一个MATLAB®参考模型到一个HDL-optimized仿真软件®模型。金宝app它包括将双重转换为定点类型和最小化资源使用FPGA的设计。

F-OFDM和OFDM调制对比OFDM和F-OFDM波形。

系统参数

设置所需的F-OFDM属性。

NDLRB = 108;WaveformType =“F-OFDM”;SubcarrierSpacing = 60 * 1 e3;%赫兹CellRefP = 1;CyclicPrefix =“正常”;FilterLength = 513;ToneOffset = 2.5000;CyclicExtension =“关闭”;

调用h5gOFDMInfo函数计算F-OFDM参数。方法计算FFT长度、循环前缀长度和副载波的数量。

genb =结构(“NDLRB”NDLRB,“WaveformType”WaveformType,“SubcarrierSpacing”SubcarrierSpacing * 1 e - 3,“FilterLength”FilterLength,“ToneOffset”ToneOffset,“CellRefP”CellRefP,“CyclicPrefix”CyclicPrefix,“CyclicExtension”,CyclicExtension);信息= h5gOFDMInfo (genb);

生成一个网格的输入数据

QAMModulation =64 qam;TotSubframes = 5;[txgrid, bitsIn] = generateOFDMGrid (genb,信息,QAMModulation TotSubframes);

参考MATLAB模型

浮点F-OFDM参考模型运行系统和阴谋。利用参考模型比较的定点模型支持HDL代码生成。金宝app

[txSig_ref, txinfo] = h5gOFDMModulate (genb txgrid);

通过添加噪声的信号模型的通道。

snrdB = 18;S = RandStream (“mt19937ar”,“种子”1);rxSig_ref = awgn(双(txSig_ref), snrdB,“测量”,年代);

接收到的信号必须同步和一致。在现实情况下,接收机包括符号同步。在这个例子中,接收方纠正的转变框架由发射机过滤器$ \压裂{FilterLength} {2} $

rxSig_ref_sync = circshift (rxSig_ref地板(FilterLength / 2));

恢复数据,计算误码率,并显示星座。

[constDiagRx,误码率,rxgrid_ref] = FOFDM_Receiver (rxSig_ref_sync、bitsIn genb,QAMModulation,“F-OFDM接待(REF)”);disp ([“F-OFDM接待(REF)”,的误码率= 'num2str (ber) (1)“在信噪比= 'num2str (snrdB)“数据库”]);constDiagRx (rxgrid_ref (:));
F-OFDM接待(REF)数量在信噪比= 0.0094568 = 18分贝

带外辐射的光谱显示明显改善的子带信号,和增加有效带宽。

FOFDMTransmitterHDLSpectrum (txSig_ref txinfo genb,“F-OFDM频谱(REF)”);

金宝app仿真软件定点模型

模型=“FOFDMTransmitterHDLExample_FixPt”;load_system(模型);open_system([模型,' / F-OFDM ']);

从模型生成HDL,定点数据类型必须使用而不是双。64 - QAM,至少6位+ 1符号位是必要的。然而,实现合理的数量,输入单词长度必须增加,考虑到FPGA的限制。在fpga的输入字长有限乘数。例如,Xilinx的DSP48 18 * 25-bit乘数。对于一个优化设计,选择一个字,这样所有乘数FFT和过滤小于18 * 25-bit乘数。在这个例子中,FFT块使用“蝴蝶输出除以两个“选项。输入字长16位。

您可以运行仿真软件模型与浮点数据金宝app通过设置字= 1。然而,这种模式不支持HDL代码生成。金宝app

字= 16;

设置分位字- 2位的数量1 < =符号< = 1。

FRACTIONLENGTH =字- 2;

生成OFDM符号

传输线的输入数据被认为是一个合适的OFDM符号和驻留在内存(OFDM符号的子系统模型)可以理解F-OFDM子系统。因此,传感器的采样率取决于内存和FPGA时钟频率的数据可用性。如果数据是可用的,那么采样率是有限的

时钟\ _frequency * \美元压裂{FFTLength} {(FFTLength +马克斯(CyclicPrefixLength))} $

另一方面,计算所需的采样率SubcarrierSpacing * FFTLength美元这等于122.88议员的例子。达到122.88议员应该至少135.36 MHz时钟频率。

ifftin = generateOFDMSymbol (txgrid,信息,genb);

滤波器的设计

适当的过滤器应该有一个平坦的通带副载波和尖锐的过渡到最小化乐队。它也需要足够的阻带衰减。一个原型滤波器$ w = w_ {1} * w_ {2} $使用,美元w_ {1} $是一个SINC函数

美元w_ {2} = o。5 * (1 + cos(\压裂{2 * \π* n} {n})) $

fnum = generateFilterCoef (genb、信息);

模拟

设置和运行模式。注意,由于系统延迟,需要模拟模型不再收集足够的数据。

Nfft = info.Nfft;CyclicPrefixLengths = info.CyclicPrefixLengths;SymbolsPerSubframe = info.SymbolsPerSubframe;STOPTIME = 4 * TotSubframes * info.SamplesPerSubframe;sim(模型);txSig_fixpt = TX_WAVEFORM(1:尺寸(txSig_ref));

模型通过添加一些噪声信号通道。注意,相同的噪声作为参考MATLAB模型。

S = RandStream (“mt19937ar”,“种子”1);rxSig_fixpt = awgn(双(txSig_fixpt), snrdB,“测量”,年代);

执行符号同步,恢复数据,计算误码率,并显示星座。

rxSig_fixpt_sync = circshift (rxSig_fixpt地板(genb.FilterLength / 2));[constDiagRx,误码率,rxgrid_fixpt] = FOFDM_Receiver (rxSig_fixpt_sync bitsIn,genb QAMModulation,“F-OFDM接待(定点)”);disp ([“F-OFDM接待(定点)”,的误码率= 'num2str (ber) (1)“在信噪比= 'num2str (snrdB)“数据库”]);constDiagRx (rxgrid_fixpt (:));
F-OFDM接待(定点)数量在信噪比= 0.0094453 = 18分贝

频谱显示即使是定点的明显改善子带信号的带外辐射,和增加有效带宽。

FOFDMTransmitterHDLSpectrum (txSig_fixpt txinfo genb,“F-OFDM频谱(定点)”);

金宝app仿真软件HDL-Optimized模型

定点模型使用一个513 -利用时域滤波器。这个过滤器需要2 * 513乘数由于传输线的输出是复杂的。即使使用对称滤波器实现它需要513乘数为正常大小FPGA太多的乘数。减少乘数的过滤器,过滤器在频域模型。频域滤波器需要输入的FFT乘以系数然后传输线的FFT结果。在这种情况下的复杂的乘数

2美元*装天花板(\压裂{log2 (FFTLength)}{2}) - 1美元

这个示例使用11中的频域滤波器复杂的乘数。注意,真正的实际数量乘数取决于FFT和传输线块设置(复杂的乘法选项)和字长。模型中,时域滤波器频域滤波器取代了用overlap-save架构实现。由于重叠overlap-save架构的特点,采样率是有限的

时钟\ _frequency * \美元压裂{FFTLength} {(FFTLength +马克斯(CyclicPrefixLength) + 2 * (FilterLength 1))} $

因此,要实现122.88议员采样率对于这个示例,时钟频率必须至少196.8 MHz。

模型=“FOFDMTransmitterHDLExample_HDLOpt”;load_system(模型);open_system([模型,' / F-OFDM ']);

设置的FFT滤波器的长度。长度必须至少2 * FilterLength频域滤波。然而,因为它必须处理整个OFDM符号立刻使用Nfft FFT长度内的过滤器。然后,计算FFT的系数。Bit-reverse结果自bit-reversed的FFT滤波器输出。

filterFFTLen = Nfft;fftFnum = bitrevorder (fft (fnum filterFFTLen)。');

对于定点输入数据,内部的FFT滤波器的输出有一个bit-growth = log2 (Nfft) = 11位。地图大部分乘数在FPGA、DSP块限制输入单词长度。例如如果DSP 25 *是18位乘法器,字必须是14位达到25位内的FFT滤波器的输出。此外,使用的是18位系数。

字= 14;FRACTIONLENGTH =字- 2;如果字> 0%为定点数据COEF_WL = 18;COEF_FR = COEF_WL - 2;fftFnum = fi (fftFnum 1 COEF_WL COEF_FR,“RoundingMethod”,“最近的”,“OverflowAction”,“包装”);结束STOPTIME = 4 * TotSubframes * info.SamplesPerSubframe;sim(模型);txSig_HDLOpt = TX_WAVEFORM_HDLOpt(1:尺寸(txSig_ref));

模型通过添加一些噪声信号通道。注意,相同的噪声作为参考MATLAB模型。

S = RandStream (“mt19937ar”,“种子”1);rxSig_HDLOpt = awgn(双(txSig_HDLOpt), snrdB,“测量”,年代);

执行符号同步,恢复数据,计算误码率,并显示星座。

rxSig_HDLOpt_sync = circshift (rxSig_HDLOpt地板(genb.FilterLength / 2));[constDiagRx,误码率,rxgrid_HDLOpt] = FOFDM_Receiver (rxSig_HDLOpt_sync bitsIn,genb QAMModulation,“F-OFDM接待(HDLOPT)”);disp ([“F-OFDM接待(HDLOPT)”,的误码率= 'num2str (ber) (1)“在信噪比= 'num2str (snrdB)“数据库”]);constDiagRx (rxgrid_HDLOpt (:));
F-OFDM接待(HDLOPT)数量在信噪比= 0.010038 = 18分贝

频谱显示即使是定点的明显改善子带信号的带外辐射,和增加有效带宽。

FOFDMTransmitterHDLSpectrum (txSig_HDLOpt txinfo genb,“F-OFDM频谱(HDLOPT)”);

生成HDL代码和试验台

使用一个临时目录中生成的文件:

systemname = ' FOFDMTransmitterHDLExample_HDLOpt / F-OFDM ';workingdir = tempname;

您可以运行以下命令检查F-OFDM子系统HDL代码生成的兼容性:

checkhdl (systemname TargetDirectory, workingdir);

运行以下命令来生成HDL代码:

makehdl (systemname TargetDirectory, workingdir);

运行以下命令生成试验台:

makehdltb (systemname TargetDirectory, workingdir);

合成的结果

设计合成了Xilinx zynq - 7000使用Vivado (xc7z045-ffg900、速度等级2)。这个FPGA 900 DSP48片因此,定点版本的设计不适合在这个设备。HDL-optimized版本的设计适合在这个芯片,实现时钟频率为205.8 MHz,满足所需的时钟频率为196.8 MHz。设计使用94 DSP48(10%)和24块公羊(4%)。

结论

在这个例子中Simulink仿真定点金宝app模型开发和优化硬件。模型最小化资源使用优化使用DSP的FPGA。比较的结果与定点模型显示16位浮点模型数据也有类似的比特误码率浮点数据。

相关的话题