Avatar billede mickni33 Nybegynder
31. maj 2005 - 12:38 Der er 1 løsning

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;
}
Avatar billede mickni33 Nybegynder
01. juni 2005 - 13:00 #1
void conv(fract16 data)
{   
    for(k = 3; k > 0; k--)
    {
        roundedBufferFF[k] = roundedBufferFF[k-1];
    }
           
    roundedBufferFF[0] = data;
    yn = 0;
   
    for(f = 0; f < 4; f++)
    {
        mul=mult_fr1x32(filterCoeffFF[f],roundedBufferFF[f]);               
        yn_fract = add_fr1x32(yn_fract,mul);   
    }   

}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I dag 15:08 Http client med X509Certificate2 Af joki i C#
I dag 13:02 Hjemmenetværk Af Andfer i LAN/WAN
I dag 11:17 Chrombook Af lurup i Andre styresystemer
I går 15:20 Core i5-7200 processor Af Wombat i Windows
I går 15:07 Hjælp med HTML og CSS Af Nojsa i HTML