Что такое фильтры верхних и нижних частот?

Программное обеспечение для редактирования и обработки графики и аудио часто содержит функции, называемые "Фильтр верхних частот" и "Фильтр нижних частот". Что именно они делают, и каковы алгоритмы их реализации?

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.

Когда берется следующий образец, он добавляется в начало серии, а самый старый образец в серии удаляется, и процесс повторяется.

Поведение фильтра фиксируется выбором коэффициентов фильтра.

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

Другие вопросы по тегам