이 DSP 프로 세서 용으로 뭔가를 구현하고 싶습니다. http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF 여기에 해당 데이터 시트가 있습니다.DSP 프로세서 워드 크기
여기에 구현하려는 기능 중 하나입니다. 모든 변수는 32 비트 int 인 내 [컴퓨터]의 mem [j]를 제외한 16 비트 int입니다. (고정 소수점 산술) IIR 필터 (직접 형식 2 전치)
15-16 페이지를 보면 int32를 저장할 수 있는지 여부를 알 수 없습니다. 왜냐하면 나는 다른 버스 크기를 볼 수 있기 때문이다 ..
만약 mem [j] 값이 24 비트를 초과하기 때문에 24가된다면 ...
그것은 56bit 어큐뮬레이터를 가지고 있지만 괜찮습니다. 나는 이것이 메모리 (32 비트 또는 누산기에서 48)에 저장할 수 있는지 모르겠다.
아직 평가 보드 및 문서가 없다.
그래서 제 질문은 이상의 24 비트를 지원하거나 내가 할 수있는 코드에 변경이 있는지 여부입니다 ... 그것은 아마도 지원
void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
{
int i,j;
spx_word16_t xi,yi,nyi;
for (i=0;i<N;i++)
{
xi= x[i];
//yi=saturate (x[i]+mem[0]>>13)
yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767));
//nyi=-yi
nyi = NEG16(yi);
for (j=0;j<ord-1;j++)
{
//mem[j]= (num[j] *xi + mem[j+1]) + den[j] * nyi
mem[j] = MAC16_16(MAC16_16(mem[j+1], num[j],xi), den[j],nyi);
}
//mem[ord-1]=(num[ord-1] * xi) + (den[ord-1] *nyi)
mem[ord-1] = ADD32(MULT16_16(num[ord-1],xi), MULT16_16(den[ord-1],nyi));
y[i] = yi;
}
}