143 lines
No EOL
3.6 KiB
Markdown
143 lines
No EOL
3.6 KiB
Markdown
---
|
||
title: Les signaux
|
||
subject: Cours
|
||
export:
|
||
- format: pdf
|
||
template: courstex
|
||
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}
|
||
:label: fig:sig-logique
|
||
```{code-cell} python
|
||
:tags: [remove-input]
|
||
import matplotlib.pyplot as plt
|
||
from matplotlib import ticker
|
||
import numpy as np
|
||
|
||
rng = np.random.default_rng(25)
|
||
|
||
n = 16
|
||
t = np.arange(n+1)
|
||
s = rng.choice([0, 1], n)
|
||
|
||
fig, ax = plt.subplots()
|
||
ax.stairs(s, t, lw=3, baseline=None)
|
||
ax.set(
|
||
xlim=(0, n),
|
||
ylim=(-.5, 1.5),
|
||
xlabel="Temps (s)",
|
||
ylabel="Signal logique",
|
||
)
|
||
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
```
|
||
Exemple de signal logique
|
||
````
|
||
|
||
Le signal logique en @fig:sig-logique est par exemple à l'état haut entre 2 s et 3 s,
|
||
et à l'état bas entre 3 s et 6 s.
|
||
Lorsque le signal passe de l'état bas à l'état haut (comme à 2 s),
|
||
on parle de **front montant**.
|
||
Dans le cas contraire (comme à 3 s), on parle de **front descendant**.
|
||
|
||
## Les signaux analogiques
|
||
|
||
Un signal analogique est un signal qui peut prendre un ensemble continu de valeurs.
|
||
Un exemple de signal analogique est donné en @fig:sig-analogique.
|
||
|
||
````{figure}
|
||
:label: fig:sig-analogique
|
||
```{code-cell} python
|
||
:tags: [remove-input]
|
||
import matplotlib.pyplot as plt
|
||
from matplotlib import ticker
|
||
import numpy as np
|
||
from scipy.interpolate import CubicSpline
|
||
from scipy.stats import qmc
|
||
|
||
|
||
rng = np.random.default_rng(25)
|
||
|
||
n = 20
|
||
t_max = 16
|
||
|
||
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
|
||
s = 5 * rng.random(n)
|
||
|
||
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",
|
||
)
|
||
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
```
|
||
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).
|
||
Un exemple de signal analogique est donné en @fig:sig-numerique.
|
||
|
||
````{figure}
|
||
:label: fig:sig-numerique
|
||
```{code-cell} python
|
||
:tags: [remove-input]
|
||
import matplotlib.pyplot as plt
|
||
from matplotlib import ticker
|
||
import numpy as np
|
||
|
||
rng = np.random.default_rng(25)
|
||
|
||
n = 16
|
||
t = np.arange(n+1)
|
||
s = rng.integers(0, 16, n)
|
||
|
||
fig, ax = plt.subplots()
|
||
ax.stairs(s, t, lw=3, baseline=None)
|
||
ax.set(
|
||
xlim=(0, n),
|
||
ylim=(-.5, 16.5),
|
||
xlabel="Temps (s)",
|
||
ylabel="Signal numérique",
|
||
)
|
||
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
|
||
```
|
||
Exemple de signal numérique
|
||
```` |