2017-02-28 3 views
2

vDSP_biquad 함수를 단극 필터로 사용하고 싶습니다.vDSP_biquad를 단극 필터로 사용

내 하나 개의 극 필터는 다음과 같습니다 :이 하나의 극이 잘 작동하지만, 물론 내가를 사용하려는 이유입니다 최적화 아니에요

b1 = exp(-2.0 * M_PI * (_frequency/sampleRate)); 
    a0 = 1.0 - b1; 

output[i] = onePole->z1 = input[i] * onePole->a0 + onePole->z1 * onePole->b1; 

속도를 높이기 위해 프레임 워크를 가속화하십시오.

vDSP_biquad는 biquad 구현의 Direct Form II를 사용하기 때문에 계수를 설정하여 1 극 필터로 사용할 수 있어야합니다. https://en.wikipedia.org/wiki/Digital_biquad_filter#Direct_form_2

filter->omega = 2 * M_PI * freq/sampleRate; 
filter->b1 = exp(-filter->omega); 
filter->b0 = 1 - filter->b1; 
filter->b2 = 0; 
filter->a1 = 0; 
filter->a2 = 0; 

그러나, 이것은 하나의 극 필터로 작동하지 않습니다. (biquad의 구현은 괜찮습니다. 다른 많은 필터 유형에도이 계수를 사용합니다.이 계수는 원하는 효과가 없습니다.)

내가 뭘 잘못하고 있니?

Accelerate 또는 기타 방법을 사용하여 1 극 필터를 최적화하는 다른 방법에 대해서도 열려 있습니다.

답변

2

공식 in the Apple docs은 다음과 같습니다 당신의 위의 코드에서

y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]

, 당신은 두 개의 입력 전에이다 b1을 사용하고 있습니다. 1 극의 경우 이전 출력 인 y[n-1]을 사용해야합니다.

그래서 난 당신이 원하는 계수가 생각 :

a1 = -exp(-2.0 * M_PI * (_frequency/sampleRate))

b0 = 1.0 + a1

+0

감사합니다. 정리하자면 잠시 시간이 걸렸지 만, 약간의 오류가 있습니다. 여기서 a1은 음수이므로 b0 = 1.0 + a1이어야합니다. – olynoise

+1

@olynoise Fixed :) – Taylor