Cómo obtener datos recopilados por AD y realizar la transformación FFT
kkfft(doble pr[], doble pi[], int n, int k, doble fr[], doble fi[], int l, int il) p>
{
int it, m, is, i, j, nv, l0;
double p, q, s, vr, vi, poddr, poddi;
for (it=0; itlt; =n-1; it )
{
m = it
is = 0;
para (i=0; ilt.= k-1; i )
{
j = m/2; p> es = 2*es (m-2*j);
m = j
}
fr[it] = pr[is] ;
fi[it] = pi[is];
}
pr[0] = 1.0;
pi[0 ] = 0,0;
p = 6,283185306/(1,0*n);
pr[1] = cos(p>
pi[1] = -sin(p);
si (l!=0)
pi[1]=-pi[1];
para (i=2 ilt;=n-1; i )
{
p = pr[i-1]*pr[1];
q = pi[ i-1]*pi[1];
s = (pr[i-1] pi[i-1])*(pr[1] pi[1]); p> pr[i] = p-q;
pi[i] = s-p-q;
}
para (it=0; itlt;=n-2 ;it=it 2)
{
vr = fr[it];
vi = fi[it];
fr [it] = vr fr[it 1];
fi[it] = vi fi[it 1];
fr[it 1] = vr-fr[it 1] ;
fi[it 1] = vi-fi[it 1];
}
m = n/2;
nv = 2;
for (l0=k-2; l0gt; =0; l0--)
{
m = m/2;
nv = 2*nv;
para (it=0; itlt; = (m-1)*nv; it=it nv)
para ( j=0; jlt;=( nv/2)-1; j )
{
p = pr[m*j]*fr[it j nv/2];
q = pi[m*j]*fi[it j nv/2]
s = pr[m*j] pi[m*j];
s = s*(fr[it j nv/ 2] fi[it j nv/2]);
poddr = p-q
poddi = s-p-;
q;
fr[it j nv/2] = fr[it j]-poddr
fi[it j nv/2] = fi[it j]-poddi;
fr[it j] = fr[it j] poddr;
fi[it j] = fi[it j] poddi
} p>
}
if (l!=0)
{
for (i=0; ilt;=n-1; i)
{
fr[i] = fr[i]/(1.0*n
fi[i] = fi[i]/(1.0); *n);
}
}
si (il!=0)
{
para (i=0; ilt;=n-1; i )
{
pr[i] = sqrt(fr[i]*fr[i] fi[i]* fi[i]);
if (fabs(fr[i])lt;0.000001*fabs(fi[i]))
{
if ((fi[i]*fr[i])gt; 0 )
pi[i] = 90.0
else
pi[i] = -90.0;
}
else
pi[i] = atan(fi[i]/fr[i])*360.0/6.283185306 p> p>
}
}
retorno
}
void main()
{ p>
doble s1[128], s2[128], s3[128], s4[128], TT, TM;
int i, f, ff
f =128;
ff=4;
para(i=0; ilt; 128; i )
{
TT= i;
TM=TT/f
s1[i]=2*sin(2*3.14*ff*TM) 10; }
kkfft(s1, s2, 128, 7, s3, s4, 0, 1);
printf("s1=f\n", s1[0]/128); );
getch();
for(i=1; ilt; 12; i )
{
printf(" s1= f\n", s1[i]/64, i);
}
getch();
}
Este es un fft compilado bajo wintc, donde double pr[], double pi[], double fr[], double fi[] son matrices de entrada i )
{ p >
TT=i;
TM=TT/f
s1[i]=2* sin(2*3.14*ff*TM) 10; p >
}
s1 corresponde a pr
Después de ejecutar, puede ver el componente de CC (i=0 puntos) y el componente de CA (i=4 puntos) p>
Explicación: kkfft(s1, s2, 128, 7, s3, s4
, 0, 1);
s1 corresponde al valor solo del anuncio, s2 es el valor del anuncio. valor, s2 es la parte imaginaria del muestreo de anuncios, generalmente 0, 128 puntos de muestreo deben ser n veces de 2, 7 es n, s3, s4 las tuberías de retorno son los valores de retorno secundarios, 0, 1. es el símbolo en el programa
fft El significado del resultado: ella es una matriz como S1 [n], luego s1 [0] / número de puntos de muestreo es el valor del componente DC,
y la señal real está en la matriz La frecuencia de respuesta es f=n*frecuencia de muestreo/número de puntos de muestreo;
kkfft(double pr[], double pi[], int n, int k, double fr [], double fi[], int l, int il)
Se ejecuta en el microcontrolador 51 (020, 120, 060);
La frecuencia de respuesta de la señal real en la matriz es f=n*muestreo; frecuencia/número de puntos de muestreo.