工具/软件:TI C/C++编译器
你(们)好
我们的项目需要继续 执行16384或32768 点 FFT 进行振动分析,但我发现55x DSPLIB 只能支持1024点 FFT,如何实现目标? 您能为16384或32768 点 FFT 提供帮助吗?
此致
Ralf
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
你(们)好
我们的项目需要继续 执行16384或32768 点 FFT 进行振动分析,但我发现55x DSPLIB 只能支持1024点 FFT,如何实现目标? 您能为16384或32768 点 FFT 提供帮助吗?
此致
Ralf
您好、Ralf、
Radix-2 FFT 算法的工作原理是将 N 点 FFT 分解为2 N/2点 FFT、然后重新组合结果。 它重复此分解、直到剩余几个2点 FFT、但我们使用 FFT 蝶形计算这些2点 FFT。 然后、只需将嵌套子 FFT 与一些复杂数学运算进行拼接、并在过程中应用分维因子。
FFT 应用手册- SPRABB6介绍了使用1024点 FFT 计算更大 FFT 的高级算法。 请参阅以下摘录。
请在此处下载 SPRABB6: http://www.ti.com/lit/an/sprabb6b/sprabb6b.pdf
请参阅以下 MATLAB 代码、以生成和绘制任意长度 FFT 的 Twiddle 因子。 请注意、对于较小的 FFT、可以对较大的 FFT 使用 Twiddle 表的子集。
清除;
全部关闭;
%创建 N 点 FFT 的 Twiddle 因子%
N = 4096;
Twiddle =零(1、N);%实数和 Imag 组合为[re、Im、re、I]格式
tid_r =零(1、N/2);Twiddle 的%仅实数部分
d_r =(1、N、2);tTwiddle 部分0 (1、N);teg2 (仅为0)
%离散时间网格
%添加实数部分
tird_r = cos (2*pi*n/N);
Twiddle (1:2:N)= cos (2 * pi * n/N);
% Create Imag part
tild_i =-sin (2 * pi * n/N);
Twiddle (2:2:N)=-sin (2 * pi *拧 n/N);
% thretwisted to S16Q15 Fix-Point Format (2:2:2:2:2:i:i:i:d);twidd_hex
(
1、tfi_hex = 1、15);
tid_i_fi_hex = tid_i_fi.hex;
子图(2、1、1)
图(tid_r_fi)
标题('re\{twidedle\}')
子图(2、1、2)
图(tid_i_fi)
标题('im\{twidedle\}')
为了进行优化、可以调整 DSPLib 汇编代码以支持更大的 FFT、但为了进行概念验证、可以使用 C 代码。
另一个优化是使用 Radix-4 FFT 算法、而不是 Radix-2。 基数4将 FFT 问题分解为4个较小的问题、而不是2个。
请记住、C55xx 是定点处理器(16位自然字)、因此动态范围和精度会成为这些较大 FFT 的问题。 如果您丢失有关信号的过多信息、请考虑使用 C6000等浮点处理器。
希望这对您有所帮助、
标记