Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signal processing 如何利用2048点FFT硬件模块计算512点FFT_Signal Processing_Fft - Fatal编程技术网

Signal processing 如何利用2048点FFT硬件模块计算512点FFT

Signal processing 如何利用2048点FFT硬件模块计算512点FFT,signal-processing,fft,Signal Processing,Fft,我有一个2048点的FFT IP。如何使用它来计算512点FFT?有不同的方法来实现这一点,但最简单的方法是将输入数据复制4次,以获得2048个样本的信号。请注意,DFT(即FFT计算的)可以视为假设输入信号被无限复制。因此,我们只是提供了这个无限长周期信号的一个更大的“视图” 得到的FFT将有512个非零值,中间有零。每个非零值也将是512点FFT产生的四倍大,因为有四倍多的输入样本(也就是说,如果标准化同样普遍应用,在正变换中没有标准化,在逆变换中有1/N标准化) 以下是MATLAB中的原理

我有一个2048点的FFT IP。如何使用它来计算512点FFT?

有不同的方法来实现这一点,但最简单的方法是将输入数据复制4次,以获得2048个样本的信号。请注意,DFT(即FFT计算的)可以视为假设输入信号被无限复制。因此,我们只是提供了这个无限长周期信号的一个更大的“视图”

得到的FFT将有512个非零值,中间有零。每个非零值也将是512点FFT产生的四倍大,因为有四倍多的输入样本(也就是说,如果标准化同样普遍应用,在正变换中没有标准化,在逆变换中有1/N标准化)

以下是MATLAB中的原理证明:

data=randn(1512);
ft=fft(数据);%512点FFT
数据=repmat(数据,1,4);
ft2=fft(数据);%2048点FFT
ft2=ft2(1:4:结束)/4;%512点FFT
断言(全部(ft2==ft))

(非常令人惊讶的是,这些值完全相等,在这种情况下,由于数值精度没有差异!)

与正确的解决方案不同的另一种解决方案是,不需要任何重新缩放,将数据用零填充到所需的2048个样本长度。然后,通过读取每个
2048/512=4
输出(即
output[0]
output[3]
,…在基于0的索引系统中)得到结果

由于您提到使用硬件模块,因此可以在硬件中通过连接前512个输入引脚并将所有其他输入接地,并读取每4个输出引脚(忽略所有其他输出引脚)来实现

请注意,这是因为零填充信号的FFT是原始信号FFT频域中的插值。在这种情况下,不需要插值,因此可以忽略它们。下面是一个使用16点模块计算4点FFT的示例(我已经减小了brievety的FFT大小,但两者之间保持了相同的4比):


正如您在第二个输出中看到的,第一列(对应于输出0、3、7和11)与第一个较小FFT的所需输出相同。

这也是正确的,并且比我的方法更易于实现。
x = [1,2,3,4]
fft(x)
ans> 10.+0.j,
     -2.+2.j,
     -2.+0.j,
     -2.-2.j

x = [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0]
fft(x)
ans> 10.+0.j,  6.499-6.582j, -0.414-7.242j, -4.051-2.438j,
     -2.+2.j,  1.808+1.804j,  2.414-1.242j, -0.257-2.3395j,
     -2.+0.j, -0.257+2.339j,  2.414+1.2426j, 1.808-1.8042j,
     -2.-2.j, -4.051+2.438j, -0.414+7.2426j, 6.499+6.5822j