Что такое фильтры верхних и нижних частот?
Программное обеспечение для редактирования и обработки графики и аудио часто содержит функции, называемые "Фильтр верхних частот" и "Фильтр нижних частот". Что именно они делают, и каковы алгоритмы их реализации?
6 ответов
Википедия:
Эти термины "высокий", "низкий" и "полосовой" относятся к частотам. В верхних частотах вы пытаетесь удалить низкие частоты. На низких частотах вы пытаетесь убрать высокие. В полосе пропускания вы оставляете только непрерывный частотный диапазон.
Выбор частоты среза зависит от вашего приложения. Кодирование этих фильтров может быть выполнено либо путем моделирования RC-цепей, либо с помощью преобразования Фурье ваших временных данных. См. Статьи в Википедии для примеров кода.
Вот как вы реализуете фильтр нижних частот с использованием свертки:
double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];
// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;
// Do convolution:
for (int i=0; i < signal.Length; i++)
for (int j=0; j < filter.Length; j++)
result[i+j] = result[i+j] + signal[i] * filter[j];
Обратите внимание, что пример чрезвычайно упрощен. Это не делает проверки диапазона и не обрабатывает края должным образом. Используемый фильтр (box-car) является особенно плохим фильтром нижних частот, потому что он вызовет много артефактов (звон). Читайте о дизайне фильтров.
Вы также можете реализовать фильтры в частотной области. Вот как вы реализуете фильтр верхних частот, используя FFT:
double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)
// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length / 4; i++)
real[i] = 0;
// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);
Опять же, это упрощено, но вы поняли идею. Код выглядит не так сложно, как математика.
Вот очень простой пример фильтра нижних частот в C++, который обрабатывает сигнал по одной выборке за раз:
float lopass(float input, float cutoff) {
lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0]));
outputs[0]= lo_pass_output;
return(lo_pass_output);
}
Здесь в значительной степени то же самое, за исключением того, что это высокий проход:
float hipass(float input, float cutoff) {
hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0]));
outputs[0]=hi_pass_output;
return(hi_pass_output);
}
Фильтр верхних частот пропускает высокочастотную (детальную / локальную информацию).
Фильтр нижних частот пропускает низкочастотную (грубую / грубую / глобальную информацию).
Обычно это электрические цепи, которые имеют тенденцию пропускать части аналоговых сигналов. Высокие частоты имеют тенденцию передавать больше высокочастотных частей, а низкие частоты имеют тенденцию пропускать больше низкочастотных частей.
Они могут быть смоделированы в программном обеспечении. Например, скользящее среднее может действовать как фильтр нижних частот, а разница между скользящим средним и его входом может работать как фильтр верхних частот.
Фильтрация описывает процесс обработки данных способом, который применяет различные уровни ослабления к различным частотам в данных.
Фильтр верхних частот будет применять минимальное затухание (т.е. оставлять уровни неизменными) для высоких частот, но применяет максимальное затухание к низким частотам.
Фильтр нижних частот является обратным - он не применяет затухание к низким частотам, применяя затухание к высоким частотам.
Существует ряд различных алгоритмов фильтрации, которые используются. Двумя простейшими являются, вероятно, фильтр с конечной импульсной характеристикой (также известный как FIR-фильтр) и фильтр с бесконечной импульсной характеристикой (также известный как IIR-фильтр).
КИХ-фильтр работает, сохраняя серию выборок и умножая каждую из этих выборок на фиксированный коэффициент (который основан на положении в серии). Результаты каждого из этих умножений накапливаются и являются выходными данными для этого образца. Это называется Multiply-Accumulate - и в выделенном оборудовании DSP для этого есть специальная инструкция MAC.
Когда берется следующий образец, он добавляется в начало серии, а самый старый образец в серии удаляется, и процесс повторяется.
Поведение фильтра фиксируется выбором коэффициентов фильтра.
Одним из самых простых фильтров, который часто предоставляется программным обеспечением для обработки изображений, является фильтр усреднения. Это может быть реализовано с помощью КИХ-фильтра, установив все коэффициенты фильтра на одно и то же значение.