2008-08-30 8 views
24

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

ответ

18

Википедия:

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

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

5

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

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

5

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

27

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

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

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

+2

Очень классно иметь образцы кода. Почему свертка в одном случае и БПФ в другом? – dfrankow 2009-03-13 19:03:28

+2

@dfrankow Нет особой причины. Просто чтобы показать, как он выглядит в разных доменах. Обновлен текст, чтобы отразить это. Благодарю. – Hallgrim 2009-03-16 21:31:43

5

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

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

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

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

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

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

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

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

5

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

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

  • Нет связанных вопросов^_^