FIR foldning i C
Jeg har lavet denne foldning for at teste at foldningen er korrekt, og det er den... tænk på at fract16 er det samme som int..Men nu skal denne funktion laves om til
conv(fract16 sampleData)
dvs at conv funktionene kun skal modtage 1 sample eller 1 plads af gangen af x[]... først x[0],x[2],x[3] osv.
x[] er en strøm af data og har derfor ikke en fast længde som i dette eksempel som jeg har lavet.
nu har jeg forsøgt at lave det om i 2 dage og er nu gået død :-(
men
void conv(fract16 y[],fract16 h[],fract16 x[]){
int x1=0;
int y1=0;
fract16 matrix[8][4]; // matrix som indeholder data
fract16 n1; // counter til løkke
fract16 n2; //counter til løkke
fract16 delay=0; // delay counter
fract16 temp=0;
// her foldes h[] med x[]
for (n1 = 0; n1 < 4; n1++) {
for(n2=0; n2 < 8; n2++){
if(n2-delay >=0)
matrix[n2][n1]= (h[n1]) * (x[n2-delay]);
else
matrix[n2][n1]=0;
}
delay++;
}
// addition af matrixen laves herunder ved at bytte om på løkkerne, og resultatet ligges i udgangssignalet y[]//
for (x1 = 0; x1 < 8; x1++) {
for(y1=0; y1 < 4; y1++){
temp=temp+matrix[x1][y1];
}
y[x1]=temp;
temp=0;
}
}
////////////////////main/////////////////////////////////
int main(void)
{
fract16 y[8];
fract16 h[] = {3,-1,2,1}; // impulsresponse
fract16 x[]= {2,4,6,4,2,0,0,0};
conv(y,h,x); // kalder funktion som folder
int i=0;
for (i=0;i<8;i++)
printf("%d ",y[i]);
return 0;
}