You are on page 1of 2

#include <prototype.

h>
#include <stdio.h>
#define DataBlockSize 200 /* dimensiunea unui bloc de date */
#define BlockLength 50 /* numarul de blocuri de date */

Word16 x[DataBlockSize],y[DataBlockSize];
Word16 w,w1[2],w2[2];
//Word16 b[]={WORD16(b0/2), WORD16(b1/2), WORD16(b2/2)};
//Word16 a[]={WORD16(a1/2), WORD16(a2/2)};

Word16 b[][2]={WORD16(-0.277183094637896), WORD16(0.084986368669828),


WORD16(0.545035143046600)};
Word16 a[][2]={WORD16( -0.5044), WORD16(0.6451),WORD16(-0.4487)};

Word32 sum;

Word16 c = WORD16(-0.207720882546118);
Word32 sum;
int main()
{
unsigned short j,n,i;
FILE *fpx,*fpy;

fpx=fopen("x.dat","r+b");
if (!fpx)
printf("\nx Nu s-a deschis");

fpy=fopen("y.dat","w+b");
if (!fpy)
printf("\ny Nu s-a deschis");

//Implementare structura paralel filtru


for (i=0; i<BlockLength; i++)
{
fread(x,sizeof(Word16),DataBlockSize,fpx); // aducere esantioane din memorie
for (n=0; n<DataBlockSize; n++)
{
y[n] = mult(c,x[n]);
for (j=0; j<2; j++)
{
sum = L_deposit_h(x[n]);
sum=L_msu(sum,a[j][0],w1[j]);
w=msu_r(sum,a[j][1],w2[j]);

sum=L_mult(b[j][0],w);
sum=L_mac(sum,b[j][1],w1[j]);
y[n]=add(round(sum),y[n]);
w2[j]=w1[j];
w1[j]=w;
}

}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);

}
fclose(fpx);
fclose(fpy);
return(0);
}

You might also like