2014-01-13 1 views
0

제가운반 negetive 인덱스 필터

C. I가 in[-ve index]=0을해야
int a[3]={ 1 , -1 , 2 }; 
int b[3]={1,2,3} 
int in[100]=some numbers; 
for(i=0;i<100;i++) 
    y[i]=(b[0]*in1[i])+(b[1]*in[i-1])+(b[2]*in[i-2])-(a[1]*y[i-1])-(a[2]*y[i-2]); ` 

에서 (IIR 필터)이 차분 방정식을 구현해야한다. 이 차이 방정식을 처리하는 방법? if 문은 DSP에 구현되어 있기 때문에 사용할 수 없습니다.

또한 누구나 C에서 포인터를 사용하여 순환 버퍼를 구현하도록 제안 할 수 있습니다. 이것이 내 원인을 도울 것입니다.

+0

은 _i-2_ 확인이 –

답변

2

먼저 in 배열의 처음 두 항목에 대한 계산을 수행합니다. 여기서 음수 색인을 가진 항목을 0으로 대체 한 다음 대신 2에서 반복하십시오.

y[0]=(b[0]*in1[0])+(b[1]*0) +(b[2]*0)-(a[1]*0) -(a[2]*0); 
y[1]=(b[0]*in1[1])+(b[1]*in[0])+(b[2]*0)-(a[1]*y[0])-(a[2]*0); 
for (int i = 2; i < 100; ++i) 
    ... 

0으로 곱셈을 수행하기 때문에 이러한 계산은 물론 단축 될 수 있습니다.


원형 버퍼로서 단순히 고정 된 크기의 배열, 및 그 다음에 제한하는 모듈로 연산을 사용하여 계속적으로 증가하는 인덱스를 만든다.

그래서

int *circular[10]; /* A ten-entry circular buffer for integer pointers */ 
int circularIndex = 0; 

/* Adding a new entry */ 
circular[circularIndex] = somePointer; 
circularIndex = (circularIndex + 1) % 10; /* Make sure the index goes from 0 to 9 */ 
+0

첫 번째 제안에서 _i_ 시작은 가능하지 않습니다. 고차 필터 (5 차 고려)를 테스트하려는 경우 y [0], y [1], y [2], y [3], y [4]에 대해 별도의 문장을 계속 추가 할 수 없습니다. 순환 버퍼 예제를 가져 주셔서 감사합니다. 위의 차이 방정식에 대해 IIR 필터를 구현하는 지연 라인 버퍼 방법을 제안 할 수 있습니까? – user3189237

관련 문제