Traitement du signal avec Wolfram | Choses à essayer
Traitement du signal avec Wolfram | Choses à essayer
Effectuez des modifications et exécutez n’importe quel morceau de code en cliquant à l’intérieur du code et en appuyant sur .
+
Traitement et analyse des signaux. Des fonctionnalités complètes de traitement des signaux, étroitement associées à de puissants outils de calcul, de statistiques et d’apprentissage automatique, pour les étudiants et les professionnels de l’ingénierie, de la finance, de la médecine et bien plus encore.
Filtre passe-bas IIR Butterworth
Filtre passe-bas IIR Butterworth
Créez le prototype analogique de Butterworth d’ordre n=3 ω c T=1 |
In[]:=
T=1;=;n=3;=Tan;tf=ButterworthFilterModel[{n,},s]//TransferFunctionExpand//Chop
ω
c
π
6
Ω
c
2.
T
ω
c
2
Ω
c
Créez le filtre numérique correspondant à l’aide d’une transformation bilinéaire : |
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
Visualisez le tracé de Bode du filtre : |
In[]:=
BodePlotdtf,{0,π},
Filtrage des données avec un filtre IIR
Filtrage des données avec un filtre IIR
Créez un signal sinusoïdal bruité : |
In[]:=
sig=TableSinn,{n,0,127}+RandomReal[{-0.25,0.25},128];
3.π
128
Définissez un filtre IIR de Butterworth : |
In[]:=
dtf=
;
0.153903 3 (1.+z) -4.70766+19.0258z-26.6767 2 z 3 z |
1
Filtrez le signal bruyant : |
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];ListPlot[{sig,res}]
Filtre FIR passe-bas utilisant la méthode des fenêtres
Filtre FIR passe-bas utilisant la méthode des fenêtres
Créez un filtre à réponse impulsionnelle finie (FIR) de longueur L=17 ω c |
In[]:=
ω
c
π
6
ω
c
Appliquez une fenêtre de Hann à la réponse de l’échantillon unitaire : |
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];fir=wh
Affichez la réponse en fréquence du filtre obtenu : |
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},
Filtrage des données avec un filtre FIR
Filtrage des données avec un filtre FIR
Créez un signal bruyant : |
In[]:=
sig=Table[SquareWave[n/64],{n,0,127}]+RandomReal[{-0.25,0.25},128];
Créez un filtre FIR passe-bas : |
In[]:=
fir=LeastSquaresFilterKernel[{"Lowpass",π/6},17]Array[HannWindow,17,{-0.5,0.5}];
Filtrez le signal en utilisant |
In[]:=
res=ListConvolve[fir,sig,9];ListPlot[{sig,res}]
De manière équivalente, filtrez le signal à l’aide de la fonction |
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]
Spectre de puissance d’un signal DTMF
Spectre de puissance d’un signal DTMF
Définissez une paire de fréquences normalisées DTMF (en radians/échantillon) pour le chiffre 2 de la tonalité de numérotation : |
In[]:=
{fp,fs}={697,1336};{wp,ws}=fp,fs
2π
8000.
2π
8000.
Créez un signal à deux tons d’une durée d’environ 200 ms : |
In[]:=
dtmf=Table[Sin[wpn]+Sin[wsn],{n,0,1799}]+RandomReal[{-0.25,0.25},1800];audio=AudioPad[Audio[dtmf,SampleRate8000],{0.02,0.02}]
Affichez le spectre de puissance : |
In[]:=
Periodogramaudio,
La méthode de Welch calcule la moyenne des spectres de puissance des partitions lissées et superposées : |
In[]:=
Periodogramaudio,600,300,BlackmanWindow,
Analyse du signal à l’aide d’un spectrogramme
Analyse du signal à l’aide d’un spectrogramme
Définissez des paires de fréquences normalisées DTMF (en radians/échantillon) pour les chiffres 9 et 1 de la tonalité de numérotation : |
In[]:=
freqs=#[[1]],#[[2]]&/@{{852,1447},{697,1209}}
2π
8000.
2π
8000.
Créez un clip audio pour la séquence à deux tonalités : |
In[]:=
dtmf=(Table[Sin[#[[1]]n]+Sin[#[[2]]n],{n,0,1799}]+RandomReal[{-0.25,0.25},1800]&)/@freqs;audio=AudioJoin[AudioPad[Audio[#,SampleRate8000],{0.01,0.01}]&/@dtmf]
Visualisez le spectrogramme : |
In[]:=
Spectrogramaudio,
Améliorez la résolution de la fréquence en augmentant la longueur du segment : |
In[]:=
Spectrogramaudio,512,
Améliorez également la résolution temporelle en augmentant le chevauchement entre les segments : |
In[]:=
Spectrogramaudio,512,64,
Traitement des séries temporelles
Traitement des séries temporelles
Obtenez des données quotidiennes sur la température. Les données ont une période d’échantillonnage de T=1 T=86400 sr= 1 86400 |
In[]:=
ts=TimeSeries;
Lissez les données en appliquant un filtre passe-bas dont la fréquence de coupure est proche de la moyenne hebdomadaire : |
In[]:=
sr=1/86400;DateListPlotts,LowpassFilterts,sr,15,
π
6
Calculez et visualisez également la moyenne mensuelle approximative des émissions de gaz à effet de serre : |
In[]:=
DateListPlotts,LowpassFilterts,sr,15,LowpassFilterts,sr,65,
π
6
π
186