Wolfram 信号処理 | 試してみよう
Wolfram 信号処理 | 試してみよう
コードはどれも,コード内をクリックしてから,編集したり, を押して実行したりできます.
+
信号の処理と解析 包括的な信号処理機能は,強力な微積分,統計,機械学習の機能に強固に統合され,工学,金融学,医学等の学生およびプロフェッショナルに最適なものとなっています.
ローパスIIRバターワースフィルタ
ローパスIIRバターワースフィルタ
サンプリング周期が T=1 ω c n=3 |
In[]:=
T=1;=;n=3;=Tan;tf=ButterworthFilterModel[{n,},s]//TransferFunctionExpand//Chop
ω
c
π
6
Ω
c
2.
T
ω
c
2
Ω
c
双一次変換を使って,対応するデジタルフィルタを作成する: |
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
このフィルタのボード線図を描く: |
In[]:=
BodePlotdtf,{0,π},
IIRフィルタを使ったデータのフィルタリング
IIRフィルタを使ったデータのフィルタリング
ノイズの多い正弦波信号を作成する: |
In[]:=
sig=TableSinn,{n,0,127}+RandomReal[{-0.25,0.25},128];
3.π
128
IIRバターワースフィルタを定義する: |
In[]:=
dtf=
;
0.153903 3 (1.+z) -4.70766+19.0258z-26.6767 2 z 3 z |
1
ノイズの多い信号にフィルタを掛ける: |
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];ListPlot[{sig,res}]
窓関数法を使ったローパスFIRフィルタ
窓関数法を使ったローパスFIRフィルタ
カットオフ周波数が ω c L=17 |
In[]:=
ω
c
π
6
ω
c
単位サンプル応答にハン窓を適用する: |
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];fir=wh
結果のフィルタの周波数応答を表示する: |
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},
FIRを使ったデータのフィルタリング
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}];
In[]:=
res=ListConvolve[fir,sig,9];ListPlot[{sig,res}]
同様に, |
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]
DTMF信号のパワースペクトル
DTMF信号のパワースペクトル
ダイアルトーンの数字2について,デュアルトーン多重周波数(DTMF)で正規化された一対の周波数(単位:ラジアン/サンプル)を定義する: |
In[]:=
{fp,fs}={697,1336};{wp,ws}=fp,fs
2π
8000.
2π
8000.
約200ミリ秒の間のデュアルトーン信号を作成する: |
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}]
パワースペクトルを表示する: |
In[]:=
Periodogramaudio,
ウェルチの方法は,平滑化された重なり合うパーティションのパワースペクトルを平均化する: |
In[]:=
Periodogramaudio,600,300,BlackmanWindow,
スペクトログラムを使った信号解析
スペクトログラムを使った信号解析
ダイアルトーンの数字9と1について,DTMFで正規化された対の周波数(単位:ラジアン/サンプル)を定義する: |
In[]:=
freqs=#[[1]],#[[2]]&/@{{852,1447},{697,1209}}
2π
8000.
2π
8000.
デュアルトーンシーケンスの音声クリップを作成する: |
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]
スペクトログラムを見る: |
In[]:=
Spectrogramaudio,
セグメントの長さを長くすることで周波数分解能を向上させる: |
In[]:=
Spectrogramaudio,512,
さらに,セグメント間のオーバーラップを大きくすることで時間分解能も向上させる: |
In[]:=
Spectrogramaudio,512,64,
時系列処理
時系列処理
日々の気温データを得る.データのサンプリング期間は T=1 T=86400 sr= 1 86400 |
In[]:=
ts=TimeSeries;
カットオフ周波数を1週間の平均気温に近付けたローパスフィルタを適用することで,データを平滑化する: |
In[]:=
sr=1/86400;DateListPlotts,LowpassFilterts,sr,15,
π
6
さらに,おおよその月平均気温を計算して可視化する: |
In[]:=
DateListPlotts,LowpassFilterts,sr,15,LowpassFilterts,sr,65,
π
6
π
186