虽然我有一个用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);
如果您有任何想法,请帮助我。
答案 0 :(得分:2)
我同意评论,有很多功能可以让你正确设计一个低通滤波器(参见http://octave.sourceforge.net/signal/overview.html,特别是IIR和FIR滤波器设计部分)。设计过滤器后,您可以使用filter
或filtfilt
函数来应用过滤器。
举个例子,一个简单的方法是:
[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);
答案 1 :(得分:0)
首先重要的是要知道在频域工作不是过滤信号的最佳方法,时域方法可以很好地工作!
你想知道截止频率吗?您需要知道采样率和FFT的长度,以计算FFT的对应仓的频率。
采样率= FS,首先需要计算奈奎斯特。
Nyquist = FS / 2;
现在找到频率分辨率,在这种情况下,你的fft大小与你的original_data相同。
Resolution=Nyquist / (length(original_data) / 2);
好的,你在FFT的前八(8)个区域放置值0,那么现在你需要找到对应的bin的频率!
round(1 * Resolution)
round(2 * Resolution)
round(3 * Resolution)
.
.
round(8 * Resolution)
结果是截止频率,这意味着你将切割第一个和第八个箱子之间的频率