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 - name: Initialize virtual environment
run: /usr/bin/python -m venv .env run: /usr/bin/python -m venv .env
- name: Install dependencies - 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 - name: Build static HTML
run: ./.env/bin/myst build --html run: |
. .env/bin/activate
myst build --execute --html
- name: Copy files - name: Copy files
run: | run: |
rm -rf /data/srv/forgejo-runner/cours4.0 rm -rf /data/srv/forgejo-runner/cours4.0

View file

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