Estamos tratando de analizar el flujo alrededor del cilindro circular y tenemos un conjunto de valores de Cp que obtuvimos del experimento del túnel de viento. Inicialmente, comenzamos con una frecuencia de muestreo de 20 Hz e intentamos encontrar la frecuencia de desprendimiento de vórtices utilizando FFT en matlab. Tenemos una frecuencia de alrededor de 7 Hz. A continuación, hicimos el mismo experimento, pero lo único que cambiamos fue la frecuencia de muestreo: de 20 Hz a 200 Hz. Obtuvimos la frecuencia del desprendimiento de vórtices en torno a los 70 Hz (aquí es donde se ubica el pico en el gráfico). El gráfico no cambia independientemente de los datos de Cp que ingresamos. El único momento en que el pico difiere es cuando cambiamos la frecuencia de la muestra. Parece que el aumento en la frecuencia del desprendimiento de vórtices es proporcional a la frecuencia de la muestra y esto no parece tener ningún sentido. Cualquier ayuda con respecto al establecimiento de una relación entre la frecuencia de la muestra y la frecuencia de desprendimiento de vórtices se vería muy apreciada.matlab FFT. Relación de comprensión atascada entre la frecuencia y el resultado
Respuesta
Eche un vistazo a this pregunta relacionada. A pesar de que inicialmente se le preguntó sobre preguntó sobre VB las respuestas son genéricamente sobre FFT
esto probablemente no es un problema de programación, suena como un problema de experimento de medición
creo que la frecuencia de muestreo tiene que ser al menos dos veces la frecuencia de oscilación; de lo contrario, obtienes artefactos; esto podría explicar la diferencia. Tenga en cuenta que la relación de la frecuencia de FFT a la frecuencia de muestreo es de 0,35 en ambos casos. ¿Puedes repetir el experimento con tasas de muestreo más altas? Estoy pensando que si se trata de un cilindro estrecho con viento fuerte, puede vibrar/oscilar más rápido de lo que la velocidad de muestreo puede detectar ...
Espero que esto ayude - hay un 97.6% de probabilidades de que no lo haga sé de lo que estoy hablando ;-)
El problema que está viendo está relacionado con "aliasing de datos" debido a las limitaciones de la FFT que puede detectar frecuencias superiores a la Nyquist Frequency (mitad de la frecuencia de muestreo).
Con aliasing de datos, un pico en la frecuencia real se centrará alrededor (frecuencia real módulo frecuencia Nyquist). En su muestreo de 20 Hz (suponiendo que 70 Hz es la frecuencia real, eso da como resultado una frecuencia cero, lo que significa que no está viendo la información real. Una cosa que puede ayudarlo es utilizar FFT "ventana".
Otro problema que puede experimentar está relacionado con la generación de datos ruidosos a través de la medición de FFT única. Es mejor tomar muchos datos, usar ventanas con solapamiento y asegurarse de tener al menos 5 FFT que promedia para encontrar el resultado. Steven Lowe mencionó que también debería probar a mayor velocidad si es posible. Recomendaría muestrear a la velocidad más rápida que sus instrumentos puedan muestrear.
Por último, le recomiendo que lea algunos extractos del Numerical Recipes in C (< - enlace):
- Section 12.0 -- Introduction to FFT
- Section 12.1 (Discute aliasing datos)
- Section 13.4 (Discute FFT de ventanas)
No es necesario leer el código fuente en C - sólo las explicaciones. Numerical Recipes for C tiene una excelente información condensada sobre el tema.
Si tiene más preguntas, déjelas en los comentarios. Trataré de hacer mi mejor esfuerzo al responderles.
¡Buena suerte!
Si no es un problema de aliasing, parece que podría estar trazando la respuesta de frecuencia en una escala de frecuencia normalizada, que cambiará con la frecuencia de muestreo. Aquí está un ejemplo de una razonablemente buena manera de trazar una respuesta de frecuencia de una señal en Matlab:
Fs = 100;
Tmax = 10;
time = 0:1/Fs:Tmax;
omega = 2*pi*10; % 10 Hz
signal = 10*sin(omega*time) + rand(1,Tmax*Fs+1);
Nfft = 2^8;
[Pxx,freq] = pwelch(signal,Nfft,[],[],Fs)
plot(freq,Pxx)
Tenga en cuenta que la frecuencia de muestreo debe ser aprobada explícitamente al comando pwelch
con el fin de dar salida a los datos de frecuencia “reales”. De lo contrario, cuando cambie la frecuencia de muestreo, el contenedor donde se produce la resonancia parecerá cambiar, lo cual es similar al problema que describe.
He intentado usar el código de respuesta de frecuencia como el anterior pero parece que no tengo la caja de herramientas apropiada en Matlab. ¿Hay alguna manera de hacer lo mismo sin usar el comando fft? Hasta ahora, esto es lo que tengo:
% FFT Algorithm
Fs = 200; % Sampling frequency
T = 1/Fs; % Sample time
L = 65536; % Length of signal
t = (0:L-1)*T; % Time vector
y = data1; % Your CP values go in this vector
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);
% Plot single-sided amplitude spectrum.
loglog(f,2*abs(Y(1:NFFT/2)))
title(' y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
creo que podría haber algo mal con el código que estoy utilizando. No estoy seguro de que sin embargo.
Un colega mío ha escrito algunas buenas funciones con licencia GPL para el análisis espectral: http://www.mecheng.adelaide.edu.au/~pvl/octave/
(actualización: este código es ahora parte de uno de los módulos de octava:.
http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/signal/inst/
Pero puede ser complicado extraer solo las piezas que necesita de allí.)
Están escritos tanto para Matlab como para Octave y sirven principalmente como un reemplazo directo para las funciones análogas en Signal Processing Toolbox. (Por lo tanto, el code above debería funcionar bien).
Puede ayudar con su análisis de datos; mejor que tirar el tuyo con fft
y similares.
Creo que es necesario leer un poco sobre el procesamiento digital de la señal antes de que pueda comenzar a comprender todos los matices de la DFT (FFT). Si yo fuera tú, me llegar a tierra en ella por primera vez con este gran libro:
Discrete-Time Signal Processing
Si quieres más de un tratamiento matemático que realmente va a ampliar sus capacidades,
- 1. comprensión fft
- 2. FFT/IFFT: Frecuencia de muestreo y duración de la señal
- 3. La comprensión de la relación entre glutDisplayFunc y glutPostRedisplay
- 4. fft en matlab y java
- 5. MATLAB FFT XAXIS límites que ensucian y fftshift
- 6. Scipy/Numpy Análisis de frecuencia FFT
- 7. MATLAB - Falta fundamental de una FFT
- 8. Adelante FFT una imagen y FFT hacia atrás una imagen para obtener el mismo resultado
- 9. Calcula área bajo el gráfico FFT en MATLAB
- 10. ¿Cómo calcular la frecuencia de los datos usando FFT?
- 11. relación entre el flop y la metaestabilidad
- 12. Comprensión de la lista de Matlab
- 13. Relación entre GEF y GMF?
- 14. Python NumPy - FFT y FFT inversa?
- 15. Calcular autocorrelación usando FFT en matlab
- 16. FFT en Matlab y numpy/scipy dan resultados diferentes
- 17. Unidades de frecuencia cuando se usa FFT en NumPy
- 18. DSP - Filtrado en el dominio de la frecuencia a través de FFT
- 19. Relación entre el objeto MembershipUser y IPrincipal
- 20. Relación entre la clase System.Object y Structs
- 21. Relación entre AppDelegate y main.m
- 22. FFT inversa de Matlab de fase/magnitud solamente
- 23. relación entre log4j y apache.commons.logging
- 24. Relación entre C y C++
- 25. Relación entre HttpContext.Request.Cookies y HttpContext.Response.Cookies
- 26. Interpretación FFT
- 27. ¿Cuál es la relación entre "un" montón y "el" montón?
- 28. ¿Cuál es la relación entre el campo 'SYSTEM_PROPERTIES_MODE_ENVIRONMENT' y PropertyPlaceHolderConfigurer?
- 29. Relación entre el puerto y la dirección IP
- 30. Interoperando entre Matlab y C#
Es mejor editar su pregunta original que publicar una "respuesta" con una nueva pregunta. –