0% ont trouvé ce document utile (0 vote)
19 vues13 pages

Signal Sinusoïdal et Bruit en Python

Transféré par

Hamza Mk
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
19 vues13 pages

Signal Sinusoïdal et Bruit en Python

Transféré par

Hamza Mk
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Représentation spectrale d’un

signal noyé dans un bruit en


utilisant Python

Réaliser par :

 MEKAOUI Demandé par Pr


HAMZA Drissi.H
 CHEIKH
SOUHAIL
 LADID ACHRAF

1) Algorithme et programme à utiliser :


Définir les paramètres du signal :
o Fréquence du signal : 50 Hz
o Amplitude du signal : 1 (ou une valeur choisie)
o Phase du signal : 0 (ou une autre valeur si nécessaire)
o Durée du signal : par exemple, 1 seconde
o Fréquence d'échantillonnage : 1000 Hz (ou plus pour une meilleure précision)
Créer un vecteur de temps :
o Générer un vecteur de temps allant de 0 à la durée spécifiée avec des pas égaux à
l'inverse de la fréquence d'échantillonnage.
Calculer le signal sinusoïdal :
o Utiliser la formule y(t)=Asin⁡(2πft+ϕ)y(t) = A \sin(2\pi f t + \phi)y(t)=Asin(2πft+ϕ), où
:
 AAA est l'amplitude,
 fff est la fréquence du signal (50 Hz),
 ttt est le temps,
 ϕ\phiϕ est la phase.
Tracer le signal :
o Afficher le signal sinusoïdal à l'aide d'un graphique.

1-1) Programme Python :


# Importation des bibliothèques nécessaires
import numpy as np # Pour les calculs numériques
import [Link] as plt # Pour la création de graphiques

# Paramètres du signal
frequence = 50 # Fréquence du signal en Hz
amplitude = 1 # Amplitude du signal
phase = 0 # Phase du signal en radians
duree = 1 # Durée du signal en secondes
frequence_echantillonnage = 1000 # Fréquence d'échantillonnage en Hz
# Génération de l'axe temporel
t = [Link](0, duree, int(frequence_echantillonnage * duree), endpoint=False) # temps de 0 à
duree, avec un pas défini par la fréquence d'échantillonnage

# Calcul du signal sinusoïdal


y = amplitude * [Link](2 * [Link] * frequence * t + phase)
# Tracer le signal sinusoïdal
[Link](figsize=(10, 6))
[Link](t, y, label=f"Signal Sinusoïdal à {frequence} Hz")
[Link]("Signal Sinusoïdal de Fréquence 50 Hz")
[Link]("Temps (secondes)")
[Link]("Amplitude")
[Link](True)
[Link]()

# Afficher le graphique
[Link]()
ues en entrant cette commande
1-2) Graphe de programme :

Figure 1: Graphique de signal sinusoïdal 50


Hz

1-3) Interprétation graphique :


Le graphique affichera un signal sinusoïdal de 50 Hz. L'axe des x représente le temps allant
de 0 à 1 seconde, tandis que l'axe des y représente l'amplitude du signal, oscillant entre -1
et +1. Le signal effectuera 50 cycles complets en une seconde, avec une période de 20 ms
par cycle. On verra des oscillations régulières, où le signal monte à +1, descend à -1, puis
revient à 0, et ce motif se répète constamment.
2) Ajout de transformée de Fourier :
2-1) Programme
On ajoute maintenant la transformée de Fourier à notre programme par les commandes
suivants :

import numpy as np
import [Link] as plt

frequence = 50
amplitude = 1
phase = 0
duree = 1
frequence_echantillonnage = 1000
t = [Link](0, duree, int(frequence_echantillonnage * duree), endpoint=False)
y = amplitude * [Link](2 * [Link] * frequence * t + phase)

Y = [Link](y) # Calcul de la FFT du signal


n = len(Y) # Nombre de points
f = [Link](n, 1/frequence_echantillonnage) # Fréquences associées à chaque
composante

f_pos = f[:n // 2]
Y_pos = [Link](Y[:n // 2]) # Magnitude de la transformée (valeurs absolues)

[Link](figsize=(12, 6))
[Link](2, 1, 1) # Diviser la figure en 2 sous-graphes
[Link](t, y, label=f"Signal Sinusoïdal à {frequence} Hz")
[Link]("Signal Sinusoïdal de Fréquence 50 Hz")
[Link]("Temps (secondes)")
[Link]("Amplitude")
[Link](True)
[Link]()
[Link](2, 1, 2) # Le second sous-graphe
[Link](f_pos, Y_pos, label="Spectre de fréquence", color='orange')
[Link]("Spectre de Fréquence du Signal")
[Link]("Fréquence (Hz)")
[Link]("Amplitude")
[Link](True)
[Link]()

plt.tight_layout()
[Link]()

2-2) Graphe de programme:

Figure 2: Graphe
avec fft

2-3) Interprétation graphique

On remarque un pic net autour de 50 Hz, ce qui signifie que le signal contient
principalement une composante de fréquence à 50 Hz. Cela correspond à la fréquence du
signal que vous avez généré.
Il n'y a pratiquement pas d'autres pics importants dans le spectre, ce qui indique que le
signal est principalement composé de cette fréquence unique (50 Hz). Le signal est donc
monofréquentiel (un seul composant de fréquence).

3) Ajout d’une autre fréquence de 120 Hz


