Wolfram 訊號處理 | 值得嘗試的事情

透過點擊程式碼內部並按下
+
可以編輯並執行任何程式碼.
訊號處理與分析。Wolfram 全面的訊號處理功能,與強大的微積分、統計和機器學習緊密結合,適合工程、金融、醫學等領域的學生和專業人士。

低通 IIR 巴特沃斯濾波器

假設取樣週期為
T=1
,為無限脈衝響應 (IIR) 濾波器建立階數
n=3
的類比巴特沃斯原型,其截止頻率為
ω
c
=π/6
:
執行
In[]:=
T=1;
ω
c
=
π
6
;n=3;​​
Ω
c
=
2.
T
Tan
ω
c
2
;​​tf=ButterworthFilterModel[{n,
Ω
c
},s]//TransferFunctionExpand//Chop
使用雙線性轉換建立相應的數位濾波器:
執行
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
視覺化濾波器的波德圖:
執行
In[]:=
BodePlotdtf,{0,π},


使用 IIR 濾波器進行資料過濾

創建一個雜訊的正弦波訊號:
執行
In[]:=
sig=TableSin
3.π
128
n,{n,0,127}+RandomReal[{-0.25,0.25},128];
定義 IIR 巴特沃斯濾波器:
執行
In[]:=
dtf=
0.153903
3
(1.+z)
-4.70766+19.0258z-26.6767
2
z
+13.5898
3
z
1
;
濾除雜訊訊號:
執行
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];​​ListPlot[{sig,res}]

採用視窗方法的低通 FIR 濾波器

建立一個長度為
L=17
的有限脈衝響應 (FIR) 濾波器,其截止頻率為
ω
c
=π/6
:
執行
In[]:=
ω
c
=
π
6
;L=17;​​h=LeastSquaresFilterKernel[{"Lowpass",
ω
c
},L]
將韓恩視窗套用至單位樣本響應:
執行
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];​​fir=wh
顯示結果濾波器的頻率響應:
執行
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},


使用 FIR 濾波器進行資料過濾

建立雜訊訊號:
執行
In[]:=
sig=Table[SquareWave[n/64],{n,0,127}]+RandomReal[{-0.25,0.25},128];
建立低通 FIR 濾波器:
執行
In[]:=
fir=LeastSquaresFilterKernel[{"Lowpass",π/6},17]Array[HannWindow,17,{-0.5,0.5}];
使用
ListConvolve
過濾訊號:
執行
In[]:=
res=ListConvolve[fir,sig,9];​​ListPlot[{sig,res}]
等同於使用
LowpassFilter
函數過濾訊號:
執行
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]

DTMF 訊號的功率譜

為撥號音數位 2 定義一對雙音多頻 (DTMF) 標準化頻率(以弧度/樣本為單位):
執行
In[]:=
{fp,fs}={697,1336};​​{wp,ws}=
2π
8000.
fp,
2π
8000.
fs
建立持續時間約為 200 毫秒的雙音訊號:
執行
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}]
顯示功率譜:
執行
In[]:=
Periodogramaudio,

威爾屈的方法是將平滑和重疊分區的功率譜平均化:
執行
In[]:=
Periodogramaudio,600,300,BlackmanWindow,


使用頻譜圖進行訊號分析

為撥號音數位 9 和 1 定義成對的 DTMF 標準化頻率(以弧度/樣本為單位):
執行
In[]:=
freqs=
2π
8000.
#[[1]],
2π
8000.
#[[2]]&/@{{852,1447},{697,1209}}
為雙音序列建立音頻剪輯:
執行
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]
檢視頻譜圖:
執行
In[]:=
Spectrogramaudio,

透過增加分段長度來改善頻率解析度:
執行
In[]:=
Spectrogramaudio,512,

此外,透過增加區段間的重疊來改善時間解析度:
執行
In[]:=
Spectrogramaudio,512,64,


時間序列處理

取得每日溫度資料。資料的取樣週期為
T=1
天或
T=86400
秒,取樣率為
sr=
1
86400
取樣/秒:
執行
In[]:=
ts=TimeSeries
Time:
01 Jan 2024
to
06 Aug 2024
Data points: 219
;
使用截止頻率接近每周平均值的低通濾波器來平滑資料:
執行
In[]:=
sr=1/86400;​​DateListPlotts,LowpassFilterts,
π
6
sr,15,

此外,計算每月的近似平均值並將其視覺化:
執行
In[]:=
DateListPlotts,LowpassFilterts,
π
6
sr,15,LowpassFilterts,
π
186
sr,65,
