# -*- coding: utf-8 -*-
"""
Created on Fri Apr 11 20:35:11 2025

@author: AKourgli
"""

import numpy as np
import matplotlib.pyplot as plt

# Paramètres
f = 1               # Fréquence (Hz)
A = 1               # Amplitude des signaux
num_periods = 3     # Nombre de périodes
fs = 1000           # Fréquence d'échantillonnage (Hz)
T = num_periods / f # Durée totale

# Génération du temps
t = np.linspace(0, T, int(T * fs), endpoint=False)

# Création des signaux originaux
cos_original = A * np.cos(2 * np.pi * f * t)
sin_original = -A * np.sin(2 * np.pi * f * t)
combined_signal = cos_original + sin_original  # Signal mélangé

# Calcul des amplitudes via corrélation
def recover_amplitude(signal, reference_signal, T_period):
    dt = 1/fs
    integral = np.sum(signal * reference_signal) * dt
    amplitude = (2 / T_period) * integral  # Normalisation par l'intégrale de référence
    return amplitude

# Récupération des amplitudes sur chaque période
T_period = 1/f
amplitudes_cos = []
amplitudes_sin = []

for i in range(num_periods):
    start = i * int(fs * T_period)
    end = start + int(fs * T_period)
    segment = combined_signal[start:end]
    # Corrélation avec cos
    A_cos = recover_amplitude(segment, np.cos(2 * np.pi * f * t[start:end]), T_period)
    # Corrélation avec sin
    A_sin = recover_amplitude(segment, np.sin(2 * np.pi * f * t[start:end]), T_period)
    amplitudes_cos.append(A_cos)
    amplitudes_sin.append(A_sin)

# Tracés
plt.figure(figsize=(12, 8))

# Signaux originaux
plt.subplot(3, 1, 1)
plt.plot(t, cos_original, label="$A\cos(2\pi ft)$", color='blue')
plt.plot(t, sin_original, label="$A\sin(2\pi ft)$", color='red')
plt.title("Signaux originaux")
plt.xlabel("Temps (s)")
plt.ylabel("Amplitude")
plt.grid(True)
plt.legend()

# Signal combiné
plt.subplot(3, 1, 2)
plt.plot(t, combined_signal, color='purple')
plt.title(f"Signal combiné: $A\cos(2\pi ft) + A\sin(2\pi ft)$")
plt.xlabel("Temps (s)")
plt.ylabel("Amplitude")
plt.grid(True)

# Amplitudes récupérées
plt.subplot(3, 1, 3)
plt.stem(np.arange(num_periods), amplitudes_cos, linefmt='b-', markerfmt='bo', label="Amplitude $\cos$ récupérée")
plt.stem(np.arange(num_periods) + 0.1, amplitudes_sin, linefmt='r--', markerfmt='ro', label="Amplitude $\sin$ récupérée")
plt.axhline(y=A, color='black', linestyle='--', label="Amplitude théorique ($A=1$)")
plt.title("Amplitudes extraites par corrélation")
plt.xlabel("Numéro de la période")
plt.ylabel("Amplitude")
plt.xticks(np.arange(num_periods))
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()