按倍频程创建低通滤波器



虽然我有一个用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);

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

我同意这个评论,有很多功能可以让你正确地设计低通滤波器(请参阅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);

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

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

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

Nyquist = FS / 2;

现在找到频率分辨率,在这种情况下,fft大小与原始数据相同。

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

好吧,差不多是这样,你把值0放在FFT的前八(8)个bin中,然后现在你需要找到对应bin的频率!

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

结果是截止频率,这意味着您将在第一个和第八个仓之间切割频率

最新更新