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}
|
|
|
|
|
:label: logique
|
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
|
|
|
|
import altair as alt
|
2025-02-10 18:34:49 +01:00
|
|
|
|
import numpy as np
|
2025-02-09 22:26:04 +01:00
|
|
|
|
import pandas as pd
|
|
|
|
|
|
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)
|
|
|
|
|
s = rng.choice([0, 1], n+1)
|
|
|
|
|
s[-1] = s[-2]
|
2025-02-09 22:26:04 +01:00
|
|
|
|
data = pd.DataFrame({
|
|
|
|
|
"t": t,
|
|
|
|
|
"s": s,
|
|
|
|
|
})
|
|
|
|
|
alt.Chart(
|
|
|
|
|
data
|
|
|
|
|
).mark_line(
|
2025-02-10 18:34:49 +01:00
|
|
|
|
interpolate="step-after",
|
|
|
|
|
strokeWidth=3,
|
2025-02-09 22:26:04 +01:00
|
|
|
|
).encode(
|
|
|
|
|
alt.X("t:Q").axis(title="Temps (s)").scale(domain=(0,n)),
|
2025-02-10 18:34:49 +01:00
|
|
|
|
alt.Y("s:Q", axis=alt.Axis(title="Signal logique", values=[0, 1], format=".0f")).scale(domain=(0,1)),
|
2025-02-09 22:26:04 +01:00
|
|
|
|
).properties(
|
|
|
|
|
width="container",
|
2025-02-10 18:34:49 +01:00
|
|
|
|
height=100,
|
2025-02-09 22:26:04 +01:00
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
Exemple de signal logique
|
|
|
|
|
````
|
|
|
|
|
|
2025-02-10 18:34:49 +01:00
|
|
|
|
Le signal logique en @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),
|
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.
|
|
|
|
|
Un exemple de signal analogique est donné en @analogique.
|
|
|
|
|
|
|
|
|
|
````{figure}
|
|
|
|
|
:label: analogique
|
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
|
|
|
|
import altair as alt
|
|
|
|
|
import numpy as np
|
|
|
|
|
import pandas as pd
|
|
|
|
|
|
|
|
|
|
rng = np.random.default_rng(25)
|
|
|
|
|
|
|
|
|
|
n = 20
|
|
|
|
|
t_max = 16
|
|
|
|
|
|
|
|
|
|
t = np.linspace(0, t_max, n)
|
|
|
|
|
|
|
|
|
|
s = 5 * rng.random(n)
|
|
|
|
|
s[-1] = s[-2]
|
|
|
|
|
data = pd.DataFrame({
|
|
|
|
|
"t": t,
|
|
|
|
|
"s": s,
|
|
|
|
|
})
|
|
|
|
|
alt.Chart(
|
|
|
|
|
data
|
|
|
|
|
).mark_line(
|
|
|
|
|
interpolate="basis",
|
|
|
|
|
strokeWidth=3,
|
|
|
|
|
).encode(
|
|
|
|
|
alt.X("t:Q").axis(title="Temps (s)").scale(domain=(0,t_max)),
|
|
|
|
|
alt.Y("s:Q", axis=alt.Axis(title="Signal analogique")).scale(domain=(0,5)),
|
|
|
|
|
).properties(
|
|
|
|
|
width="container",
|
|
|
|
|
height=200,
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
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 @numerique.
|
|
|
|
|
|
|
|
|
|
````{figure}
|
|
|
|
|
:label: numerique
|
|
|
|
|
```{code-cell} python
|
|
|
|
|
:tags: [remove-input]
|
|
|
|
|
import altair as alt
|
|
|
|
|
import numpy as np
|
|
|
|
|
import pandas as pd
|
|
|
|
|
|
|
|
|
|
rng = np.random.default_rng(25)
|
|
|
|
|
|
|
|
|
|
n = 16
|
|
|
|
|
t = np.arange(n+1)
|
|
|
|
|
s = rng.integers(0, 16, n+1)
|
|
|
|
|
s[-1] = s[-2]
|
|
|
|
|
data = pd.DataFrame({
|
|
|
|
|
"t": t,
|
|
|
|
|
"s": s,
|
|
|
|
|
})
|
|
|
|
|
alt.Chart(
|
|
|
|
|
data
|
|
|
|
|
).mark_line(
|
|
|
|
|
interpolate="step-after",
|
|
|
|
|
strokeWidth=3,
|
|
|
|
|
).encode(
|
|
|
|
|
alt.X("t:Q").axis(title="Temps (s)").scale(domain=(0,n)),
|
|
|
|
|
alt.Y("s:Q", axis=alt.Axis(title="Signal numérique", values=np.arange(0, 16))).scale(domain=(0,15)),
|
|
|
|
|
).properties(
|
|
|
|
|
width="container",
|
|
|
|
|
height=200,
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
Exemple de signal numérique
|
|
|
|
|
````
|