3-1) Programme

Maintenant on va ajouter des commandes pour ajouter une autre fréquence de 120 Hz

# Importation des bibliothèques nécessaires

import numpy as np # Pour les calculs numériques

import [Link] as plt # Pour la création de graphiques

# Paramètres du signal

frequence_1 = 50 # Fréquence du premier signal en Hz

frequence_2 = 120 # Fréquence du deuxième signal en Hz

amplitude = 1 # Amplitude du signal

phase = 0 # Phase du signal en radians

duree = 1 # Durée du signal en secondes

frequence_echantillonnage = 1000 # Fréquence d'échantillonnage en Hz

# Génération de l'axe temporel

t = [Link](0, duree, int(frequence_echantillonnage * duree), endpoint=False) #


temps de 0 à duree, avec un pas défini par la fréquence d'échantillonnage

# Calcul des signaux sinusoïdaux

y1 = amplitude * [Link](2 * [Link] * frequence_1 * t + phase) # Signal à 50 Hz

y2 = amplitude * [Link](2 * [Link] * frequence_2 * t + phase) # Signal à 120 Hz

# Signal combiné des deux fréquences

y_combined = y1 + y2

# Calcul de la transformée de Fourier du signal combiné


Y = [Link](y_combined) # Calcul de la FFT du signal combiné

n = len(Y) # Nombre de points

f = [Link](n, 1/frequence_echantillonnage) # Fréquences associées à chaque


composante

# Ne garder que les fréquences positives pour la représentation

f_pos = f[:n // 2]

Y_pos = [Link](Y[:n // 2]) # Magnitude de la transformée (valeurs absolues)

# Tracer le signal sinusoïdal combiné dans le domaine temporel

[Link](figsize=(12, 6))

# Tracé du signal temporel combiné

[Link](2, 1, 1) # Diviser la figure en 2 sous-graphes

[Link](t, y_combined, label=f"Signal combiné à {frequence_1} Hz et {frequence_2} Hz")

[Link]("Signal Sinusoïdal Combiné de Fréquences 50 Hz et 120 Hz")

[Link]("Temps (secondes)")

[Link]("Amplitude")

[Link](True)

[Link]()

# Tracé du spectre de fréquence du signal combiné

[Link](2, 1, 2) # Le second sous-graphe

[Link](f_pos, Y_pos, label="Spectre de fréquence", color='orange')

[Link]("Spectre de Fréquence du Signal Combiné")

[Link]("Fréquence (Hz)")

[Link]("Amplitude")

[Link](True)

[Link]()
# Afficher les graphiques

plt.tight_layout()

[Link]()

3-2) Graphe de programme

Le programme affiche deux graphiques qui sont les suivants :

Figure 3: Graphe de 50Hz et


120Hz

3-3) Interprétation graphique

Le signal oscille de manière complexe en raison de la superposition des deux sinusoïdes


à 50 Hz et 120 Hz. On peut voir des oscillations rapides et lentes, car le signal est
constitué de deux fréquences différentes.

Le signal à 50 Hz produit une oscillation lente (un cycle toutes les 0,02 secondes), tandis
que le signal à 120 Hz produit des oscillations plus rapides (un cycle toutes les 0,0083
secondes).

Cette combinaison génère un motif plus irrégulier que si vous aviez un seul signal
sinusoïdal.

4) Ajouter un signal bruité


4-1) Programme

Maintenant on ajoute un signal bruité au programme précédent en entrant ces


commandes
# Importation des bibliothèques nécessaires

import numpy as np

import [Link] as plt

# Paramètres du signal

frequence1 = 50 # Fréquence du premier signal en Hz

frequence2 = 120 # Fréquence du second signal en Hz

amplitude = 1 # Amplitude du signal

phase = 0 # Phase du signal en radians

duree = 1 # Durée du signal en secondes

frequence_echantillonnage = 1000 # Fréquence d'échantillonnage en Hz

# Paramètres du bruit

amplitude_bruit = 0.5# Amplitude du bruit gaussien

# Génération de l'axe temporel

t = [Link](0, duree, int(frequence_echantillonnage * duree), endpoint=False) #


temps de 0 à duree, avec un pas défini par la fréquence d'échantillonnage

# Calcul des deux signaux sinusoïdaux

