import numpy as np
import [Link] as plt
from [Link] import freqz
from sympy import symbols, cos, solve
# Exercice 1: Transformée de Fourier Discrète (TFD)
# Suite x(n)
x1 = [Link](16)
x1[0] = x1[1] = x1[2] = x1[14] = x1[15] = 1
# Calcul de la TFD
X1 = [Link](x1)
# Tracé de la TFD
[Link](figsize=(12, 6))
[Link](2, 1, 1)
[Link]([Link](X1), use_line_collection=True)
[Link]("TFD de la suite x1(n)")
[Link]("Fréquence")
[Link]("|X1(k)|")
[Link]()
# Suite x(n)
x2 = [Link](16)
x2[0] = x2[1] = x2[2] = x2[3] = x2[4] = 1
# Calcul de la TFD
X2 = [Link](x2)
# Tracé de la TFD
[Link](2, 1, 2)
[Link]([Link](X2), use_line_collection=True)
[Link]("TFD de la suite x2(n)")
[Link]("Fréquence")
[Link]("|X2(k)|")
[Link]()
plt.tight_layout()
[Link]()
# Transformée inverse
x1_inv = [Link](X1)
x2_inv = [Link](X2)
# Tracé des suites inversées
[Link](figsize=(12, 6))
[Link](2, 1, 1)
[Link]([Link](x1_inv), use_line_collection=True)
[Link]("Transformée inverse de X1(k)")
[Link]("n")
[Link]("x1_inv(n)")
[Link]()
[Link](2, 1, 2)
[Link]([Link](x2_inv), use_line_collection=True)
[Link]("Transformée inverse de X2(k)")
[Link]("n")
[Link]("x2_inv(n)")
[Link]()
plt.tight_layout()
[Link]()
# Exercice 2: Filtrage numérique RIF
# Coefficients du filtre
h = [0.1, 0, 0.2, 0.1]
# Tracé de la réponse impulsionnelle
n = [Link](len(h))
[Link](n, h, use_line_collection=True)
[Link]("Réponse impulsionnelle h(n)")
[Link]("n")
[Link]("h(n)")
[Link]()
[Link]()
# Calcul de la réponse fréquentielle
w, H = freqz(h)
# Tracé du module et de la phase
[Link](figsize=(12, 6))
# Module
[Link](2, 1, 1)
[Link](w, [Link](H))
[Link]("Réponse fréquentielle")
[Link]("Fréquence (rad/sample)")
[Link]("|H(jω)|")
[Link]()
# Phase
[Link](2, 1, 2)
[Link](w, [Link](H))
[Link]("Fréquence (rad/sample)")
[Link]("Phase (radians)")
[Link]()
[Link]()
# Fréquences spécifiques
omega_Te = [0, [Link]/2, [Link], 2*[Link]]
H_values = [[Link]([h[k] * [Link](-1j * omega * k) for k in range(len(h))]) for
omega in omega_Te]
# Affichage des résultats
for omega, H_val in zip(omega_Te, H_values):
print(f"ωT_e = {omega:.2f}, |H(jωT_e)| = {[Link](H_val):.2f}, Phase =
{[Link](H_val):.2f} radians")
# Calcul de la fréquence de coupure
H_dB = 20 * np.log10([Link](H))
cutoff_idx = [Link](H_dB <= -3)[0][0]
cutoff_freq = w[cutoff_idx]
print(f"Fréquence de coupure à -3dB: {cutoff_freq:.2f} rad/sample")
# Signal d'entrée
x = [1, 1, 0, 0, 0, 0, 0, 0]
# Calcul du signal de sortie
y = [Link](x, h)
# Tracé du signal de sortie
n = [Link](len(y))
[Link](n, y, use_line_collection=True)
[Link]("Signal de sortie y(n)")
[Link]("n")
[Link]("y(n)")
[Link]()
[Link]()
# Exercice 3: Étude d'un filtre numérique
# Variables symboliques
z, rho, theta = symbols('z rho theta')
# Fonction de transfert
H_z = (1 - 2*z**-1) / (1 - 2*rho*cos(theta)*z**-1 + rho**2*z**-2)
print(f"Fonction de transfert H(z): {H_z}")
# Pôles
poles = solve(1 - 2*rho*cos(theta)*z**-1 + rho**2*z**-2, z)
print(f"Pôles: {poles}")
# Zéros
zeros = solve(1 - 2*z**-1, z)
print(f"Zéros: {zeros}")
# Calcul du module de la réponse fréquentielle
H_freq = H_z.subs({rho: 0.8, theta: [Link]/4})
H_freq = H_freq.simplify()
# Tracé du module
w = [Link](0, 2*[Link], 1000)
H_values = [abs(H_freq.subs(z, [Link](1j*omega))) for omega in w]
[Link](w, H_values)
[Link]("Module de la réponse fréquentielle")
[Link]("Fréquence (rad/sample)")
[Link]("|H(jω)|")
[Link]()
[Link]()