Académique Documents
Professionnel Documents
Culture Documents
Compte rendu
TRAVAUX PRATIQUES : TRAITEMENT DE SIGNAL
Matlab (MATrix LABoratory) est un langage de programmation orienté calcul scientifique, pensé pour
rendre le calcul matriciel simple à programmer et efficace en temps.
Matlab est un logiciel (payant) proposant une interface graphique vers un éditeur de code en Matlab, et
un outil de debugging pour exécuter des programmes en mode pas à pas.
Matlab propose différents frameworks (payants, appelés toolbox), proposant des fonctionnalités très
avancées permettant de réaliser facilement des tâches complexes (ex: toolbox équation différentielle,
toolbox aérospatial).
Le rôle principal de Matlab est de fournir un environnement interactif pour la manipulation et le
traitement de données numériques, en mettant l'accent sur les matrices et les tableaux. Grâce à sa
syntaxe orientée vers les matrices, il permet aux utilisateurs de résoudre efficacement des problèmes
mathématiques complexes, y compris des opérations linéaires, des transformations de Fourier, des
statistiques et bien plus encore. De plus, Matlab est également largement utilisé dans le domaine du
traitement du signal, de l'imagerie, de la simulation numérique et du contrôle.
L'objectif principal de Matlab est de faciliter le développement rapide de solutions pour des problèmes
techniques et scientifiques. Il offre un large éventail de fonctions prédéfinies et de bibliothèques
spécialisées, ce qui permet aux utilisateurs de développer des algorithmes et des applications
personnalisés de manière efficace. De plus, Matlab dispose d'outils avancés de visualisation qui
permettent d'analyser et de représenter graphiquement les données, ce qui est essentiel pour comprendre
les résultats des simulations et des analyses numériques.
Comme vue en TP, l’interface de Matlab se compose de plusieurs zones.
Chaque zone possède un objectif précis :
Le menu regroupe des commandes de base de Matlab, comme enregistrer, afficher les
préférences, etc...
L'explorateur de fichiers permet de visualiser ses fichiers scripts et de les ouvrir pour les éditer.
La zone de commande permet d'écrire des commandes et de visualiser leur résultat
La zone des variables permet de visualiser toutes les variables en mémoire à l'instant présent
(leur nom ainsi que visualiser leur contenu).
L'historique permet de visualiser l'historique des commandes précédemment exécutées.
On peut écrire des commandes simples dans Matlab. Cependant, quand on souhaite écrire un
programme complet, on utilise l’éditeur de script Matlab :
Excercices
Il est à noter qu’une aide en ligne est disponible à tout moment au niveau de l’interpréteur de
commande. Par exemple, pour obtenir de l’aide sur la fonction plot, taper help plot. Veuillez écrire les
fichiers de commandes pour les exercices suivants. A la fin de la s´séance vous rendrez un compte rendu
ainsi que les listings de ces fichiers de commandes (qui devront être enregistrés sous votre répertoire).
1. Soit x=[1 2 3] et y=[4 5 6]. Que représente x*y’ et x’*y?
>> x=[1 2 3]
x=
1 2 3
>> y=[4 5 6]
y=
4 5 6
>> x*y'
ans =
32
>> x'*y
ans =
4 5 6
8 10 12
12 15 18
>> f1=cos(tan(pi.*x));
>> plot(x,f1)
( )
x ∈ [−10, 10], f2(x) = ,
>> x=0:0.001:1;
>> f2=sin(x)./x;
>> plot(x,f2)
x ∈ [−100, 100], f3(x) = 𝑥 + 2𝑥 + x + 1,
>> x=-100:100;
>> f3=x.^5+2*x.^2+x+1;
>> plot(x,f3)
𝑝1(1) + 𝑝0 = 𝑦(1)
Où p1, p0 sont les inconnues.
…
𝑝1(𝑛) + 𝑝0 = 𝑦(𝑛)
Application :
Approximer par un polynôme du 1er, 2eme et 3eme degrés, la fonction f(x)=sin(x) sur
l’intervalle [0, π/2]. A chaque fois répondre aux questions 5a, 5b et 5c.
(a) Ecrire les variables A, P et B permettant de résoudre le système.
(b) Résoudre le système
(c) Afficher le résultat
(d) A l’aide de la fonction subplot afficher les résultats sur une même fenêtre les trois courbes
différentes.
1er degré :
(a)
>> A1=[0 1; pi/4 1];
>> B1=[sin(0); sin(pi/4)];
>> P1=A1\B1
(b)
P1 =
0.9003
0
(c)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P1,x),'r')
2eme degré ;
(a)
>> A2=[0 0 1; pi^2/16 pi/4 1; pi^2/4 pi/2 1];
>> B2=[0; sin(pi/4); 1];
>> P2=A2\B2
(b)
P2 =
-0.3357
1.1640
0
(c)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P2,x),'r')
3eme degree
(a)
>> A3=[0 0 0 1; pi^3/216 pi^2/36 pi/6 1; pi^3/27 pi^2/9 pi/3 1; pi^3/8 pi^2/4 pi/2 1];
>> B3=[0; 0.5; sin(pi/3); 1];
>> P3=A3\B3
(b)
P3 =
-0.1139
-0.0655
1.0204
0
(c)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P3,x),'r')
(d)
subplot(3,1,1)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P1,x),'r')
subplot(3,1,2)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P2,x),'r')
subplot(3,1,3)
x=0:0.001:pi/2;
f=sin(x);
plot(x,f,'b')
hold on
plot(x,polyval(P3,x),'r')
Les signaux numériques
Les signaux numériques se présentent sous forme de séquences de valeurs discrètes qui dépeignent des
phénomènes, qu'ils soient concrets ou abstraits. Dans cette étude, nous avons examiné diverses
catégories de signaux numériques, comprenant notamment :
1. L’impulsion unité :
L’impulsion unité, souvent symbolisée par δ[n], est un signal discret fondamental en traitement du
signal. Il se caractérise par une valeur de 1 à un instant précis (généralement n=0) et une valeur de 0 à
tous les autres instants. Mathématiquement, la delta de Dirac est définie comme suit :
1 𝑠𝑖 𝑛 = 0
δ[n]=
0 𝑠𝑖𝑛𝑜𝑛
L’impulsion unité est largement employée pour modéliser des événements instantanés dans le temps.
Par exemple, dans le domaine du traitement du signal, elle sert à représenter des impulsions électriques,
des échantillons dans des systèmes de communication numérique ou des événements de commutation
dans des circuits électroniques.
Afin de générer l’impulsion unité on peut écrire le programme suivant :
%impulsion unité
t=-10 :10 ;
x=[zéros(1,10),1,zeros(1,10)];
stem(t,x);
axis ([-10 10 -0.5 1.5]);
title('Impulsion unité');
xlabel('n');
ylabel('Amplitude');
2. L’échelon unité :
L’échelon unité, souvent désigné par u[n], constitue un pilier dans le domaine du traitement du signal. Il
se distingue par une valeur de 0 avant un moment précis (généralement antérieur à négatif) et une valeur
de 1 à partir de ce moment. Mathématiquement, l'échelon unité est décrit comme suit :
0 𝑠𝑖 𝑛 < 0
𝑢[𝑛] =
1 𝑠𝑖 𝑛 ≥ 0
L’échelon unité est largement employé pour représenter des départs ou des transitions dans les systèmes
dynamiques. Par exemple, dans le domaine du contrôle, il est utilisé pour indiquer le début d'une
commande à un instant précis. Dans le traitement du signal, il sert à marquer des déclencheurs ou des
changements de comportement à un moment donné.
Pour le cas de l’échelon unité, on se contentera d’un nombre fini d’échantillon. On peut écrire le
programme suivant :
%échelon unité
t=-10:10;
x=[zeros(1,10),ones(1,11)];
stem(t,x);
axis([-10 10 -0.5 1.5]);
title('Echelon unité');
xlabel('n');
ylabel('Amplitude');
En traitement des signaux numériques, les sinus et les exponentielles décroissantes sont des éléments
essentiels, offrant une modélisation polyvalente pour une variété de phénomènes dynamiques et
systèmes.
Sinus
Les signaux sinusoïdaux représentent des oscillations périodiques définies par leur amplitude, leur
fréquence et leur phase. Leur présence est remarquable dans de multiples domaines tels que le traitement
du signal, les télécommunications, l'électronique et l'acoustique.
%sinus
t=-10:10;
x=sin(0.35*t);
stem(t,x);
axis([-10 10 -1.5 1.5]);
title('sinus');
xlabel('n');
ylabel('Amplitude');
Exponentielle Décroissante
Les décroissances exponentielles décrivent des phénomènes de diminution selon une fonction
exponentielle au fil du temps. Elles sont couramment exploitées pour représenter des processus de
relaxation, la décharge de condensateurs ou encore les décroissances exponentielles observées dans les
systèmes dynamiques.
Ensuite avec une exponentielle dé𝑐𝑟𝑜𝑖𝑠𝑠𝑎𝑛𝑡𝑒 𝑒 . ∗
* u[n] avec u l’échelon unité. On a le programme
suivant :
%exponentielle
t=-10:10;
u=[zeros(1,10),ones(1,11)];
x=exp(-0.2*t).*u;
stem(t,x);
axis([-10 10 -1.5 1.5]);
title('Exponentielle retardée');
xlabel('n');
ylabel('Amplitude');
Operations sur les signaux
Les opérations sur les signaux ont cruciales dans le traitement du signal numérique, offrant la possibilité de
transformer, manipuler et analyser divers types de signaux pour atteindre des objectifs variés. Cette étude pratique
a porté sur l'exploration de plusieurs opérations de base sur les signaux numériques, incluant notamment :
2. Fonctions matlab
On peut développer des logiciels capables d'effectuer automatiquement et de manière générale des
opérations telles que le décalage ou le retournement sur un signal d'entrée arbitraire. Ces logiciels
prennent la forme de fonctions MATLAB, identifiées par un nom de fichier associé. De plus, ce fichier
doit être accessible par MATLAB au moment de son invocation, ce qui implique la notion de chemin
d'accès PATH.
a) Fonction Sigshift
La fonction ‘sigshift’ est utilisée pour décaler un signal dans le domaine temporel. Elle prend en entrée
un signal x[n] et un décalage k et renvoie le signal décalé de k échantillons.
Script :
function [xs,ts]=sigshift(x,t,N)
%shifting a signal
%inputs :
% x,t input signal amplitude and instants
% N shift value
%outputs :
% xs,ts shifted signal amplitude and instants
xs=x;
ts=t-N;
window command :
t=-10:10;
x=[zeros(1,10),ones(1,11)];
stem(t,sigshift(x,t,5));
b) Fonction Sigrev :
La fonction ‘sigrev’ est utilisée pour inverser temporellement un signal. Elle prend en entrée un signal
x[n] et renvoie le même signal avec l'ordre des échantillons inversé.
Script :
function [xr,tr]=sigrev(x,t)
%Time reverting a signal
%inputs :
% x,t input signal amplitude and instants
%outputs :
% xr,tr time reversed signal amplitude and instants
lx=length(x);
tr=-t(lx:-1:1);
xr=x(lx:-1:1);
window command :
t=-10:10;
x=[zeros(1,10),ones(1,11)];
stem(t,sigshift(x,t));
c) Fonction Impseq:
La fonction ‘impseq’ génère une impulsion unité discrète à un instant donné n0. Elle prend en entrée
l'instant n0 et la longueur du signal et renvoie un vecteur contenant une impulsion unité à l'instant
spécifié.
script :
function [x,tx]=impseq(n0,n1,n2)
%Time shifted unit impulse
%inputs :
% n0 shifting value
% n1 timing begin value
% n2 timing end value
%outputs :
% x,tx shifted unit impulse
tx=n1:n2;
x=[(tx-n0)==0];
window command :
t=-10:10;
x=[zeros(1,10),ones(1,11)];
stem(t,impseq(0,-10,10));
d) Fonction Stepseq :
La fonction ‘stepseq’ génère un échelon unité discrète à partir d'un certain instant n0. Elle prend en
entrée l'instant n0 et la longueur du signal et renvoie un vecteur contenant un échelon unité à partir de
l'instant spécifié.
script :
function [x,tx]=stepseq(n0,n1,n2)
%Time shifted unit step
%inputs :
% n0 shifting value
% n1 timing begin value
% n2 timing end value
%outputs :
% x,tx shifted unit step
tx=n1:n2;
x=[(tx-n0)>=0];
window command :
t=-10:10;
x=[zeros(1,10),ones(1,11)];
stem(t,stepseq(0,-10,10));
Conclusion :
Les fonctions MATLAB représentent des ressources primordiales pour exécuter des opérations
fondamentales sur les signaux numériques, comme les décalages, les renversements, la création
d'impulsions et d'échelons, des manipulations fréquemment employées dans le domaine du traitement du
signal.
Script :
function [x,t]=sigadd(x1,t1,x2,t2)
%Adding two signals
%inputs :
% x1,t1 first input signal amplitudes and instants
% x2,t2 second input signal amplitudes and instants
%outputs :
% x,t sum signal amplitudes and instants
first=min(t1(1),t2(1));
l1=length(t1);
l2=length(t2);
last=max(t1(l1),t2(l2));
t=first:last;
l=length(t);
%search number of preamble ans postamble zeros
%needed to extend x1 and x2
preamb1=t1(1)-first;
preamb2=t2(1)-first;
postamb1=last-t1(l1);
postamb2=last-t2(l2);
%x1e=[zeros(1,preamb1),x1,zeros(1,postamb1)];
if preamb1==0
x1e=[];
else
x1e=[zeros(1,preamb1)];
end
%x2e=[zeros(1,preamb2),x2,zeros(1,postamb2)];
if preamb2==0
x2e=[];
else
x2e=[zeros(1,preamb2)];
end
x1e=[x1e,x1];
x2e=[x2e,x2];
if postamb1~=0
x1e=[x1e,zeros(1,postamb1)];
end
if postamb2~=0
x2e=[x2e,zeros(1,postamb2)];
end
x=x1e+x2e;
window command :
t=-10:10;
x1=[zeros(1,10),ones(1,11)];
x2=sin(0.35*t);
stem(t,sigadd(x1,t,x2,t));
function [x,t]=sigdiff(x1,t1,x2,t2)
%Adding two signals
%inputs :
% x1,t1 first input signal amplitudes and instants
% x2,t2 second input signal amplitudes and instants
%outputs :
% x,t sum signal amplitudes and instants
first=min(t1(1),t2(1));
l1=length(t1);
l2=length(t2);
last=max(t1(l1),t2(l2));
t=first:last;
l=length(t);
%search number of preamble ans postamble zeros
%needed to extend x1 and x2
preamb1=t1(1)-first;
preamb2=t2(1)-first;
postamb1=last-t1(l1);
postamb2=last-t2(l2);
%x1e=[zeros(1,preamb1),x1,zeros(1,postamb1)];
if preamb1==0
x1e=[];
else
x1e=[zeros(1,preamb1)];
end
%x2e=[zeros(1,preamb2),x2,zeros(1,postamb2)];
if preamb2==0
x2e=[];
else
x2e=[zeros(1,preamb2)];
end
x1e=[x1e,x1];
x2e=[x2e,x2];
if postamb1~=0
x1e=[x1e,zeros(1,postamb1)];
end
if postamb2~=0
x2e=[x2e,zeros(1,postamb2)];
end
x=x1e-x2e;
function [x,t]=sigmul(x1,t1,x2,t2)
%Adding two signals
%inputs :
% x1,t1 first input signal amplitudes and instants
% x2,t2 second input signal amplitudes and instants
%outputs :
% x,t sum signal amplitudes and instants
first=min(t1(1),t2(1));
l1=length(t1);
l2=length(t2);
last=max(t1(l1),t2(l2));
t=first:last;
l=length(t);
%search number of preamble ans postamble zeros
%needed to extend x1 and x2
preamb1=t1(1)-first;
preamb2=t2(1)-first;
postamb1=last-t1(l1);
postamb2=last-t2(l2);
%x1e=[zeros(1,preamb1),x1,zeros(1,postamb1)];
if preamb1==0
x1e=[];
else
x1e=[zeros(1,preamb1)];
end
%x2e=[zeros(1,preamb2),x2,zeros(1,postamb2)];
if preamb2==0
x2e=[];
else
x2e=[zeros(1,preamb2)];
end
x1e=[x1e,x1];
x2e=[x2e,x2];
if postamb1~=0
x1e=[x1e,zeros(1,postamb1)];
end
if postamb2~=0
x2e=[x2e,zeros(1,postamb2)];
end
x=x1e.*x2e;
d. Fonction sigdiv (division) :
Cette fonction prend en entrée deux signaux x[n] et y[n] de même longueur et renvoie un nouveau signal
résultant de la division terme à terme du premier signal par le deuxième.
function [x,t]=sigdiv(x1,t1,x2,t2)
%Adding two signals
%inputs :
% x1,t1 first input signal amplitudes and instants
% x2,t2 second input signal amplitudes and instants
%outputs :
% x,t sum signal amplitudes and instants
first=min(t1(1),t2(1));
l1=length(t1);
l2=length(t2);
last=max(t1(l1),t2(l2));
t=first:last;
l=length(t);
%search number of preamble ans postamble zeros
%needed to extend x1 and x2
preamb1=t1(1)-first;
preamb2=t2(1)-first;
postamb1=last-t1(l1);
postamb2=last-t2(l2);
%x1e=[zeros(1,preamb1),x1,zeros(1,postamb1)];
if preamb1==0
x1e=[];
else
x1e=[zeros(1,preamb1)];
end
%x2e=[zeros(1,preamb2),x2,zeros(1,postamb2)];
if preamb2==0
x2e=[];
else
x2e=[zeros(1,preamb2)];
end
x1e=[x1e,x1];
x2e=[x2e,x2];
if postamb1~=0
x1e=[x1e,zeros(1,postamb1)];
end
if postamb2~=0
x2e=[x2e,zeros(1,postamb2)];
end
x=x1e./x2e;
Conclusion :
Ces opérations arithmétiques sur les signaux sont des pratiques répandues en traitement du signal,
servant à combiner, ajuster ou confronter différents signaux entre eux. Elles facilitent une analyse
approfondie et des transformations efficaces des données.
4. Autre operations :
1
𝑃 = |𝑥(𝑛)|
𝑁
En guise d’exercice réaliser les fonctions sumsignal, prodsignal et puissancesignal. Puis testez-les sur un
exemple.
Sumsignal
La fonction 'sumsignal' est employée pour déterminer la somme des échantillons d'un signal, fournissant
ainsi une mesure de l'énergie totale qu'il contient. L'utilisation de 'sumsignal' permet d'obtenir des
renseignements sur l'ampleur de l'énergie présente dans le signal, ce qui peut s'avérer précieux pour
évaluer sa puissance ou son impact au sein d'un système donné.
Script :
function [somme]=sumsignal(x)
N=length(x);
somme=0;
for i=1:N
somme=somme+x(i);
end
end
window command :
>> x=[1 9 6 5 4 12];
>> sumsignal(x)
ans =
37
Prodsignal
La fonction 'prodsignal' sert à calculer le produit des échantillons de deux signaux. Cette manipulation
permet d'évaluer la corrélation entre ces deux signaux, mettant en lumière leurs similarités ou leurs
disparités. Le produit de deux signaux est fréquemment employé pour détecter des motifs ou des
structures communes, offrant ainsi une utilité appréciable dans divers contextes de traitement du signal.
Script :
function [produit]=prodsignal(x)
N=length(x);
produit=1;
for i=1:N
produit= produit.*x(i);
end
end
Window command :
>> x=[1 9 6 5 4 12];
>> prodsignal(x)
ans =
12960
Puissancesignal
La fonction 'puissancesignal' est exploitée afin de déterminer la puissance moyenne d'un signal sur une
période spécifiée. Cette procédure permet d'évaluer la quantité moyenne de puissance contenue dans un
signal, offrant ainsi un moyen de caractériser la performance ou l'efficacité d'un système de transmission
ou de traitement du signal.
Script :
function [puissance]=puissancesignal(x)
N=length(x);
somme=0;
for i=1:N
somme=somme+(x(i))^2;
end
puissance=(1\N).*somme;
end
Window command :
>> x=[1 9 6 5 4 12];
>> puissancesignal(x)
ans =
1818
En comprenant ces opérations et en les appliquant dans MATLAB, nous pourrons effectuer des analyses
avancées sur les signaux numériques et obtenir des informations cruciales pour nos projets de traitement
du signal.
Spectre des signaux
La représentation des signaux dans le domaine temporelle utilise la notion de spectre. Matlab fournit la
fonction fft pour calculer la transformée de Fourier complexe d’un vecteur. Le vecteur signal étant de
dimension finie, c’est la transformée discrète qui est calculée. Si N est la longueur su signal, le spectre
sera un vecteur complexe de même longueur qui pourra être représente en coordonnées cartésiennes
(partie réelle et imaginaire fonctionreal et imag), ou en coordonnées polaires (module et phase, fonction
matlab abs et angle ou unwrap). Prenons la cas d’une sinusoïde amortie. Les fréquences vont être
graduées en Hz en supposant une fréquence d’échantillonnage fe de 1Kz – les fréquences les fréquences
supérieures a 500Hz correspondent au fréquence n´ergatives du spectre f− = f − fe.
Exemple 1 :
On considère le signal :
x=[1 2 3 4 5 6 7 6 5 4 3 2 1];
t=-2:10;
Générer et tracer les séquences suivantes à l’aide des fonctions précédemment définies :
x1[n] = 2x[n − 5] − 3x[n + 4]
x2[n] = x[3 − n] − x[n]x[n − 2]
ainsi que leurs spectres.
Exemple 2 :
On considère le signal complexe :
t=-10:10;
alpha=-0.1+j*0.3;
x=exp(alpha*t);
Générer ce signal et en tracer les parties réelles et imaginaire ainsi que le module et la phase dans quatre
vignettes indépendantes de la même figure. Représenter le spectre du signal.
t=-10:10;
alpha=-0.1+j*0.3;
x=exp(alpha*t);
subplot(3,1,1);
stem(t,x);
axis([-10 10 -3 3]);
title('essai');
xlabel('n');
ylabel('Amplitude');
%spectre
X=fft(x);
rX=real(X);
iX=imag(X);
N=length(t);
f=(0:N-1)*1000/N; %r¶ealisation de la plage de fr¶equence
subplot(3,2,3)
plot(f,rX);
title('Real(X)');
xlabel('f(Hz)');
ylabel('Amplitude');
grid;
subplot(3,2,4);
plot(f,iX);
title('Imag(X)');
xlabel('f(Hz)');
ylabel('Amplitude');
grid;
rho=abs(X);
theta=angle(X); %en radians
theta1=180*theta/pi; %en degres
subplot(3,2,5);
plot(f,rho);
title('Mag(X)');
xlabel('f(Hz)');
ylabel('Amplitude');
grid;
subplot(3,2,6);
plot(f,theta1);
title('Phase(X)');
xlabel('f(Hz)');
ylabel('deg.');
grid;
CONCLUSION
En conclusion, notre exploration des opérations sur les signaux dans MATLAB s'est avérée être une
immersion enrichissante dans le vaste domaine du traitement du signal numérique. Tout au long de cette
étude, nous avons développé une compréhension approfondie des outils essentiels et des techniques
fondamentales permettant de manipuler, analyser et interpréter efficacement les signaux.
À travers l'utilisation d'une gamme variée d'opérations telles que le décalage temporel, les opérations
arithmétiques sur les signaux et l'analyse spectrale, nous avons acquis la capacité de décoder la
complexité des signaux numériques et d'extraire des informations pertinentes à partir d'eux. De la simple
manipulation des signaux à une analyse spectrale détaillée, nous avons développé des compétences
pratiques ainsi qu'une compréhension approfondie des concepts théoriques sous-jacents.
Cette exploration nous a également permis de saisir l'importance et la pertinence du traitement du signal
numérique dans divers domaines, allant des télécommunications à la biologie en passant par la finance.
Nous avons réalisé que les outils et les techniques que nous avons appris peuvent être appliqués de
manière créative et innovante pour résoudre une multitude de problèmes du monde réel.
En résumé, cette étude nous a dotés d'un ensemble de compétences précieuses et nous a offert une
perspective éclairée sur le traitement du signal numérique. Elle nous a également inspirés à poursuivre
notre exploration de ce domaine fascinant, où les possibilités sont infinies et où notre capacité à
comprendre et à manipuler les signaux numériques peut avoir un impact significatif sur le monde qui
nous entoure.