Pregunta

Si la magnitud máxima m= a ^ 2 + b ^ 2 de la transformada DFT corresponde a la frecuencia F, (A - Real, B - Salida imaginaria de DFT, a frecuencia F) entonces es correcto hacer lo siguiente:

for (j = 0; j < size; ++j) {
    data[j] -=  (A*cos(2*PI*F*j/dfts) -
                 B*sin(2*PI*F*j/dfts)) / dfts;
}

Para cancelar (restar) esa influencia de frecuencia de los datos de onda originales? Se supone que los datos son una suma de varios senos y cosus con diferentes frecuencias y multiplicado por diferentes coeficientes.

editar1: Podría lograr la cancelación restando, y el resultado es correcto.Había un error en lo anterior, pero es posible hacerlo.Si está interesado puedo publicar la forma de hacerlo.

edit2: Y si hace la siguiente transformada DFT, obtendrá un valor muy pequeño, cerca de cero en los valores A y B. Pero debe recordar, que los datos originales pueden ser la suma de 4 frecuencias (sines y cosus), pero la transformada DFT le dará tanto como el tamaño de DFT se divide por 2.

¿Fue útil?

Solución

no - eso no funcionará.Solo podía funcionar si el componente de dominio de tiempo coincidía con la frecuencia de FFT Bin exactamente y la fase del componente es constante en toda la ventana de muestra, e incluso si este fuera el caso, aún necesitarías cuidar dede fase en su resta.

Idealmente, debe eliminar (es decir, cero) el componente en el dominio de frecuencia y luego hacer un FFT inverso.Tenga en cuenta que probablemente no quiera simplemente cero el contenedor de interés en el dominio de la frecuencia, ya que esto producirá artefactos en el dominio de tiempo después de que usted inverso FFT, deberá aplicar una función de la ventana al contenedor de interés y adyacentecontenedores

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