3.0 KiB
1. 📄 Resumen: Ajuste No Lineal de Señales por Mínimos Cuadrados en Python
Este código realiza un ajuste por mínimos cuadrados no lineales para estimar los parámetros de una señal compuesta por una suma de funciones coseno. El modelo de señal es:
x(t) = \sum_{i=0}^{N} \alpha_i \cdot \cos(\omega_i t + \phi_i)
donde los parámetros \alpha_i
(amplitud), \omega_i
(frecuencia) y \phi_i
(fase) son desconocidos y deben ser estimados.
1.1. 🔧 Objetivo
A partir de una muestra de la señal x(t)
, recuperar los parámetros de cada coseno usando mínimos cuadrados no lineales con scipy.optimize.curve_fit
.
1.2. 🧱 Estructura del Código
1. Definición de parámetros verdaderos
Se definen las amplitudes, frecuencias y fases de la señal original que queremos simular.
alpha_true = [2.0, 1.5, 1.0]
omega_true = [1.5, 3.2, 5.0]
phi_true = [0.1, -0.5, 1.2]
2. Generación de la malla temporal
Se crean n
muestras en el intervalo [0, 2\pi]
.
t = np.linspace(0, 2*np.pi, n_muestras)
3. Generación de la señal
Se suma cada coseno con sus parámetros reales:
x(t) = \sum \alpha_i \cdot \cos(\omega_i t + \phi_i)
4. Modelo para ajuste
Se define una función que toma un vector plano de parámetros y devuelve la señal modelada:
def modelo(t, *params):
for i in range(0, len(params), 3):
a = params[i]
w = params[i+1]
p = params[i+2]
x += a * np.cos(w * t + p)
5. Inicialización de parámetros
Se eligen valores iniciales para los parámetros del modelo.
params_iniciales = [1.0, 2.0, 0.0, 1.0, 3.0, 0.0, 1.0, 4.0, 0.0]
6. Ajuste con curve_fit
Se aplica el método de mínimos cuadrados no lineales:
popt, _ = curve_fit(modelo, t, x, p0=params_iniciales)
7. Extracción de parámetros estimados
Los parámetros ajustados se separan en amplitudes, frecuencias y fases:
alpha_est = popt[::3]
omega_est = popt[1::3]
phi_est = popt[2::3]
8. Comparación de resultados
Se imprime la comparación entre parámetros reales y estimados.
9. Gráfico de validación
Se grafican las señales original y ajustada para visualizar la calidad del ajuste.
1.3. ✅ Conclusiones
-
Este método permite ajustar señales compuestas por cosenos sin necesidad de conocer las frecuencias de antemano.
-
La clave es usar un modelo no lineal y una buena inicialización.
-
El ajuste es preciso si los datos no tienen mucho ruido y las condiciones iniciales son razonables.
1.4. 📚 Requisitos
Este código requiere las siguientes bibliotecas de Python:
pip install numpy scipy matplotlib
¿Querés que este resumen lo exporte directamente a un archivo .docx
listo para descargar?