문제

그래픽, 오디오 편집 및 처리 소프트웨어에는 "하이 패스 필터" 및 "로우 패스 필터"라는 기능이 포함되어 있는 경우가 많습니다.이것이 정확히 무엇을 하며, 이를 구현하기 위한 알고리즘은 무엇입니까?

도움이 되었습니까?

해결책

위키피디아:

이러한 "높음", "낮음" 및 "대역" 용어는 다음을 나타냅니다. 주파수.하이패스에서는 낮은 주파수를 제거하려고 합니다.저역 통과에서는 고역을 제거하려고 합니다.대역통과에서는 연속적인 주파수 범위만 남도록 허용합니다.

차단 주파수 선택은 애플리케이션에 따라 다릅니다.이러한 필터 코딩은 RC 회로를 시뮬레이션하거나 시간 기반 데이터의 푸리에 변환을 통해 수행할 수 있습니다.코드 예제는 Wikipedia 기사를 참조하세요.

다른 팁

컨볼루션을 사용하여 저역 통과 필터를 구현하는 방법은 다음과 같습니다.

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

예제는 매우 단순화되었습니다.범위 검사를 수행하지 않으며 가장자리를 제대로 처리하지 않습니다.사용된 필터(박스카)는 많은 아티팩트(링잉)를 발생시키기 때문에 특히 나쁜 저역통과 필터입니다.필터 설계에 대해 읽어보세요.

주파수 영역에서 필터를 구현할 수도 있습니다.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);

다시 말하지만, 이것은 단순화되었지만 아이디어를 얻을 수 있습니다.코드는 수학만큼 복잡해 보이지 않습니다.

이는 일반적으로 아날로그 신호의 일부를 전달하는 경향이 있는 전기 회로입니다.하이패스는 고주파수 부분을 더 많이 투과시키는 경향이 있고, 로우패스는 저주파수 부분을 더 많이 통과시키는 경향이 있습니다.

소프트웨어로 시뮬레이션할 수 있습니다.예를 들어 보행 평균은 저역 통과 필터로 작동할 수 있으며 보행 평균과 입력 간의 차이는 고역 통과 필터로 작동할 수 있습니다.

하이 패스 필터를 사용하면 높은-주파수(상세/지역 정보) 통과하다.
저역 통과 필터를 사용하면 낮은-주파수(대략/거친/글로벌 정보) 통과하다.

필터링은 데이터 내의 다양한 주파수에 다양한 수준의 감쇠를 적용하는 방식으로 데이터를 처리하는 행위를 설명합니다.

고역 통과 필터는 최소한의 감쇠를 적용합니다(예:높은 주파수의 경우 레벨을 변경하지 않고 그대로 두고, 낮은 주파수의 경우 최대 감쇠를 적용합니다.

저역 통과 필터는 그 반대입니다. 고주파에 감쇠를 적용하여 저주파수에 감쇠를 적용하지 않습니다.

사용되는 다양한 필터링 알고리즘이 있습니다.가장 간단한 두 가지 필터는 아마도 Finite Impulse Response 필터(일명.FIR 필터) 및 무한 임펄스 응답 필터(일명.IIR 필터).

FIR 필터는 일련의 샘플을 유지하고 각 샘플에 고정 계수(계열의 위치를 ​​기반으로 함)를 곱하는 방식으로 작동합니다.이러한 각 곱셈의 결과는 누적되어 해당 샘플의 출력이 됩니다.이를 곱셈-누산(Multiply-Accumulate)이라고 하며 전용 DSP 하드웨어에는 이를 수행하기 위한 특정 MAC 명령이 있습니다.

다음 샘플이 채취되면 시리즈의 시작 부분에 추가되고 시리즈에서 가장 오래된 샘플이 제거되며 프로세스가 반복됩니다.

필터의 동작은 필터 계수를 선택하여 고정됩니다.

이미지 처리 소프트웨어에서 종종 제공하는 가장 간단한 필터 중 하나는 평균화 필터입니다.이는 모든 필터 계수를 동일한 값으로 설정하여 FIR 필터로 구현할 수 있습니다.

다음은 한 번에 하나의 샘플씩 신호를 처리하는 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top