2025-02-09 22:26:04 +01:00
|
|
|
|
---
|
|
|
|
|
title: Les signaux
|
|
|
|
|
subject: Cours
|
|
|
|
|
kernelspec:
|
|
|
|
|
name: python3
|
|
|
|
|
display_name: Python 3
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Définition
|
|
|
|
|
|
|
|
|
|
:::{prf:definition} Signal
|
|
|
|
|
:nonumber: true
|
|
|
|
|
Phénomène ou grandeur physique variables dans le temps, donnant une information
|
|
|
|
|
sur l’état du système qui les produit et que peut détecter un capteur.
|
|
|
|
|
|
|
|
|
|
[Dictionnaire de l’Académie française, 9e édition](https://dictionnaire-academie.fr/article/A9S1603)
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
En d'autres termes, un signal est une grandeur physique (tension, courant,
|
|
|
|
|
pression, etc.) variable qui transporte une information.
|
|
|
|
|
|
|
|
|
|
Les flux de la chaîne d'information sont des signaux. On retrouve généralement
|
|
|
|
|
en sortie du bloc _Acquérir_ un signal électrique.
|
|
|
|
|
|
|
|
|
|
# Les différents types de signaux
|
|
|
|
|
|
|
|
|
|
## Les signaux logiques
|
|
|
|
|
Un signal logique ne peut prendre que deux valeurs : un niveau **haut** ("High")
|
|
|
|
|
et un niveau **bas** ("Low").
|
|
|
|
|
|
|
|
|
|
````{figure}
|
2025-02-10 21:40:48 +01:00
|
|
|
|
:label: fig:sig-logique
|
2025-02-09 22:26:04 +01:00
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
2025-02-27 17:32:53 +01:00
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
from matplotlib import ticker
|
2025-02-10 18:34:49 +01:00
|
|
|
|
import numpy as np
|
2025-02-09 22:26:04 +01:00
|
|
|
|
|
2025-02-10 18:34:49 +01:00
|
|
|
|
rng = np.random.default_rng(25)
|
2025-02-09 22:26:04 +01:00
|
|
|
|
|
|
|
|
|
n = 16
|
2025-02-10 18:34:49 +01:00
|
|
|
|
t = np.arange(n+1)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
s = rng.choice([0, 1], n)
|
|
|
|
|
|
|
|
|
|
fig, ax = plt.subplots()
|
2025-02-27 18:33:19 +01:00
|
|
|
|
ax.stairs(s, t, lw=3, baseline=None)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
ax.set(
|
|
|
|
|
xlim=(0, n),
|
|
|
|
|
ylim=(-.5, 1.5),
|
|
|
|
|
xlabel="Temps (s)",
|
|
|
|
|
ylabel="Signal logique",
|
2025-02-09 22:26:04 +01:00
|
|
|
|
)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
|
|
|
|
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
2025-02-09 22:26:04 +01:00
|
|
|
|
```
|
|
|
|
|
Exemple de signal logique
|
|
|
|
|
````
|
|
|
|
|
|
2025-02-10 21:40:48 +01:00
|
|
|
|
Le signal logique en @fig:sig-logique est par exemple à l'état haut entre 2 s et 3 s,
|
2025-02-10 18:34:49 +01:00
|
|
|
|
et à l'état bas entre 3 s et 6 s.
|
|
|
|
|
Lorsque le signal passe de l'état bas à l'état haut (comme à 2 s),
|
2025-02-09 22:26:04 +01:00
|
|
|
|
on parle de **front montant**.
|
|
|
|
|
Dans le cas contraire (comme à 3 s), on parle de **front descendant**.
|
|
|
|
|
|
|
|
|
|
## Les signaux analogiques
|
|
|
|
|
|
2025-02-10 18:34:49 +01:00
|
|
|
|
Un signal analogique est un signal qui peut prendre un ensemble continu de valeurs.
|
2025-02-10 21:40:48 +01:00
|
|
|
|
Un exemple de signal analogique est donné en @fig:sig-analogique.
|
2025-02-10 18:34:49 +01:00
|
|
|
|
|
|
|
|
|
````{figure}
|
2025-02-10 21:40:48 +01:00
|
|
|
|
:label: fig:sig-analogique
|
2025-02-10 18:34:49 +01:00
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
2025-02-27 17:32:53 +01:00
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
from matplotlib import ticker
|
2025-02-10 18:34:49 +01:00
|
|
|
|
import numpy as np
|
2025-02-27 17:32:53 +01:00
|
|
|
|
from scipy.interpolate import CubicSpline
|
|
|
|
|
from scipy.stats import qmc
|
|
|
|
|
|
2025-02-10 18:34:49 +01:00
|
|
|
|
|
|
|
|
|
rng = np.random.default_rng(25)
|
|
|
|
|
|
|
|
|
|
n = 20
|
|
|
|
|
t_max = 16
|
|
|
|
|
|
2025-02-27 17:32:53 +01:00
|
|
|
|
t_base = np.linspace(0, t_max, n)
|
|
|
|
|
lhs = (qmc.LatinHypercube(d=n-2, rng=rng).random(1)[0] - .5) * t_max/n
|
|
|
|
|
t = t_base + np.concatenate(([0], lhs, [0]))
|
|
|
|
|
t = t_base
|
2025-02-10 18:34:49 +01:00
|
|
|
|
s = 5 * rng.random(n)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
|
|
|
|
|
t_interp = np.linspace(0, t_max, 1024)
|
|
|
|
|
s_interp = np.clip(CubicSpline(t, s)(t_interp), 0, 5)
|
|
|
|
|
|
|
|
|
|
fig, ax = plt.subplots()
|
|
|
|
|
ax.plot(t_interp, s_interp, lw=3)
|
|
|
|
|
ax.set(
|
|
|
|
|
xlim=(0, t_max),
|
|
|
|
|
ylim=(-.5, 5.5),
|
|
|
|
|
xlabel="Temps (s)",
|
|
|
|
|
ylabel="Signal analogique",
|
2025-02-10 18:34:49 +01:00
|
|
|
|
)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
|
|
|
|
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
2025-02-10 18:34:49 +01:00
|
|
|
|
```
|
|
|
|
|
Exemple de signal analogique
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
## Les signaux numériques
|
|
|
|
|
Un signal numérique est un signal qui peut prendre un ensemble discret de valeur,
|
|
|
|
|
c'est-à-dire un ensemble précis de valeurs distinctes (généralement des nombres entiers).
|
2025-02-10 21:40:48 +01:00
|
|
|
|
Un exemple de signal analogique est donné en @fig:sig-numerique.
|
2025-02-10 18:34:49 +01:00
|
|
|
|
|
|
|
|
|
````{figure}
|
2025-02-10 21:40:48 +01:00
|
|
|
|
:label: fig:sig-numerique
|
2025-02-10 18:34:49 +01:00
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
2025-02-27 17:32:53 +01:00
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
from matplotlib import ticker
|
2025-02-10 18:34:49 +01:00
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
rng = np.random.default_rng(25)
|
|
|
|
|
|
|
|
|
|
n = 16
|
|
|
|
|
t = np.arange(n+1)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
s = rng.integers(0, 16, n)
|
|
|
|
|
|
|
|
|
|
fig, ax = plt.subplots()
|
2025-02-27 18:33:19 +01:00
|
|
|
|
ax.stairs(s, t, lw=3, baseline=None)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
ax.set(
|
|
|
|
|
xlim=(0, n),
|
|
|
|
|
ylim=(-.5, 16.5),
|
|
|
|
|
xlabel="Temps (s)",
|
|
|
|
|
ylabel="Signal numérique",
|
2025-02-10 18:34:49 +01:00
|
|
|
|
)
|
2025-02-27 17:32:53 +01:00
|
|
|
|
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
|
|
|
|
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
2025-02-10 18:34:49 +01:00
|
|
|
|
```
|
|
|
|
|
Exemple de signal numérique
|
|
|
|
|
````
|