Wolfram Signalverarbeitung | Zum Ausprobieren

Nehmen Sie Änderungen vor und führen Sie jeden Code aus, indem Sie in den Code klicken und die Tastenkombination
+
drücken.
Signalverarbeitung & Analyse. Umfassende Signalverarbeitungsfunktionen, eng gebündelt mit leistungsstarker Berechnung, Statistik und maschinellem Lernen für Studierende und Fachleute in den Bereichen Technik, Finanzen, Medizin und mehr.

IIR-Butterworth-Tiefpassfilter

Erstellen Sie den analogen Butterworth-Prototyp der Ordnung
n=3
für einen Filter mit unendlicher Impulsantwort (IIR)-Filter und Grenzfrequenz
ω
c
=π/6
unter der Annahme einer Abtastperiode
T=1
:
Ausführen
In[]:=
T=1;
ω
c
=
π
6
;n=3;​​
Ω
c
=
2.
T
Tan
ω
c
2
;​​tf=ButterworthFilterModel[{n,
Ω
c
},s]//TransferFunctionExpand//Chop
Erstellen Sie den entsprechenden digitalen Filter durch bilineare Transformation:
Ausführen
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
Visualisieren Sie das Bode-Diagramm des Filters:
Ausführen
In[]:=
BodePlotdtf,{0,π},


Daten filtern mit einem IIR-Filter

Erzeugen Sie ein verrauschtes sinusförmiges Signal:
Ausführen
In[]:=
sig=TableSin
3.π
128
n,{n,0,127}+RandomReal[{-0.25,0.25},128];
Definieren Sie einen Butterworth-Filter mit unendlicher Impulsantwort:
Ausführen
In[]:=
dtf=
0.153903
3
(1.+z)
-4.70766+19.0258z-26.6767
2
z
+13.5898
3
z
1
;
Filtern Sie das verrauschte Signal:
Ausführen
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];​​ListPlot[{sig,res}]

FIR-Tiefpassfilter mit der Fenstermethode

Erstellen Sie einen Filter der Länge
L=17
mit endlicher Impulsantwort (FIR) und Grenzfrequenz
ω
c
=π/6
:
Ausführen
In[]:=
ω
c
=
π
6
;L=17;​​h=LeastSquaresFilterKernel[{"Lowpass",
ω
c
},L]
Wenden Sie ein Von-Hann-Fenster auf die Reaktion des Einheits-Abtastsystems an:
Ausführen
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];​​fir=wh
Visualisieren Sie den Frequenzgang des resultierenden Filters:
Ausführen
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},


Datenfilterung mit einem FIR-Filter

Erzeugen Sie ein verrauschtes Signal:
Ausführen
In[]:=
sig=Table[SquareWave[n/64],{n,0,127}]+RandomReal[{-0.25,0.25},128];
Erstellen Sie einen FIR-Tiefpassfilter:
Ausführen
In[]:=
fir=LeastSquaresFilterKernel[{"Lowpass",π/6},17]Array[HannWindow,17,{-0.5,0.5}];
Filtern des Signals mit
ListConvolve
:
Ausführen
In[]:=
res=ListConvolve[fir,sig,9];​​ListPlot[{sig,res}]
Äquivalent dazu filtern Sie das Signal mit der Funktion
LowpassFilter
:
Ausführen
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]

Leistungsspektrum eines Mehrfrequenzsignals

Definieren Sie ein Paar Wählsignale in Doppelton-Mehrfrequenz (DTMF) (in Radiant/Abtastung) für die Wähltonziffer 2:
Ausführen
In[]:=
{fp,fs}={697,1336};​​{wp,ws}=
2π
8000.
fp,
2π
8000.
fs
Erzeugen Sie ein Zweiton-Signal von etwa 200 ms Dauer:
Ausführen
In[]:=
dtmf=Table[Sin[wpn]+Sin[wsn],{n,0,1799}]+RandomReal[{-0.25,0.25},1800];​​audio=AudioPad[Audio[dtmf,SampleRate8000],{0.02,0.02}]
Visualisieren Sie das Leistungsspektrum:
Ausführen
In[]:=
Periodogramaudio,

Bei der Welch-Methode werden die Leistungsspektren von geglätteten und überlappenden Partitionen gemittelt:
Ausführen
In[]:=
Periodogramaudio,600,300,BlackmanWindow,


Signalanalyse mithilfe eines Spektrogramms

Definieren Sie Paare von Doppelton-Mehrfrequenzen (in Radiant/Abtastung) für die Wähltonziffern 9 und 1:
Ausführen
In[]:=
freqs=
2π
8000.
#[[1]],
2π
8000.
#[[2]]&/@{{852,1447},{697,1209}}
Erstellen Sie einen Audioclip für die Doppeltonfolge:
Ausführen
In[]:=
dtmf=(Table[Sin[#[[1]]n]+Sin[#[[2]]n],{n,0,1799}]+RandomReal[{-0.25,0.25},1800]&)/@freqs;​​audio=AudioJoin[AudioPad[Audio[#,SampleRate8000],{0.01,0.01}]&/@dtmf]
Betrachten Sie das Spektrogramm:
Ausführen
In[]:=
Spectrogramaudio,

Verbessern Sie die Frequenzauflösung, indem Sie die Segmentlänge erhöhen:
Ausführen
In[]:=
Spectrogramaudio,512,

Verbessern Sie außerdem die zeitliche Auflösung, indem Sie die Überlappung zwischen den Segmenten erhöhen:
Ausführen
In[]:=
Spectrogramaudio,512,64,


Zeitreihenverarbeitung

Beziehen Sie die täglichen Temperaturdaten. Die Daten haben eine Abtastperiode von
T=1
Tag oder
T=86400
Sekunden, was eine Abtastrate von
sr=
1
86400
Abtastungen pro Sekunde ergibt:
Ausführen
In[]:=
ts=TimeSeries
Time:
01 Jan 2024
to
06 Aug 2024
Data points: 219
;
Glätten Sie die Daten durch Anwendung eines Tiefpassfilters mit einer Grenzfrequenz, die einem Wochendurchschnitt nahe kommt:
Ausführen
In[]:=
sr=1/86400;​​DateListPlotts,LowpassFilterts,
π
6
sr,15,

Berechnen und visualisieren Sie zusätzlich den ungefähren Monatsdurchschnitt:
Ausführen
In[]:=
DateListPlotts,LowpassFilterts,
π
6
sr,15,LowpassFilterts,
π
186
sr,65,
