首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出实现的“迭代FFT DIT Radix2”算法matlab的问题

输出实现的“迭代FFT DIT Radix2”算法matlab的问题
EN

Stack Overflow用户
提问于 2021-07-30 16:55:14
回答 1查看 162关注 0票数 0

我正在尝试用迭代Radix2算法实现自己的快速傅立叶变换(我甚至考虑使用递归算法,但似乎Simulink不允许我这么做)。我尝试了所有可能的变体,比如DIT和DIF,但是我总是遇到同样的问题:输出对我来说没有多大意义。它们具有类似的输出,包括DIF和DIT,它们都是用不同的代码变体实现的。

在实际应用中需要这种算法,信号将被缓冲,然后这些数据包被加窗和重叠。然后在Simulink中将窗口函数平均并发送到下一个块,以得到一个韦尔奇谱估计

下面是我实现的DIT版本(之一)的代码:

代码语言:javascript
复制
function [FFT,Wk,k] = radix2(u,k_old,lap) %lap = 512 = 1024/2 with 1024 Window size

N = length(u);
P = log2(N);
FFT = zeros(N,1)+0*1j;
omega = 0j;

% Hann Window
n1 = (k_old)*lap:(N+k_old*lap-1);
w1 = sin(pi.*n1/(N-1)).^2;
z1 = u.*w1';
z1=z1';

% Average
Wk = 0;
for i=1:N
    Wk = Wk + w1(i)^2;
end

%% Algorithm
A = z1(bitrevorder(1:N));
for s=1:log2(N)
    m=2^s;
    Wm = exp(2*pi*1j/m)
    W = 1 +0j;
    for j= 1:m/2
        for k=j:m:(N)
            odd = W*A(k+m/2)
            even = A(k);
            FFT(k)=odd + even;
            FFT(k+m/2) =even-odd;
        end
        W = W*Wm;
    end
end 

这是输出

而不是有两个/三个不同的尖峰(输入是一个带有噪声的窦性信号,即使我关掉噪声或窗口函数,结果也不会有太大变化,所以这些都是正确的),我得到了这个蝴蝶状信号。为什么看起来像那样?

我最初认为这是一个频率正常化问题,但它并没有解决这个问题。

我真的希望任何人都能帮忙,这个问题并不是太愚蠢,我现在完全迷失了方向。

重新编辑:

这是因为我在动态参数估计的不同技术之间做了并行处理:锁定放大器,Welch与DFT,FFT,Goertzel等方法。然后我比较变化,时间,失败.所以自我实现正是我工作的重点。我知道韦尔奇已经存在于Matlab和Simulink中,但它并没有给我带来特殊的研究目的。而且,我的大多数版本都工作得很好,唯一的问题是迭代FFT‘实现,它看起来不像傅里叶变换,我也不太明白原因。

输出应该显示两个峰值在+和-50赫兹,一个在0Hz,因为一个比例项的信号和其他较小的周围,不超过+-50赫兹和0赫兹。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68594583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档