TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: mateamargo en 28 de Septiembre de 2007, 16:49:41
-
hola todos. Estoy expeimentando con FFT, y necesito generar una tabla de "Twiddle Factors" de 1024 puntos, ya que la mas grande en C30 y MikroC es de 512. Tengo el siguiente codigo para generar los valores:
float real, imag;
void main(){
int i, nn;
float frec ,pi;
nn = 128;//array lenght
nn = nn/2;
pi = 4.0* atan(1.0);
frec = 2.0*pi*0.5/(float)nn;
for ( i=0; i<=nn-1; i++){
real = cos((float)i*frec); //real coefficients
imag = sin((float)i*frec); //imag coeff
}
}
Esto funciona, pero los resultados son en formato float, necesito convertirlos a radix 1.15.
Ej:
9.98795456205172e-001(float) --------> 0x7FD9 (radix 1.15)
Pregunto si alguien conoce un algoritmo para hacerlo.
Saludos
Ricardo
-
Creo que basta con multiplicar tu float por 32768 y meterlo en una variable signed int16
-
Existe la función la float2fract, está en la librería dsp.h, que convierte números flotantes al formato fraccional o 1.15, esta función sigue siendo lenta para la versión 3.01. Piensas hacer la FFT con números flotantes o en formato 1.15.
saludos,,
-
Gracias Nocturno y Renatox por sus aportes. Demoré en responderles xq estuve ausente unos días.
La solución es multiplicar el float por 32768, que es 2^N-1 , siendo N el nro de bits del float (en este caso 16bits). Los valores imaginarios deben multiplicarse por -32768, y los resultados ponerlos en una variable del tipo int
Lo que estoy intentando es una FFt de 1024 o mas muestras.
Trabajo con el compilador y hardware de MIkroelektronika, y en la librería de ejemplos hay una FFT de escasa resolución para mi aplicación. La pude llevar hasta 512 muestras, pero intento mejorala hasta donde se pueda con el 30F6014,
y en principio necesito generar la tabla de twiddle factors de 1024 valores.
No probé la funcion float2frac.
Les comento que toco bastante "de oído", trabajo mas a golpes de inspiración que con fundamentos sólidos, por eso a veces me trabo en cosas que para otros pueden resultar triviales.
Saludos y gracias,
Ricardo