Создать фильтр нижних частот от Octave
Хотя у меня был пример низкочастотного фильтра, закодированного в Octave, и я уверен, что он работает, я не могу понять. Как доза эта работа? и как узнать частоту среза этого фильтра?
Original_data - это столбец данных о качестве воды, которые я получил с частотой 1 Гц.
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);
Если у вас есть идеи, пожалуйста, помогите мне.
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);
Во-первых, важно знать, что работа в частотной области - не лучший способ фильтрации сигнала, методы во временной области могут работать хорошо!
Вы хотите знать частоту среза? вам нужно знать частоту дискретизации и длину вашего БПФ, чтобы рассчитать частоту соответствующего бина вашего БПФ.
частота дискретизации = FS, сначала нужно вычислить Найквиста.
Nyquist = FS / 2;
Теперь найдите разрешение по частоте, в этом случае ваш размер БПФ будет таким же, как ваш исходный_данных.
Resolution=Nyquist / (length(original_data) / 2);
Хорошо, почти все, вы помещаете значение 0 в первые восемь (8) бинов вашего БПФ, а затем вам нужно найти частоту соответствующего бина!
round(1 * Resolution)
round(2 * Resolution)
round(3 * Resolution)
.
.
round(8 * Resolution)
Результатом является частота среза, это означает, что вы будете обрезать частоты между первым и восьмым бином