Анализ производительности фильтров
Я работаю над некоторыми экспериментальными данными, которые в какой-то момент необходимо интегрировать по времени, а затем отфильтровать по верхним частотам (чтобы устранить низкочастотные возмущения, вызванные интеграцией и нежелательным компонентом постоянного тока).
Цель моей работы не связана с фильтрацией, но все же я хотел бы более подробно проанализировать фильтры, которые я использую, чтобы дать какое-то обоснование (например, чтобы мотивировать, почему я решил использовать фильтр 4-го порядка вместо более высокого / более низкого) один).
Это фильтр, который я использую:
delta_t = 1.53846e-04;
Fs = 1/delta_t;
cut_F = 8;
Wn = cut_F/(Fs/2);
ftype = 'high';
[b,a] = butter(4,Wn,ftype);
filtered_signal = filtfilt(b,a,signal);
Я уже посмотрел здесь: Высокочастотная фильтрация в MATLAB, чтобы узнать что-то о фильтрах (у меня никогда не было курса по обработке сигналов), и я использовал
fvtool(b,a)
чтобы увидеть импульсный отклик, шаг отклика фильтра я использовал.
Проблема в том, что я не знаю, как "читать" эти сюжеты.
Что я должен искать?
Как я могу понять, хорош ли фильтр или нет? (У меня нет каких-либо характеристик производительности фильтра, я просто знаю, что самая низкая частота, которую я могу допустить, составляет 5 Гц)
Какие функции разных фильтров полезно сравнить, чтобы мотивировать выбор?
1 ответ
Я вижу, вы запускаете свой класс Uni DSP для фильтров:) Первое, что вам нужно помнить, это то, что Matlab может моделировать только с использованием конечных значений, так что результаты, которые вы видите, технически все дискретны. Существуют 4 фактора, которые повлияют на ваши результаты фильтрации (или скажут вам, является ли ваш фильтр хорошим или плохим), о которых вы узнаете / должны учитывать при разработке фильтра конечных ответов:
1, тип фильтра (то есть Хэмминга, Баттерворта (тот, который вы используете), Блэкман, Хеннинг и т. Д.) 2, число коэффициентов фильтра (которое определяет разрешение вашего фильтра) 3, частота дискретизации исходного сигнала (в идеале, если вы имеете бесконечную частоту дискретизации, вы можете иметь идеальные фильтры, что невозможно в Matlab по вышеуказанной причине, но вы можете смоделировать его эффект, установив его действительно высоким) 4, частота среза
Вы можете поиграть с 4 параметрами, чтобы ваш фильтр делал то, что вы хотите.
Итак, вот теория: существует компромисс между шириной вашего основного лепестка и утечкой спектра вашего фильтра. Идея состоит в том, что у вас есть некоторый сигнал с некоторыми частотами, вы хотите отфильтровать нежелательные (например, ваш шум постоянного тока) и оставить те, которые вы хотите, но что, если желаемая частота сигнала настолько низкая, что она очень близка к постоянному току шум. Если у вас плохо сконструированный фильтр, вы не сможете отфильтровать компонент постоянного тока. Чтобы спроектировать хороший фильтр, вам нужно будет найти оптимальное число для ваших коэффициентов фильтра, типа фильтра и даже частоты среза, чтобы убедиться, что ваш фильтр работает так, как вы хотели.
Вот фильтр нижних частот, который я писал в те дни, вы можете много поиграть с фильтрами, отфильтровывая различные виды сигналов и составляя график ответа.
N = 21; %number of filter coefficients
fc = 4000; %cut-off frequency
f_sampling = fs; %sampling freq
Fc = fc/f_sampling;
n = -(N-1)/2:(N-1)/2;
delta = [zeros(1,(N-1)/2) 1 zeros(1,(N-1)/2)];
h = delta - 2*Fc*sinc(2*n*Fc);
output = filter(h,1,yoursignal);
Чтобы построить ответ, вы хотите построить свой выходной сигнал в частотной области, используя DFT или FFT(в Matlab) и посмотреть, как сигнал был искажен из-за утечки и т. д.
NFFT=256; % FFT length
output=1/N*abs(fft(output,NFFT)).^2; % PSD estimate using FFT
это дает вам то, что называется периодограммой, когда вы строите график, вы можете захотеть сделать 10*log10, чтобы он выглядел лучше
Надеюсь, у тебя все хорошо в классе.