主要内容

高密度脂蛋白适应FFT的实现

这个例子展示了如何实现一个适应FFT通过使用一个FFT的核心。

这个例子包含了两个模型VariableSizeFFTHDLExampleVariableSizeFFTArbitraryValidPatternHDLExample显示适应FFT实现不同输入有效的模式。

许多流行的标准,如WLAN, WiMax,数字视频广播(DVB)、数字音频广播(DAB),和长期演进(LTE)提供多个带宽的选择。所需的FFT长度对OFDM调制和解调这些标准随带宽的选择。例如,LTE支持不同频道从1.4 万博1manbetxMHz至20 MHz带宽选项,需要FFT长度分别为128年到2048年。的FFT块生成HDL代码为一个特定的FFT长度。这个例子演示了如何使用FFT实现一个适应FFT。

这个示例中生成输入数据在MATLAB®和进口仿真软件模拟®。万博1manbetx导入的数据是美联储适应FFT的实现使用一个FFT和多个FFT算法。证明single-FFT实现匹配的结果使用多个不同大小的fft算法,仿真软件仿真的输出流都是出口到MATLAB和比较。万博1manbetx

模型架构

顶级的子系统模型实现可变大小FFT。顶部子系统使用一块FFT和底部子系统提供了参考数据通过使用多个FFT不同大小的块。

该模型VariableSizeFFTHDLExample有效的样本,可以处理数据的差距提供了差距取决于FFT长度。

modelname =“VariableSizeFFTHDLExample”;open_system (modelname);

FFT长度的配置

FFT长度通过指定一个变量fftLenVecMulFFTs。的最大长度是存储在一个变量中fftLenSinFFT和用作FFT块FFT长度使用单一变量大小FFT FFT的子系统。

输入fftLenIn利用FFT长度的向量生成指定fftLenVecMulFFTs

