Pregunta

Sé que si tenemos algunos datos que representan algunas de onda, por ejemplo, valores de la línea de imagen, podemos utilizar transformada de Fourier para obtener la función de frecuencia de esa onda. Pero tenemos N valores en los puntos x = 0 ... N-1 Y obtenemos sólo N frecuencias en la salida. Así que quiero analizar la ola en todo el rango [0, N-1] Por ejemplo en el punto u = 1,5. ¿Cómo puedo hacerlo?

¿Fue útil?

Solución

Cálculo de la transformada de Fourier valor para cualquier frecuencia de un conjunto de muestras es realmente muy fácil:

F(w)= sum[over all sample indices k] ( f(t_k) e^(i w t_k) )

En cuanto al Código, se hace algo como esto:

float Fourier(float omega) {
  Complex a(0.0); // think "a is for accumulator"
  for(int k=0; k<value.size(); ++k) {
    float time= t_start + k*dt;
    float theta= omega * time;  // this is (w t_k) from above
    a+= value[k] * Complex(cos(theta), sin(theta));
  }
  return a;
} // note, I have explicitly written out e^(i theta) = cos(theta) + i sin(theta)

Si usted tiene tiempos de muestreo irregular, se puede utilizar una vez [] vector / matriz junto con su valor [] vector / matriz, en lugar de calcular el tiempo del índice. (Sin embargo, tenga cuidado, ya que las muestras espaciadas irregularmente no necesariamente significan lo que piensan que lo hacen! Si este comentario es de alguna manera misteriosa, se pega con muestras regulares ...)

El único problema es que, si desea para generar N frecuencias espaciadas regularmente sobre la base de muestras regulares, haciendo de la manera anterior se llevará a O (n ^ 2) el tiempo. La Fast Transformada de Fourier es un algoritmo que hace esto en O (N log N) tiempo.

Otros consejos

Es necesario interpolar los datos de esos puntos intermedios.

Han pasado más de 10 años desde que he hecho ninguno de estos, pero creo Matlab tenía algunos métodos FT que le permiten hacer lo que quería. Al menos eso es lo que usamos en nuestras señales lineales y clases DSP

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top