【问题标题】:Create Low Pass Filter by Octave按八度创建低通滤波器
【发布时间】:2013-11-22 09:47:42
【问题描述】:

虽然我有一个用 Octave 编码的低通滤波器示例,并且我确信它可以工作,但我无法理解。 这个效果如何?我怎么知道这个滤波器的截止频率?

original_data是我用1Hz得到的一列水质数据。

l = rows(original_data);
a = fft(original_data);
for i = (1:l);
 if i >9
  a(i) = 0;
 endif
endfor
b = fft(original_data);
for i = (1:l)
 if i > 1
  b(i) = 0;
 endif
endfor
c = real(ifft(a));
c(1);
d = real(ifft(a))*2-c(1);

如果你有任何想法,请帮助我。

【问题讨论】:

  • 这是一种非常糟糕的滤波方式——它在频域中是一堵砖墙,这意味着在时域中会出现严重的振铃伪影。在频域中使用窗口函数来避免这种情况。
  • 谢谢你,保罗。你知道如何知道这个滤波器的截止频率吗?
  • 截止频率取决于 fft 的大小,它似乎是l,所以它大约是Fs * 10 / l,而你说Fs = 1 Hz,那就是大约10 / l Hz。

标签: fft octave lowpass-filter


【解决方案1】:

我同意评论,有很多功能可以让您正确设计低通滤波器(请参阅http://octave.sourceforge.net/signal/overview.html,特别是 IIR 和 FIR 滤波器设计部分)。设计好过滤器后,您可以使用函数filterfiltfilt 应用它。

例如,一个简单的方法是:

[b,a] = butter(n, Wc) % low pass Butterworth filter with cutoff pi*Wc radians - choose the order of the filter n and cut-off frequency Wc to suit
filtered_data = filter(b,a,original_data);

【讨论】:

    【解决方案2】:

    首先重要的是要知道在频域工作并不是过滤信号的最佳方法,时域方法可以很好地工作!

    您想知道截止频率吗?您需要知道 FFT 的采样率和长度来计算 FFT 对应 bin 的频率。

    采样率 = FS,首先你需要计算奈奎斯特。

    Nyquist = FS / 2;
    

    现在找到频率分辨率,在这种情况下,您的 fft 大小与您的 original_data 相同。

    Resolution=Nyquist / (length(original_data) / 2);
    

    差不多好了,您将值 0 放在 FFT 的前八 (8) 个 bin 中,那么现在您需要找到对应 bin 的频率!

    round(1 * Resolution)
    round(2 * Resolution)
    round(3 * Resolution)
    .
    .
    round(8 * Resolution)
    

    结果是截止频率,这意味着您将削减第一个和第八个 bin 之间的频率

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-29
      • 2011-05-29
      • 2019-04-29
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多