Compare commits

...

9 commits

2 changed files with 93 additions and 17 deletions
.forgejo/workflows
cours/SIN

View file

@ -11,9 +11,11 @@ jobs:
- name: Initialize virtual environment
run: /usr/bin/python -m venv .env
- name: Install dependencies
run: ./.env/bin/pip install mystmd jupyterlab_myst ipykernel altair pandas
run: ./.env/bin/pip install mystmd jupyter jupyterlab_myst ipykernel altair pandas
- name: Build static HTML
run: ./.env/bin/myst build --html
run: |
. .env/bin/activate
myst build --execute --html
- name: Copy files
run: |
rm -rf /data/srv/forgejo-runner/cours4.0

View file

@ -33,18 +33,15 @@ et un niveau **bas** ("Low").
```{code-cell} python
:tags: [remove-input]
import altair as alt
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import random
from scipy.interpolate import CubicSpline
import pandas as pd
random.seed(25)
rng = np.random.default_rng(25)
n = 16
t = range(n+1)
s = random.choices([0, 1], k=n)
s += s[-1:]
t = np.arange(n+1)
s = rng.choice([0, 1], n+1)
s[-1] = s[-2]
data = pd.DataFrame({
"t": t,
"s": s,
@ -52,24 +49,101 @@ data = pd.DataFrame({
alt.Chart(
data
).mark_line(
interpolate="step-after"
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 logique", tickMinStep=1.0)).scale(domain=(0,1)),
alt.Y("s:Q", axis=alt.Axis(title="Signal logique", values=[0, 1], format=".0f")).scale(domain=(0,1)),
).properties(
width="container",
height=100,
)
```
Exemple de signal logique
````
Le signal logique en @logique est par exemple à l'état haut entre 1 s et 3 s,
et à l'état bas entre 8 s et 11 s.
Lorsque le signal passe de l'état bas à l'état haut (comme à 1 s),
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),
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 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).
````{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
````