首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFT长度会影响滤波精度吗?

FFT长度会影响滤波精度吗?
EN

Stack Overflow用户
提问于 2010-12-31 01:06:12
回答 1查看 1.2K关注 0票数 1

我正在设计一个分数延迟滤波器,我的5h(N)阶拉格朗日系数在时域上有6个抽头。用matlab对采样信号为5000的x(n)对h(n)进行了卷积测试,结果良好。当我尝试使用FFT和IFFT方法时,输出是完全错误的。实际上,我的FFT是用8192个频域数据计算的,这是5000个信号样本中最接近2的功率。对于IFFT部分,我将8192频域数据转换回时间域中的5000长数据。所以问题是,为什么这个东西在卷积中工作,而不是在FFT乘法中。在频域将我的6个水龙头h(n)转换为8192个水龙头是否会导致这个问题?

实际上,我尝试过使用重叠保存方法,用较小的x(n)块执行FFT和乘法,并分别执行5次。结果似乎略好于以前,至少我可以看到波形模式,但仍略有扭曲。所以,任何知道哪里出错,以及什么是解决办法。谢谢。

我在频域而不是时域上实现圆形卷积的原因是,我尝试将拉格朗日滤波器与其他低通滤波器在频域上合并,以使实现效率更高。当然,我相信在频域实现滤波要比时域卷积快得多。LP滤波器在时域上有120个抽头。由于内存限制,包括填充在内的原始数据将被限制在长度为1024的范围内,因此fft桶也是如此。

因为我的拉格朗日系数只有6个水龙头,这与1024个水龙头有很大的不同。在频域上,我怀疑对1024个回收箱的6个抽头的fft是否会造成误差。这是我在拉格朗日滤波器上的matlab代码。这只是一个测试代码,而不是实现代码。有点乱,很抱歉。非常感谢你能在这个问题上给我更多的建议。谢谢。

代码语言:javascript
复制
t=1:5000;
fs=2.5*(10^12);
A=70000;

x=A*sin(2*pi*10.*t.*(10^6).*t./fs);

delay=0.4;
N=5;

n = 0:N;  
h = ones(1,N+1);  

for k = 0:N  
      index = find(n ~= k);  
      h(index) = h(index) *  (delay-k)./ (n(index)-k);  
end  

pad=zeros(1,length(h)-1);  
out=[];  
H=fft(hh,1024);  
H=fft([h zeros(1,1024-length(h))]);  
for i=0:1:ceil(length(x)/(1024-length(h)+1))-1  

    if (i ~= ceil(length(x)/(1024-length(h)+1))-1)  
        a=x(1,i*(1024-length(h)+1)+1:(i+1)*(1024-length(h)+1));  
    else  
        temp=x(1,i*(1024-length(h)+1)+1:length(x));  
        a=[temp zeros(1,1024-length(h)+1-length(temp))];  
    end  

    xx=[pad a];
    X=fft(xx,1024);


    Y=H.*X;
    y=abs(ifft(Y,1024));
    out=[out y(1,length(h):length(y))];
    pad=y(1,length(a)+1:length(y));  

end
EN

回答 1

Stack Overflow用户

发布于 2010-12-31 03:52:51

一些评论:

  1. ,2的最接近的幂实际上是4096。你认为其余904个样本会有很大贡献吗?我想,只有当你在寻找相对低频的特征时,它们才是有意义的。
  2. ,你是如何将你的信号传输到8192个样本的?将样本填充到8192表示大约40%的数据是“虚构的”。如果你用零来延长你的数据集,你很可能会在垫子点注入一个步骤改变--这意味着很多高频内容。
  3. 是一个简短的代码片段,演示你的方法不会有什么坏处。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4567429

复制
相关文章

相似问题

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