2013-11-22 3 views
0

Хотя у меня был пример фильтра нижних частот, закодированного в 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

Это очень плохой способ сделать фильтрацию - это кирпичная стена в что означает, что во временной области будут существовать серьезные звуковые артефакты. Чтобы избежать этого, используйте функцию окна в частотной области. –

+0

Спасибо, Пол. Знаете ли вы, как узнать частоту среза этого фильтра? – user3021107

+0

Частота отсечки зависит от размера fft, который выглядит как 'l', поэтому он будет приблизительно' Fs * 10/l', и вы говорите, что 'Fs = 1 Гц', ​​так что это будет около 10/l' Гц. –

ответ

0

Я согласен с комментарием, существует множество функций, позволяющих правильно спроектировать фильтр нижних частот (см. 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); 
0

Во-первых, важно знать, что работает в частотной области не лучший способ для фильтрации сигнала, методы временной области могут работать хорошо !

Вы хотите знать частоту среза? вам нужно знать частоту дискретизации и длину вашего FFT, чтобы рассчитать частоту корреспондентского бина вашего БПФ.

частота дискретизации = FS, сначала вам нужно вычислить Найквиста.

Nyquist = FS/2; 

Теперь найти разрешение по частоте, в этом случае вашего размера FFT тот же ваш original_data.

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

OK почти Ther, вы размещаете значение 0 в первых восьми (8) закромах вашего FFT, то теперь вам нужно найти частоту корреспондента бен!

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

Результаты частота среза, это означает, что вы будете резки частот между первым и восьмым бен

Смежные вопросы