int fir4_c[] = {1129,60034,64720,5595,494,59867,65370,5724,5724,65370,59867,494,5595,64720,60034,1129}; int fir4_in[] = {0, 0, 16384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 8993, 1808, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096}; int fir4(int fir4_in[], int fir4_c[], int fir4_out[], int size) { int i,j, tmp1, tmp2, tmp3, tmp4; int x[16]; int adx = 0; int res = 0; for(i = 0; i < 16; i = i+1){ x[i] = 0; } for (j = 0; j < size; j = j+1) { x[adx] = fir4_in[j]; res = 0; for(i = 0; i < 16; i = i+4){ tmp1 = (x[adx]*fir4_c[i]); tmp2 = (x[(adx+1)%16]*fir4_c[i+1]); tmp3 = (x[(adx+2)%16]*fir4_c[i+2]); tmp4 = (x[(adx+3)%16]*fir4_c[i+3]); res = res + tmp1 + tmp2 + tmp3 + tmp4; adx = (adx+4)%16; } adx=(adx+1)%16; fir4_out[j] = res >> 16; } return 0; } int main(){ int fir4_out[16]; return fir4(fir4_in,fir4_c,fir4_out,16); }