Что такое фильтры верхних и нижних частот? - PullRequest
26 голосов
/ 30 августа 2008

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

Ответы [ 6 ]

29 голосов
/ 17 сентября 2008

Вот как вы реализуете фильтр нижних частот с помощью свертки:

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);

Опять же, это упрощено, но вы поняли идею. Код выглядит не так сложно, как математика.

20 голосов
/ 30 августа 2008

Википедия:

Эти термины "высокий", "низкий" и "полосовой" относятся к частотам . В верхних частотах вы пытаетесь удалить низкие частоты. На низких частотах вы пытаетесь убрать высокие. В полосе пропускания вы оставляете только непрерывный частотный диапазон.

Выбор частоты среза зависит от вашего приложения. Кодирование этих фильтров может быть выполнено либо путем моделирования RC-цепей, либо с помощью преобразования Фурье ваших временных данных. См. Статьи в Википедии для примеров кода.

5 голосов
/ 05 октября 2008

Фильтрация описывает процесс обработки данных способом, который применяет различные уровни ослабления к различным частотам в данных.

Фильтр верхних частот применяет минимальное ослабление (т. Е. Оставляет уровни неизменными) для высоких частот, но применяет максимальное ослабление к низким частотам.

Фильтр нижних частот работает наоборот - он не применяет затухание к низким частотам, применяя затухание к высоким частотам.

Существует ряд различных алгоритмов фильтрации. Двумя простейшими являются, вероятно, фильтр с конечной импульсной характеристикой (он же FIR-фильтр) и фильтр с бесконечной импульсной характеристикой (он же. IIR-фильтр).

КИХ-фильтр работает, сохраняя серию выборок и умножая каждую из этих выборок на фиксированный коэффициент (который основан на положении в серии). Результаты каждого из этих умножений накапливаются и являются выходными данными для этого образца. Это называется Multiply-Accumulate - и в выделенном оборудовании DSP для этого есть специальная инструкция MAC.

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

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

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

5 голосов
/ 31 августа 2008

фильтр верхних частот позволяет высокая -частота (подробная / локальная информация) pass .
Низкочастотный фильтр позволяет низкая -частота (грубая / грубая / глобальная информация) pass .

5 голосов
/ 30 августа 2008

Обычно это электрические цепи, которые обычно пропускают части аналоговых сигналов. Высокие частоты имеют тенденцию передавать больше высокочастотных частей, а низкие частоты имеют тенденцию пропускать больше низкочастотных частей.

Они могут быть смоделированы в программном обеспечении. Например, скользящее среднее может действовать как фильтр низких частот, а разница между скользящим средним и его входом может работать как фильтр высоких частот.

4 голосов
/ 28 декабря 2010

Вот очень простой пример фильтра нижних частот в 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);
}
...