Программное обеспечение для редактирования и обработки графики и звука часто содержит функции "Фильтр высоких частот" и "Фильтр низких частот". Что именно они делают, и каковы алгоритмы их реализации?
Что такое фильтры с верхним и нижним проходом?
Ответ 1
Википедия:
Эти термины "высокий", "низкий" и "диапазон" относятся к частотам. В верхнем проходе вы пытаетесь удалить низкие частоты. В нижнем проходе вы пытаетесь удалить высоту. В полосе пропускания вы допускаете только непрерывный диапазон частот.
Выбор частоты отсечки зависит от вашего приложения. Кодирование этих фильтров может быть выполнено путем моделирования схем RC или путем воспроизведения преобразований Фурье ваших временных данных. См. Статьи в википедии для примеров кода.
Ответ 2
Вот как вы реализуете фильтр нижних частот с использованием свертки:
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);
Опять же, это упрощается, но вы получаете идею. Код выглядит не так сложно, как математика.
Ответ 3
Вот супер простой пример фильтра нижних частот в С++, который обрабатывает сигнал по одному образцу за раз:
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);
}
Ответ 4
Фильтр высоких частот позволяет передавать высокочастотные (подробные/локальные данные).
Фильтр нижних частот позволяет пропускать низкочастотную (грубую/грубую/глобальную информацию).
Ответ 5
Они обычно являются электрическими схемами, которые имеют тенденцию пропускать части аналоговых сигналов. Высокий проход имеет тенденцию передавать больше высокочастотных частей, а низкий проход имеет тенденцию пропускать больше низкочастотных частей.
Их можно моделировать в программном обеспечении. Например, ходячий средний может действовать как фильтр нижних частот, и разница между обычным ходьбой и его входом может работать как фильтр высоких частот.
Ответ 6
Фильтрация описывает действие обработки данных способом, который применяет различные уровни затухания к различным частотам в данных.
Высокочастотный фильтр будет применять минимальное внимание (т.е. оставить уровни без изменений) для высоких частот, но применяет максимальное ослабление к низким частотам.
Фильтр нижних частот обратный - он не будет применять ослабление низких частот, применяя ослабление к высоким частотам.
Существует несколько различных алгоритмов фильтрации. Двумя простейшими являются, вероятно, фильтр с конечным импульсным откликом (он же FIR-фильтр) и фильтр Infinite Impulse Response (например, IIR-фильтр).
Фильтр FIR работает, сохраняя серию выборок и умножая каждый из этих выборок на фиксированный коэффициент (который основан на позиции в серии). Результаты каждого из этих умножений накапливаются и являются результатом для этого образца. Это называется Multiply-Accumulate - и в специализированном аппаратном обеспечении DSP для выполнения именно этой команды существует определенная команда MAC.
Когда следующий образец взят, он добавляется к началу серии, и самый старый образец в серии удаляется, и процесс повторяется.
Поведение фильтра фиксируется выбором коэффициентов фильтра.
Одним из простейших фильтров, часто предоставляемым программным обеспечением обработки изображений, является фильтр усреднения. Это можно реализовать с помощью фильтра FIR, установив все коэффициенты фильтра на одно и то же значение.