fftLenVecMulFFTs = [128; 256; 512; 1024; 2048);%单一FFT长度大小FFT所使用的变量。fftLenSinFFT = max (fftLenVecMulFFTs);%生成| fftLenIn |通过重复的每个元素| fftLenVecMulFFTs |% | fftLenSinFFT |时间和安排在一个列中。fftLenSinFFT fflen = repmat (fftLenVecMulFFTs。', 1);fftLenIn = uint16 (fflen (:));

输入的一代

dataIn,validIn,fftLenIn输入生成在MATLAB仿真软件模型和进口。万博1manbetx随机复杂的输入数据randInputData为每个指定的FFT长度生成fftLenVecMulFFTs。不同的FFT长度对应不同的带宽和不同的采样率。例如,在LTE, FFT长度128,256,512,1024,和2048对应采样率1.92 MHz, 3.84 MHz, 7.68 MHz,分别15.36兆赫和30.72 MHz。符号时间任何FFT长度\μs $ 66.67美元。示例运行在最高率FFT长度指定。

dataIn信号是由填充0之间randInputData样本。下图显示了输入数据和有效的模式fftLenVecMulFFTs256年和512年fftLenSinFFT在2048年。对于FFT长度为256,7例插入无效样本为每个有效样本和FFT长度为512,每个有效的代码插入3无效样本样本。

该模型VariableSizeFFTHDLExample需要输入有效模式之间有一个有效样本如下图所示。

rng (“默认”);dataIn = 0(长度(fftLenVecMulFFTs) * fftLenSinFFT, 1);validIn = false(长度(fftLenVecMulFFTs) * fftLenSinFFT, 1);%循环FFT长度印第安纳州= 1:长度(fftLenVecMulFFTs)% FFT长度的生成数据样本randInputData =复杂(randn (fftLenVecMulFFTs(印第安纳州)),randn (1, fftLenVecMulFFTs(印第安纳州)));%在输入数据样本之间零填充upSamplingFac = fftLenSinFFT / fftLenVecMulFFTs(印第安纳州);dataIn ((ind-1) * fftLenSinFFT + 1: fftLenSinFFT *印第安纳州)= upsample (randInputData upSamplingFac);%有效对应生成的数据tempValid = true (fftLenVecMulFFTs(印第安纳州));validIn ((ind-1) * fftLenSinFFT + 1: fftLenSinFFT *印第安纳州)= upsample (tempValid upSamplingFac);结束inputDataType =“fixdt(14) 1, 16日”;%输入数据类型可以在这里修改set_param (“VariableSizeFFTHDLExample /数据类型转换”,“OutDataTypeStr”,inputDataType);%得到FFT延迟fftObj = dsp.HDLFFT (“FFTLength”fftLenSinFFT,“架构”,“流基数2 ^ 2”,“ComplexMultiplication”,使用3乘数和5 6,“BitReversedOutput”假的,“BitReversedInput”假的,“正常化”、假);延迟= getLatency (fftObj);%违约延迟是4137 2048点FFT。additionPipelineDelay = 6;%的额外的管道延迟总延万博1manbetx迟= %仿真软件仿真结束时间延迟的FFT +延迟%数据控制器(5时钟周期)。%总仿真运行时间=总%的数量输入样本+总延迟+管道延迟。simTime = fftLenSinFFT *(长度(fftLenVecMulFFTs) + 1) +延迟+ additionPipelineDelay;

使用单一的FFT适应FFT

使用单一的FFT适应FFT的设计包括数据控制器,一个FFT块,本选择子系统。

open_system ([modelname使用单一的FFT /变量大小FFT的]);

数据控制器子系统控制输入数据的FFT的输入块在它们之间数据样本与零填充。FFT块被配置为一个FFT长度为2048,最大的FFT长度LTE所要求的标准。为了简化选择输出的垃圾箱,FFT块被配置为输出样本显得自然秩序。FFT长度是通过输入端口和指定采样帧的开始。所请求的FFT长度必须延迟匹配FFT延迟。FFT长度是注册使用开始输出信号的FFT和生成帧结束的信号。这种方法避免了实现大型delay-matching记忆。输入数据以来零在样品之间,大FFT的输出包含重复的副本FFT长度样本。得到所需的FFT输出,第一次FFT长度从FFT输出收集的样本。通过修改执行这个操作的输出有效信号FFT使用本的选择子系统。

多个fft算法供参考

这个子系统作为参考比较的输出变量大小使用单一的FFT FFT。子系统包括五个不同的FFT块(FFT 128、FFT 256, 512年FFT, FFT 1024和FFT 2048)和一个MATLAB功能块。输入数据将提供给所有五fft算法。根据请求的FFT长度,一个五块FFT激活并执行FFT运算。MATLAB功能块pickFFTData选择适当的FFT块的输出。MATLAB的输出保存与使用单一的FFT适应FFT的输出。

open_system ([modelname' /多个fft算法供参考的]);

运行仿真万博1manbetx软件模型

MATLAB脚本配置所需的FFT长度的向量,单一FFT的大小,并生成输入数据与一个有效的信号。然后运行模型,并在MATLAB比较两个子系统的输出。

运行模型使用sim卡在MATLAB命令行命令。

sim (modelname);

验证

两个子系统的输出被发送到MATLAB工作区和区别是策划。在这种情况下,两个子系统的输出是相同的和两组之间的误差值是0。

dataOut1 =着干活(:);dataOut2 = out2 (:);figVSF =图(“可见”,“关闭”);情节(abs (dataOut1-dataOut2));标题(“两输出固定有效模式的区别)包含(“样本指数”);ylabel (“错误”);figVSF。可见=“上”;bdclose (modelname);

万博1manbetx支持任意输入有效的模式

上述模型VariableSizeFFTHDLExample有要求的最低输入数据样本之间的差距。差距取决于指定的FFT长度和最大的FFT长度由设计来处理。可能存在的情况下输入数据可能不符合这个模式。例如,数据可能是连续的和垫0结束时输入数据样本。下面的图显示了一个连续的输入有效模式与无效样本衬垫的输入样本数据的FFT长度256年和512年。单一FFT长度设置为2048。在这种情况下,256个有效样本1792无效样本和512份有效样本1536份无效样本紧随其后。

在这样的场景中,设计必须输入样本存储到内存,和垫无效样本之间的有效样本才将其发送给FFT。该模型VariableSizeFFTArbitraryValidPatternHDLExample可以处理任意的有效输入模式只要帧之间的差距至少是单一FFT长度(LTE的2048个样本)。这个模型是一样的模型VariableSizeFFTHDLExample,除了数据控制器子系统。数据控制器子系统模型使用RAM的大小2 * fftLenSinFFT(如下图所示)来存储输入样本,读取它们之间有效的样本而补0,然后通过FFT。当输入数据被写入内存的一半,另一半的读取数据的内存。因此,总延迟增加了fftLenSinFFT

modelname =“VariableSizeFFTArbitraryValidPatternHDLExample”;load_system (modelname);open_system ([modelname' /变量大小FFT使用单一的FFT /数据控制器的]);

任意输入数据和有效的一代

生成任意数据和有效的输入,用户可以选择任何一种三个选择:数据样本之间的固定大小的补零,零填充的数据样本,和补零的随机样本数据之间的大小。的输入数据和有效生成这三个不同的零填充模式如下所示。的VariableSizeFFTArbitraryValidPatternHDLExample模型使用生成的数据和有效模拟和验证。

%初始化输入数据和有效的dataIn = 0(长度(fftLenVecMulFFTs) * fftLenSinFFT, 1);validIn = false(长度(fftLenVecMulFFTs) * fftLenSinFFT, 1);zeroPaddingPattern =中间画的;%’AtEnd”、“随机”开关zeroPaddingPattern情况下中间画的%在输入数据样本之间零填充印第安纳州= 1:长度(fftLenVecMulFFTs)% FFT长度的生成数据样本randInputData =复杂(randn (fftLenVecMulFFTs(印第安纳州)),randn (1, fftLenVecMulFFTs(印第安纳州)));%在输入数据样本之间零填充upSamplingFac = fftLenSinFFT / fftLenVecMulFFTs(印第安纳州);dataIn ((ind-1) * fftLenSinFFT + 1: fftLenSinFFT *印第安纳州)= upsample (randInputData upSamplingFac);%有效对应生成的数据validIn ((ind-1) * fftLenSinFFT + 1: upSamplingFac: fftLenSinFFT *印第安纳州)= true;结束情况下“AtEnd”%零填充的输入数据样本印第安纳州= 1:长度(fftLenVecMulFFTs)% FFT长度的生成数据样本randInputData =复杂(randn (fftLenVecMulFFTs(印第安纳州)),randn (1, fftLenVecMulFFTs(印第安纳州)));%零填充数据dataIn (((ind-1) * fftLenSinFFT + 1): ((ind-1) * fftLenSinFFT + fftLenVecMulFFTs(印第安纳州)))= randInputData;%有效生成相应的数据validIn (((ind-1) * fftLenSinFFT + 1): ((ind-1) * fftLenSinFFT + fftLenVecMulFFTs(印第安纳州)))= true;结束否则%随机印第安纳州= 1:长度(fftLenVecMulFFTs)%随机补零randIndices = randperm (fftLenSinFFT);% FFT长度的生成数据样本randInputData =复杂(randn (fftLenVecMulFFTs(印第安纳州)),randn (1, fftLenVecMulFFTs(印第安纳州)));指数= randIndices (1: fftLenVecMulFFTs(印第安纳州));%如果随机指数没有第一个示例如果(和(指数= = 1)= = 0)指数(1)= 1;结束%零填充数据dataIn(指数+ (ind-1) * fftLenSinFFT) = randInputData;%有效生成相应的数据validIn(指数+ (ind-1) * fftLenSinFFT) = true;结束结束

运行仿真软件模型万博1manbetx

在运行模式之前,确保dataIn,validIn,fftLenIn,和必要的变量初始化。

sim (modelname);

验证

dataOut1 =着干活(:);dataOut2 = out2 (:);figVSFAIV =图(“可见”,“关闭”);情节(abs (dataOut1-dataOut2));标题(的区别的两个输出任意有效模式”)包含(“样本指数”);ylabel (“错误”);figVSFAIV。可见=“上”;bdclose (modelname);

HDL代码生成和验证

生成HDL代码中引用这个例子中,一个高密度脂蛋白编码器™许可是必要的。

您可以使用命令makehdlmakehdltb生成的HDL代码和testbench子系统。

HDL代码生成的变量大小FFT子系统合成Xilinx®Zynq®-7000 ZC706董事会。合成结果如下表所示。

上表显示,实现一个适应FFT使用单一FFT使用更少的硬件资源比使用多个FFT的解决方案。支持任万博1manbetx意输入有效的模式,硬件实现使用更多的内存。

另请参阅