https://la.mathworks.com/help/curvefit/fourier.html
Ajustar modelos de Fourier
Sobre los modelos de serie de Fourier
Una serie de Fourier describe una función periódica como una suma de funciones de seno y coseno. Una función periódica arbitraria se puede descomponer en componentes simples mediante el uso de una serie de Fourier. Estos componentes son fáciles de integrar, diferenciar y analizar. Por esta razón, las series de Fourier se emplean con frecuencia para aproximar señales periódicas.
Las series de Fourier se representan con varios formatos. Curve Fitting Toolbox™ usa la serie de Fourier trigonométrica
en la que a0 modela un término constante (intercepto) en los datos y se asocia con el término coseno i = 0, w es la frecuencia fundamental de la señal y n es el número de términos (armónicos). Curve Fitting Toolbox admite la regresión de series de Fourier para 1 ≤ n ≤ 8.
Para obtener más información sobre las series de Fourier, consulte Análisis y filtrado de Fourier.
Ajustar el modelo de Fourier de forma interactiva en la app Curve Fitter
En este ejemplo se muestra cómo utilizar la app Curve Fitter para ajustar un modelo de Fourier a los datos.
Cargue los datos de muestra de señal de sonido.
load gong.mat
Las variables y
y Fs
contienen datos de la señal de sonido y frecuencia para un sonido de gong, respectivamente. Cree un clip de sonido almacenando los primeros 1000 elementos de y
en un vector denominado gongClip
.
gongClip = y(1:1000);
Para calcular el tiempo correspondiente de cada elemento en gongClip
, divida el índice de los elementos por Fs
.
t = [1:1000]./Fs;
Abra la app Curve Fitter desde la línea de comandos.
curveFitter
También puede hacer clic en Curve Fitter dentro del grupo Math, Statistics and Optimization de la pestaña Apps.
En la app Curve Fitter, seleccione las variables de datos para el ajuste. En la sección Data de la pestaña Curve Fitter, haga clic en Select Data. En el cuadro de diálogo Select Fitting Data, seleccione t
como el valor X data y gongClip
como el valor Y data.
La app representa los puntos de datos a medida que selecciona variables. De forma predeterminada, la app ajusta un polinomio a los datos. Para ajustar un modelo de Fourier, en la sección Fit Type de la pestaña Curve Fitter, haga clic en Fourier
.
La app se ajusta a un modelo de Fourier de un solo término.
El modelo de Fourier ajustado de un término es una función periódica con un comportamiento oscilatorio simple. En el panel Results se muestra la ecuación general para el modelo, las estimaciones de los coeficientes ajustados con intervalos de confianza del 95%, la frecuencia fundamental y las estadísticas de bondad de ajuste.
El modelo de Fourier ajustado de un término tiene un error cuadrático medio (RMSE) de 0,1996. Para comparar el modelo de Fourier de un término con un modelo de Fourier de cuatro términos, en el panel Fit Options, seleccione 4
para Number of terms. La app ajusta un modelo de Fourier de cuatro términos a los datos.
El modelo de Fourier ajustado de cuatro términos tiene un comportamiento oscilatorio más complejo que el modelo de Fourier de un término. Un RMSE de 0,1685 para el modelo de cuatro términos indica que cuatro términos predicen los datos de sonido con mayor precisión que uno solo. Sin embargo, la gráfica muestra que algunos de los puntos de datos de gongClip
están fuera del rango del modelo de cuatro términos.
Exporte el modelo de Fourier ajustado de cuatro términos al área de trabajo haciendo clic en Export en la sección Export y, a continuación, seleccionando Export to Workspace
. En el cuadro de diálogo, desmarque la segunda y la tercera opción. Guarde el ajuste en el nombre de la variable en el recuadro junto a la primera opción.
Puede escuchar los datos de sonido de gongClip
utilizando la función sound
.
sound(gongClip,Fs)
pause(2) % Allow gongClip to play before executing next line
Para obtener los datos de sonido para la aproximación del modelo de Fourier de gongClip
, use feval
para evaluar gongFourierModel
en los tiempos de t
. Reproduzca los datos de sonido aproximados.
gongClipApprox = feval(gongFourierModel,t); sound(gongClipApprox,Fs)
Los dos clips tienen el mismo tono promedio aproximado. Sin embargo, los datos de sonido aproximados no tienen tantas fluctuaciones de tono como los datos de sonido de gongClip
.
Ajustar el modelo de Fourier en la línea de comandos
En este ejemplo se muestra cómo ajustar un modelo de Fourier a los datos empleando la función fit
.
Ajustar modelos de Fourier de dos términos
Cargue los datos de El Niño-Southern Oscilation (ENSO).
load enso;
La variable pressure
contiene datos para la diferencia de presión atmosférica promediada entre la Isla de Pascua, Chile, y Darwin, Australia. La variable month
contiene datos del mes en que se produjo cada diferencia de presión.
Represente pressure
contra month
.
plot(month,pressure)
Los datos de presión oscilan entre 0 y 18, lo que indica que se pueden describir con una serie de Fourier.
Para ajustar un modelo de Fourier de dos términos, utilice el modelo de Fourier de la biblioteca. Especifique el tipo de modelo como fourier
seguido del número de términos. Guarde los valores estadísticos de bondad de ajuste para compararlos más adelante.
[f2,gof2] = fit(month,pressure,"fourier2")
f2
es un objeto cfit
que contiene la fórmula general, las estimaciones de coeficientes con límites de confianza del 95% y frecuencia fundamental para el ajuste w
. Los límites de confianza en a2
y b2
cruzan por cero, por lo que no hay suficiente evidencia para concluir que difieren de cero o que el modelo ajustado difiere de un modelo de Fourier de un término. El error cuadrático medio (RMSE) de 2,6329 es útil para comparar la precisión de f2
con la precisión de otros ajustes.
Para calcular el periodo a partir de la frecuencia fundamental, utilice la fórmula T = 2*pi/w
.
w = f2.w
T = 2*pi/w
El periodo del modelo de Fourier de dos términos ajustado es de aproximadamente 12 meses, o un año.
Represente f2
con una gráfica de dispersión de los datos.
plot(f2,month,pressure)
La forma de f2
es similar a la forma de un modelo de Fourier de un término, y los picos de oscilación se producen aproximadamente una vez cada 12 meses.
Ajustar modelos de Fourier de siete términos
Ajuste un modelo de Fourier de siete términos a los datos. Guarde las estadísticas de bondad de ajuste.
[f7,gof7] = fit(month,pressure,"fourier7")
f7
contiene varios coeficientes con límites de confianza que cruzan por cero, por lo que no hay suficiente evidencia para concluir que los términos correspondientes aumentan la precisión del modelo de Fourier ajustado. El RMSE de 2,2483 es menor que el error RMSE de f2
, lo que confirma que el modelo de Fourier de siete términos predice la presión de manera más precisa que el modelo de Fourier de dos términos.
Para calcular el periodo a partir de la frecuencia fundamental, utilice la fórmula T = 2*pi/w
.
w = f7.w
T = (2*pi)/w
El periodo del modelo de Fourier de 7 términos ajustado es de aproximadamente 83 meses, o aproximadamente 7 años. La amplitud de los coeficientes ajustados determina qué términos contribuyen más al valor previsto de la diferencia de presión.
El periodo de una sinusoide del formato sin(Ax)
o cos(Ax)
lo proporciona la fórmula T = 2*pi/|A|
. a7
y b7
son los coeficientes más grandes.
T = 2*pi/(w*7)
El periodo de los términos correspondientes a a7
y b7
es de aproximadamente 12 meses, lo que indica que el ciclo anual es el más fuerte.
Use la misma fórmula para calcular los periodos de los términos siguientes:
Los términos
a1
yb1
tienen un periodo de 7 años cada uno.Los términos
a2
yb2
tienen un periodo de 3,5 años (7/2) cada uno. Los coeficientesa2
yb2
tienen una magnitud mayor que a1 y b1, por lo que el ciclo de 3,5 años contribuye más al valor previsto de la diferencia de presión que el ciclo de 7 años.Los términos
a3
yb3
son fuertes, lo que indica un ciclo de 2,3 años (7/3).
Los términos más pequeños, como a6
, b6
, a5
y b5
, son menos importantes para el ajuste.
Represente f7
con una gráfica de dispersión de los datos.
plot(f7,month,pressure)
El modelo de Fourier de 7 términos oscila en un patrón más complejo y captura un rango más amplio de valores en la diferencia de presión que el modelo de Fourier de un solo término. El ciclo se repite aproximadamente cada 84 meses, o 7 años. Habitualmente, el calentamiento de El Niño se produce en intervalos irregulares de entre dos y siete años, y dura entre 9 meses y 2 años. La duración media del periodo es de cinco años. Los resultados del modelo reflejan algunos de estos periodos.
Definir los puntos de partida
La función fit
utiliza el argumento de entrada data
para calcular los puntos de partida optimizados de los cálculos del coeficiente y la frecuencia fundamental. Los modelos de serie de Fourier son especialmente sensibles a los puntos de partida y es posible que los valores optimizados sean precisos solo para algunos términos en las ecuaciones asociadas. Puede anular los puntos de partida optimizados especificando el argumento nombre-valor StartPoint
.
Los valores extremos en la gráfica de dispersión de los datos sugieren que puede estar presente un ciclo de 4 años. Para confirmar esta sugerencia, establezca el punto de partida de la frecuencia fundamental en el valor correspondiente a un periodo de 8 años, o 96 meses. Un periodo de 8 años para el modelo de Fourier ajustado aumenta el periodo de los términos a2
y b2
de 3.5
a 4
.
w_8 = (2*pi)/96
Para encontrar el índice de la frecuencia fundamental en el vector de celdas de nombres de coeficientes de f7
, utilice la función coeffnames
.
coeffnames(f7)
La frecuencia fundamental se encuentra en la última entrada del vector de nombres de coeficientes. Cree un vector de valores de coeficientes a partir de los coeficientes f7
y sustituya el valor de la frecuencia fundamental con el valor correspondiente a un periodo de 8 años.
coeffs = coeffvalues(f7); coeffs(:,end) = w_8
Ajuste un modelo de Fourier de siete términos a los datos de la diferencia de presión utilizando los coeficientes con el nuevo valor de la frecuencia fundamental como punto de partida. Guarde las estadísticas de bondad de ajuste.
[f7_8,gof7_8] = fit(month,pressure,"fourier7",StartPoint=coeffs)
Los coeficientes de f7_8
están ligeramente desplazados con respecto a los coeficientes de f7
. La RMSE más alta para f7_8
indica que f7
es un mejor ajuste para los datos. Represente ambos ajustes para comparar los modelos visualmente.
plot(f7_8,month,pressure) hold on plot(f7, 'b') hold off legend("Data","f7_8","f7")
La gráfica muestra que f7
captura la variación de los datos de la diferencia de presión de forma más precisa que f7_8
.
Mostrar iteraciones de ajuste de Fourier
Una alternativa a especificar opciones adicionales mediante argumentos de par nombre-valor es pasar un objeto fitoptions
a la función fit
. Para ver las opciones disponibles para un ajuste del modelo de Fourier, pase el nombre del modelo como argumento de entrada a la función fitoptions
.
fitoptions("fourier7")
Cree un objeto fitoptions
y especifique que se muestre la salida tras cada iteración.
optionsf7 = fitoptions("fourier7",Display="iter")
optionsf7
es un objeto fitoptions
que contiene las opciones de un ajuste de modelo de Fourier de 7 términos.
Para ver los pasos de iteración involucrados en la creación de f7
, ajuste otro modelo de Fourier de 7 términos usando las opciones de optionsf7
.
f7_iter = fit(month,pressure,"fourier7",optionsf7)
Para investigar más el ajuste del modelo de Fourier, puede experimentar especificando diferentes opciones disponibles para el algoritmo de ajuste de NonlinearLeastSquares
. Para obtener más información, consulte fitoptions
.
Consulte también
Apps
Funciones
fit
|fittype
|fitoptions
No hay comentarios:
Publicar un comentario