Files
Yggdrasil/infotro/Eln/filtres_numeriques.md
T
Rémi Heredero 7cb0973700 Infotro/eln/signaux echantillonnage (#6)
* add IIR filters

* fix signaux et echant.

* typo

* add filtres numériques
2024-02-03 17:33:54 +01:00

306 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<header><h1>
Filtres numériques
</h1></header>
-----------
# Filtres numériques récursifs (IIR)
Les filtres numériques récursifs (IIR) sont des filtres numériques qui utilisent des rétroactions.
Ils sont basés sur des équations aux différences.
Les filtres récursifs sont utilisés pour des applications où la phase du filtre n'est pas critique.
Ils sont utilisés dans les télécommunications et la régulation.
Les intérêts des filtres récursifs :
- Leur faible coût en calcul
- Faible retard (télécommunication et la régulation)
Les inconvénients des filtres récursifs :
- Ils possèdent une phase non-linéaire
- Ils peuvent avoir une instabilité numérique
***Fonction de transfert en $z$ :***
$$F(z) = \frac{Y(z)}{U(z)} = \frac{b_{0}+b_{1}z^{-1}+\dots+b_{n}z^{-1}}{1+a_{1}z^{-1}+\dots+a_{n}z^{-n}}$$
Numérisation par conversion DA et AD d'un filtre analogique :
$$F(z) = (1-z^{-1})Z \left\{ L^{-1}\left[ \frac{F(s)}{s} \right] \right\} $$
La fonction de transfert en *z* permet ensuite de tirer l'équation aux différences qui servira à réaliser le filtre sous forme d'un algorithme récursif
$$y[k]= b_{n}u[k-n]+ \dots + b_{1}u[k-1]+b_{0}u[k]-a_{n}y[k-n]-\dots-a_{1}y[k-1]$$
Si on souhaite connaître la réponse fréquentielle d'un filtre, il suffit de remplacer l'opérateur *z* par sa transformée de Fourier :
$$a\cdot z^{n}=a\cdot \exp(n\cdot s\cdot T_{s})=a\cdot \exp(n\cdot \mathbf{j}\omega T_{s})$$
$T_{s}$ : La période d'échantillonnage
Comme l’exponentielle imaginaire est périodique, la réponse fréquentielle d’un filtre numérique est également périodique
de fréquence, et sa représentation se fait dans le domaine de fréquences allant de $0$ à $fs/2$. <br>
Le gain statique d’un filtre peut être calculé selon :
$$\text{Gain statique d'un filtre} = \lim_{ s \to 0 } F(s) = \lim_{ z \to 1 } F(z)$$
> [!NOTE|label:Passage pôle et zéro s ↔ z]
> $$\begin{align}
z&=\exp(s\cdot T_{s}) \\
s&=\frac{1}{T_{s}\ln(z)}
\end{align}$$
![Filtre numérique passe bas ordre 2 - Réponse impulsionnel](medias/filtre_numerique_passe_bas_2-reponse.png ':size=40%')
![Filtre numérique passe bas ordre 2 - Bode](medias/filtre_numerique_passe_bas_2-bode.png ':size=40%')
## Transformation analogique-numérique
La transformation bilinéaire : transformation de Tustin ou approximation de Padé de premier ordre
$$s = \frac{2}{T_{s}} \frac{z-1}{z+1} \qquad \qquad z = \frac{1+\frac{1}{2}sT_{s}}{1-\frac{1}{2}sT_{s}}$$
***Pour un filtre analogique de premier ordre :***
$$F(s)=\frac{d_{0}+d_{1}s}{c_{0}+c_{1}s} \to F(z) = \frac{b_{1}z^{-1}+b_{0}}{a_{1}z^{-1}+1} $$
$$
a_{1} = \frac{c_{0}-\frac{2c_{1}}{T_{s}}}{c_{0}+\frac{2c_{1}}{T_{s}}}
\qquad \qquad
b_{0} = \frac{d_{0}+\frac{2d_{1}}{T_{s}}}{c_{0}+\frac{2c_{1}}{T_{s}}}
\qquad \qquad
b_{1} = \frac{d_{0}-\frac{2d_{1}}{T_{s}}}{c_{0}+\frac{2c_{1}}{T_{s}}}
$$
***Pour un filtre analogique de second ordre :***
$$F(s)=\frac{Y(s)}{U(s)}=\frac{d_{0}+d_{1}s+d_{2}s^{2}}{c_{0}+c_{1}s+c_{2}s^{2}}
\to F(z) = \frac{Y(z)}{U(z)}=\frac{b_{2}z^{-2}+b_{1}z^{-1}+b_{0}}{a_{2}z^{-2+}a_{1}z^{-1}+1} $$
$$\begin{gather}
C = c_{0}+\frac{2c_{1}}{T_{s}}+\frac{4c_{2}}{T_{s}^{2}} \\
\\
a_{1} = \frac{2\left( c_{0}-\frac{4c_{2}}{T_{s^{2}}} \right)}{C}
\qquad \qquad
a_{2} = \frac{ c_{0}-\frac{2c_{1}}{T_{s}}+\frac{4c_{2}}{T_{s^{2}}} }{C}
\qquad \qquad
b_{0} = \frac{d_{0}+\frac{2d_{1}}{T_{s}}+\frac{4d_{2}}{T_{s}^{2}}}{C} \\
\\
b_{1} = \frac{2\left( d_{0}-\frac{4d_{2}}{T_{s^{2}}} \right)}{C}
\qquad \qquad
b_{2} = \frac{d_{0}-\frac{2d_{1}}{T_{s}}+\frac{4d_{2}}{T_{s^{2}}}}{C}
\end{gather}$$
# Filtre numérique non-récursif (FIR)
Les filtres numériques non-récursifs (FIR) sont des filtres numériques qui n'utilisent pas de rétroactions.
Ils sont basés sur des équations aux différences.
Les filtres non-récursifs sont utilisés pour des applications où la phase du filtre est critique.
Ils sont utilisés dans le traitement du signal et la conception de filtres.
Les intérêts des filtres non-récursifs :
- Les fonctions de transfert ne possèdent que des coefficients $b_i$. ($\forall a_{i} = 0$)
- Ils possèdent une phase linéaire exacte
- Ils sont stables
Les inconvénients des filtres non-récursifs :
- Ils sont plus coûteux en calcul
- Ils nécessitent plus de matériel
Coefficients symétrique: pairs $b_{n-i} = b_{i}$, impairs $b_{n-i} = -b_{i}$, $b_{n/2}=0$ <br>
**Symétrie paire:**
$$H(\mathbf{j}\omega)
= \sum^{n}_{i=o}b_{i}e^{-\frac{\mathbf{j}i\omega}{f_{s}}}
= e^{\frac{-\mathbf{j}n\omega}{2f_{s}}} \sum^{n/2}_{i=0}b_{i}\cos\left[ \frac{\left( i-\frac{n}{2} \right)\omega}{f_{s}} \right]$$
**Symétrie impaire:**
$$H(\mathbf{j}\omega)=\mathbf{j}e^{\frac{-\mathbf{j}n\omega}{2f_{s}}}\sum^{n/2}_{i=0}b_{i}\sin\left( \frac{(i-\frac{n}{2})\omega}{f_{s}} \right)$$
Les filtres FIR à coefficients symétriques ont une phase linéaire.
$$
\text{Symétrie paire : }\varphi(\omega)=-\frac{n\omega}{2f_{s}}
\qquad \qquad
\text{Symétrie impaire : } \varphi(\omega)= -\frac{n\omega}{2f_{s}}+\frac{\pi}{2}
$$
$$\text{Temps de propagation : }t_{gr}=-\frac{d\varphi}{d\omega}=\frac{n}{2f_{s}}=\frac{n}{2}T_{s}$$
Il y a donc 4 types de filtres FIR à phase linéaire : n resp. symétrie paire/impaire
***Fonction de transfert en $z$ :***
$$F(z) = \frac{Y(z)}{U(z)} = b_{0}+b_{1}z^{-1}+\dots+b_{n}z^{-1}$$
***Équation aux différences :***
$$y[k]= b_{n}u[k-n]+ \dots + b_{1}u[k-1]+b_{0}u[k]$$
***Réponse en fréquence :***
$$z=\exp(\mathbf{j}\omega\cdot T_{s})$$
## Filtres FIR à symétrie paire :
$$b_{n-k} = b_{k}$$
Exemple : FIR à symétrie paire d'ordre 6
$$\begin{align}
F(z) &= \frac{Y(z)}{U(z)} \\
&= 1+2z^{-1}+3z^{-2}+4z^{-3}+3z^{-4}+2z^{-5}+z^{-6} \\
&= \frac{z^{6}+2z^{5}+3z^{4}+4z^{3}+3z^{2}+2z^{1}+1}{z^{6}}
\end{align}$$
Les filtres FIR à symétrie paire sont toujours de type passe-bas ou coupe-bande. <br>
Ils possèdent autant de pôles que l'order du filtre. Ces derniers sont à (0,0) sur le cercle unité. <br>
Ils possèdent autant de zéros que l'ordre du filtre. Ces derniers sont sur le cercle unité. <br>
## Filtres FIR à symétrie impaire :
$$b_{n-k} = -b_{k}$$
Exemple : FIR à symétrie impaire d'ordre 6
$$\begin{align}
F(z) &= \frac{Y(z)}{U(z)} \\
&= -1-2z^{-1}-3z^{-2}+0z^{-3}+3z^{-4}+2z^{-5}+z^{-6} \\
&= \frac{z^{6}+2z^{5}+3z^{4}+0z^{3}-3z^{2}-2z^{1}-1}{z^{8}}
\end{align}$$
Les filtres FIR à symétrie paire sont toujours de type passe-haut ou passe-bande. <br>
Ils possèdent autant de pôles que l'ordre du filtre. Ces derniers sont à (0,0) sur le cercle unité. <br>
Ils possèdent autant de zéros que l'ordre du filtre. <br>
# Filtres numériques FIR idéaux
$$\omega_{c_{d}} = 2\pi \frac{f_{c_{a}}}{f_{s}}$$
## Filtre passe-bas idéal
$$H(\mathbf{j}\omega)=\begin{cases}
1 &\text{ si } |\omega| \leq \omega_{c} \\
0 &\text{ si } |\omega| > \omega_{c}
\end{cases} $$
La transformée de Fourier inverse donne la réponse impulsionnelle d’un filtre passe-bas idéal.
$$h[n] = \begin{cases}
\frac{\omega_{c}}{\pi} \frac{\sin((n-N_{s})\omega_{c})}{(n-N_{s})\omega_{c}} &\text{ si } 0\leq n \leq N \\
\\
\frac{\omega_{c}}{\pi} &\text{ si } n=N_{s} \\
\\
0 &\text{ sinon}
\end{cases}$$
On tronque à $N=ordre$ du filtre. $N_{s}=\frac{N}{2}$ <br>
Ces coefficients ne sont rien d’autre que les coefficients de la fonction de transfert en *z* du filtre passe-bas idéal.
## Filtre passe-haut idéal
$$H(\mathbf{j}\omega)=\begin{cases}
0 &\text{ si } |\omega| \leq \omega_{c} \\
1 &\text{ si } |\omega| > \omega_{c}
\end{cases}$$
La transformée de Fourier inverse donne la réponse impulsionnelle d’un filtre passe-bas idéal.
$$h[n] = \begin{cases}
-\frac{\omega_{c}}{\pi} \frac{\sin((n-N_{s})\omega_{c})}{(n-N_{s})\omega_{c}} &\text{ si } 0\leq n \leq N \\
\\
1-\frac{\omega_{c}}{\pi} &\text{ si } n=N_{s} \\
\\
0 &\text{ sinon}
\end{cases}$$
On tronque à $N=ordre$ du filtre. $N_{s}=\frac{N}{2}$ <br>
Ces coefficients ne sont rien d’autre que les coefficients de la fonction de transfert en *z* du filtre passe-haut idéal.
## Filtre passe-bande idéal
$$H(\mathbf{j}\omega)=\begin{cases}
1 &\text{ si } \omega_{c_{1}} \leq \omega \leq \omega_{c_{2}} \\
0 &\text{ si } \omega \leq \omega_{c_{1}} \quad et \quad \omega\geq \omega_{c_{2}}
\end{cases}$$
La transformée de Fourrier inverse donne la réponse impulsionnelle d’un filtre passe-bande idéal.
$$h[n] = \begin{cases}
\frac{\omega_{c_{2}}}{\pi} \frac{\sin((n-N_{s})\omega_{c_{2}})}{(n-N_{s})\omega_{c_{2}}}-\frac{\omega_{c_{1}}}{\pi} \frac{\sin((n-N_{s})\omega_{c_{1}})}{(n-N_{s})\omega_{c_{1}}} &\text{ si } 0\leq n \leq N \\
\\
\frac{\omega_{c_{2}}-\omega_{c_{1}}}{\pi} &\text{ si } n=N_{s}\\
\\
0 &\text{ sinon}
\end{cases}$$
On tronque à $N=ordre$ du filtre. $N_{s}=\frac{N}{2}$ <br>
Ces coefficients ne sont rien d’autre que les coefficients de la fonction de transfert en *z* du filtre passe-bande idéal.
## Filtre coupe-bande idéal
$$H(\mathbf{j}\omega)=\begin{cases}
0 &\text{ si } \omega_{c_{1}} \leq \omega \leq \omega_{c_{2}} \\
1 &\text{ si } \omega \leq \omega_{c_{1}} \quad et \quad \omega\geq \omega_{c_{2}}
\end{cases}$$
La transformée de Fourrier inverse donne la réponse impulsionnelle d’un filtre coupe-bande idéal.
$$h[n] = \begin{cases}
\frac{\omega_{c_{1}}}{\pi} \frac{\sin((n-N_{s})\omega_{c_{1}})}{(n-N_{s})\omega_{c_{1}}}
-\frac{\omega_{c_{2}}}{\pi} \frac{\sin((n-N_{s})\omega_{c_{2}})}{(n-N_{s})\omega_{c_{2}}}
&\text{ si } 0\leq n \leq N \\
\\
1-\frac{\omega_{c_{2}}-\omega_{c_{1}}}{\pi} &\text{ si } n=N_{s}\\
\\
0 &\text{ sinon}
\end{cases}$$
On tronque à $N=ordre$ du filtre. $N_{s}=\frac{N}{2}$ <br>
Ces coefficients ne sont rien d’autre que les coefficients de la fonction de transfert en *z* du filtre coupe-bande idéal.
# Synthèse par fenêtrage
Le point de départ de la synthèse des filtres FIR est donné par la considération des réponses impulsionnelles des filtres idéaux.
Comme celles-ci sont infiniment longues et donc non réalisables, on va se contenter d’une approximation de leurs réponses.
## Méthode de fenêtrage
- **Fenêtre rectangulaire :** $$W[n] = \begin{cases}
1 &\text{ si } 0\leq n \leq N \\
0 &\text{ sinon}
\end{cases}$$
- **Fenêtre triangulaire (Bartlett) :** $$W[n] = \begin{cases}
2 \frac{n}{N} &\text{ si } 0\leq n \leq \frac{N}{2} \\
2-2 \frac{n}{N} &\text{ si } \frac{N}{2}\leq n \leq N \\
0 &\text{ sinon}
\end{cases}$$
- **Fenêtre sinusoïdale (Hann) :** $$W[n] = \begin{cases}
0,5\left( 1-\cos\left( \frac{2\pi n}{N} \right) \right) &\text{ si } 0\leq n\leq N \\
0 &\text{ sinon}
\end{cases}$$
- **Fenêtre de Hamming :** $$W[n] = \begin{cases}
0,54-0,46\cos\left( \frac{2\pi n}{N} \right) &\text{ si } 0\leq n\leq N \\
0 &\text{ sinon}
\end{cases}$$
- **Fenêtre de Blackman :** $$W[n] = \begin{cases}
0,42-0,5\cos\left( \frac{2\pi n}{N} \right)+0,08\cos\left( \frac{4\pi n}{N} \right) &\text{ si } 0\leq n\leq N \\
0 &\text{ sinon}
\end{cases}$$
- **Fenêtre de Kaiser-Bessel :** $$W[n] = \begin{cases}
\frac{I_{0}\left( \beta\sqrt{1-\left( \frac{1-n}{N_{s}} \right)^{2}} \right)}{I_{0}(\beta)} &\text{ si } 0\leq n\leq N \\
0 &\text{ sinon}
\end{cases}$$
$I_{0}$ : Fonction de Bessel modifiée d’ordre 0 <br>
$\beta$ : Paramètre de forme
***Caractéristiques spectrales de quelques fenêtres***
| Fenêtres | Largeur du 1er lobe | Atténuation du 1er lobe [dB] | Décroissance des lobes suivants | Ondulation Rp [dB] | Atténuation max [dB] | Bande de transition<br>[rad/sec]<br>$\Delta\omega$ |
|---------------------|---------------------|------------------------------|---------------------------------|--------------------|----------------------|----------------------------------------------------|
| Rectangulaire | $4\pi/N$ | $-13$ | $20 dB/dec$ | $0,74$ | $21$ | $1,8\pi/N$ |
| Triangulaire | $8\pi/N$ | $-27$ | $40 dB/dec$ | $0$ | $25$ | $6,1\pi/N$ |
| Cosinus | $8\pi/N$ | $-32$ | $60 dB/dec$ | $0,055$ | $44$ | $6,2\pi/N$ |
| Hamming | $8\pi/N$ | $-43$ | $20 dB/dec$ | $0,014$ | $53$ | $6,6\pi/N$ |
| Blackman | $12\pi/N$ | $-58$ | $60 dB/dec$ | $0,0017$ | $74$ | $11\pi/N$ |
| Kaiser $\beta=4,54$ | $7,2\pi/N$ | $-30$ | $20 dB/dec$ | $0,025$ | $50$ | $5,8\pi/N$ |
| Kaiser $\beta=5,66$ | $8,4\pi/N$ | $-42$ | $20 dB/dec$ | $0,009$ | $60$ | $7,2\pi/N$ |
## Comment calculer son filtre
![specification_de_filtre.svg](medias%2Fspecification_de_filtre.svg ':size=50%')
$H(\mathbf{j}\omega)$ : Gain <br>
$\delta_{1}$ : L'erreur de gain tolérable <br>
$\delta_{2}$ : L'erreur d'atténuation tolérable <br>
$\omega_{p}$ : Fréquence de pulsation de passage <br>
$\omega_{a}$ : Fréquence de pulsation d'arrêt <br>
1. En fonction du gabarit, déterminer le type de filtre désiré (`passe-bas`, `passe-haut`, `passe-bande`, `coupe-bande`)
2. Calculer $f_{c} \to \omega_{c}$ et $\Delta f \to \Delta\omega$
$$\begin{gather}
f_{c} = \frac{f_{a}+f_{p}}{2} \qquad & \qquad \Delta f = f_{a}-f_{p} \\
\omega_{c} = 2\pi \frac{f_{c}}{f_{s}} \quad & \quad \Delta\omega = \frac{2\pi\Delta f}{f_{s}}
\end{gather}$$
3. Choisir une fenêtre $W[n]$ satisfaisante du point de vue de l’atténuation et du reste du cahier des charges.(voir tableau ci-dessus)
4. Calculer l'ordre du filtre à l'aide de la bande de transition du filtre choisit. Arrondir au nombre pair supérieur.
5. Calculer la réponse impulsionnelle $h_{f}[n]$ du filtre avec $h[n]*W[n]$
6. Calculer les coefficients $b_{n}$ du filtre avec $h_{f}[n]$
<details>
<summary>Démarche selon les slides</summary>
1. Connaissant le gabarit du filtre désiré, choisir le filtre idéal correspondant
2. Calculer les pulsations caractéristiques se situant au centre des bandes de transitions
3. Rechercher la réponse impulsionnelle $h[n]$ du filtre idéal, si celle-ci n’est pas connue, on peut la calculer par transformation de Fourier inverse
4. Choisir une fenêtre $W[n]$ satisfaisante du point de vue de l’atténuation
5. Connaissant la largeur de la bande de transition , calculer l’ordre du filtre $N$
6. Calculer les coefficients du filtre en multipliant la réponse impulsionnelle par la fenêtre choisie
</details>