y1 = amplitude * [Link](2 * [Link] * frequence1 * t + phase)

y2 = amplitude * [Link](2 * [Link] * frequence2 * t + phase)

# Somme des deux signaux pour créer un signal composite

y = y1 + y2

# Ajout du bruit gaussien au signal composite

bruit = amplitude_bruit * [Link](size=len(t)) # Bruit gaussien

y_bruite = y + bruit # Signal composite avec bruit


# Transformation de Fourier (FFT) du signal bruité

Y = [Link](y_bruite) # Appliquer la FFT

n = len(Y) # Nombre d'échantillons

frequences = [Link](n, d=1/frequence_echantillonnage) # Calcul des fréquences


associées

Y_magnitude = [Link](Y) # Magnitude de la FFT (on prend la partie réelle et imaginaire)

# Filtrer les fréquences et magnitudes pour limiter à 150 Hz

mask = (frequences >= 0) & (frequences <= 150) # Créer un masque pour les fréquences
entre 0 et 150 Hz

frequences_filtrees = frequences[mask] # Appliquer le masque pour obtenir les


fréquences filtrées

Y_magnitude_filtree = Y_magnitude[mask] # Appliquer le même masque pour obtenir


les magnitudes filtrées

# Tracer le signal temporel

[Link](figsize=(12, 8))

# Signal composite bruité

[Link](2, 1, 1) # Placer les graphiques dans une disposition 2x1 (2 lignes, 1


colonne)

[Link](t, y_bruite, label=f"Signal composite à 50 Hz et 120 Hz avec bruit",


color='orange')

[Link]("Signal Composite à 50 Hz et 120 Hz avec Bruit (Temps)")

[Link]("Temps (secondes)")

[Link]("Amplitude")

[Link](True)

[Link]()

# Tracer le spectre de fréquence (limité à 150 Hz)

[Link](2, 1, 2)
[Link](frequences_filtrees[:n//2], Y_magnitude_filtree[:n//2], label="Spectre de
fréquence (0-150 Hz)", color='green')

[Link]("Spectre de fréquence du Signal avec Bruit (0-150 Hz)")

[Link]("Fréquence (Hz)")

[Link]("Amplitude")

[Link](True)

[Link]()

# Afficher les deux graphiques

plt.tight_layout()

[Link]()

4-2) Graphe de programme

Figure 4: Graphe de signal bruité


par 0.5

4-3) Interprétation graphique

Domaine temporel :

 Vous verrez le signal combiné avec du bruit ajouté sur les premières 0.5 secondes.
Le bruit introduit des fluctuations aléatoires et rend le signal plus irrégulier,
surtout dans la première moitié du signal.
Domaine fréquentiel :

 Le spectre montrera deux pics principaux à 50 Hz et 120 Hz, mais vous


remarquerez également un légère élargissement ou "contamination" des
fréquences autour de ces pics à cause du bruit ajouté. Le bruit peut également
introduire une légère augmentation de l'amplitude sur des fréquences plus
élevées et plus basses, mais les deux pics principaux devraient rester dominants.

4-4) Ajout d’un bruit de 1s

Figure 5: Graphe de signal avec un


bruit de 1s

Figure 6: Graphe de signal bruité avec


2,87s
4-5) Ajout d’un bruit de 2,87s :

4-6) Interprétations graphiques

Dans le domaine temporel, le signal composite commence avec des sinusoïdes bien
définies à 50 Hz et 120 Hz, mais à partir de 1 seconde, le bruit aléatoire crée des
fluctuations imprévisibles et plus importantes.
Dans le domaine fréquentiel, le spectre montre clairement les composantes de fréquence
aux valeurs 50 Hz et 120 Hz, mais aussi l'impact du bruit, qui génère des composantes
non périodiques et perturbe l'aspect global du spectre, rendant la représentation plus
disséminée.

Une durée courte (0,5 seconde) produit un signal plus propre, tandis qu'une durée plus
longue (2,87 secondes) permet au bruit de perturber beaucoup plus fortement l'analyse
du signal.

5) Synthèse finale
En résumé, l'impact du bruit sur un signal sinusoïdal dépend largement de la durée du
signal. Sur des durées courtes, l'impact du bruit est minimal et le signal reste identifiable
dans le domaine temporel et fréquentiel. À mesure que la durée du signal augmente, le
bruit devient plus significatif, perturbant la forme du signal et introduisant de nouvelles
fréquences dans le spectre. Cela met en évidence l'importance de la durée dans l'analyse
des signaux et la manière dont le bruit peut interférer avec la qualité du signal.

Ces résultats illustrent bien l'importance du temps d'observation pour analyser les
signaux dans des conditions bruitées. Plus le temps d'échantillonnage est long, plus
l'effet du bruit peut être étudié et pris en compte, tout en ayant un impact plus
important sur les signaux sinusoïdaux.

Vous aimerez peut-être aussi