# -*- coding: utf-8 -*-
"""
Created on Sat Nov  8 21:33:19 2025

@author: AKourgli
"""

import numpy as np
import matplotlib.pyplot as plt

# Paramètres de base
fs = 100000       # fréquence d'échantillonnage (Hz)
t = np.arange(0, 0.01, 1/fs)  # durée d'observation (10 ms)
fc = 2000         # fréquence de la porteuse (Hz)
fm = 500          # fréquence du signal modulant (Hz)
Am = 1            # amplitude du signal modulant
Ac = 1            # amplitude de la porteuse
kf = 1000           # sensibilité en fréquence (Hz/V)
kp = np.pi / 2    # sensibilité en phase (rad/V)

# Signal modulant
m_t = Am * np.sin(2 * np.pi * fm * t)

# Porteuse non modulée
c_t = Ac * np.cos(2 * np.pi * fc * t)

# Signal FM : s(t) = Ac cos(2πfc t + 2π kf ∫ m(t) dt)
int_m = np.cumsum(m_t) / fs  # intégration numérique
s_FM = Ac * np.cos(2 * np.pi * fc * t + 2 * np.pi * kf * int_m)

# Signal PM : s(t) = Ac cos(2πfc t + kp m(t))
s_PM = Ac * np.cos(2 * np.pi * fc * t + kp * m_t)

# Tracés
plt.figure(figsize=(10,8))

plt.subplot(4,1,1)
plt.plot(t, m_t)
plt.title('Signal modulant m(t)')
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')

plt.subplot(4,1,2)
plt.plot(t, c_t)
plt.title('Porteuse non modulée')
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')

plt.subplot(4,1,3)
plt.plot(t, s_FM)
plt.title('Signal modulé en fréquence (FM)')
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')

plt.subplot(4,1,4)
plt.plot(t, s_PM)
plt.title('Signal modulé en phase (PM)')
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')

plt.tight_layout()
plt.show()
