1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
float * RaisedCosineSQRT(float nb_periodes,float nb_points,float roll_off)
{
/*------déclaration et initialisation des variables------*/
int i,n;
float t;
float N=nb_periodes;
float D=nb_points;
float e=roll_off;
float *w=NULL;
float racineD,x,oneplus,oneminus,den;
w=(float *)malloc(sizeof(float) * (N*D)); /*Allocation en mémoire*/
racineD = sqrt(D);
for(i=0;i<N*D;i++)
{ w[i]=0; /*vecteur de 0*/
}
for(n=0;N*D;n++)
{ t=n-N*D/2-1;
if(t==0)
{
w[n]=(4*e/3.1416+1-e)/ racineD;
}
x=t/D;
if(e==0)
{
w[n]=racineD*sin(3.1416*x)/(3.1416*t);
}
oneplus=(1.0+e)*3.1416/D;
oneminus=(1.0-e)*3.1416/D;
den=t*t*16*e*e-D*D;
if(den==0)
{
w[n]=(D*racineD/(8*e*3.1416*t))*(oneplus*sin(oneplus*t)-(oneminus*D/(4*e*t))*cos(oneminus*t)+(D/(4*e*t*t))*sin(oneminus*t));
}
w[n]=(4*e/(3.1416*racineD))*(cos(oneplus*t)+sin(oneminus*t)/(x*4*e))/(1.0-16*e*e*x*x);
}
for(i=0;i<N*D;i++)
{ printf("\nw[i]=%f",w[i]); /*vecteur de 0*/
}
return(w);
} |