mem_spect



機能:
時系列[i]のスペクトル推定(最大エントロピ法,対応Hz出力)

書式:
mem_spect([i],[oHz],[oy],△t,Hz初,Hz終,Hz増,N)

解説:
最大エントロピ法による時系列数値[i]のスペクトルの推定を行います。
"MEM"という最大エントロピ法によるスペクトル推定法の特徴:
@FFTよりスペクトル検出能力が優れます。長周期現象の一部のデータからでもスペクトルを検出できるし、周波数が接近している波形もはっきりと分離できます。
A推定されたスペクトルに線型性がないため、スペクトルの大きさの定量解析には適しません。
B推定モデルの次数Nの大きさにより結果が大きく異なります。
N次推定モデルの場合、結果のスペクトルは次の複素数型の式から得られます。
P(f) = C0 * Δt / {1 + ΣCn * exp(-i(2πf*n*Δt)) }^2
(n = 1,2,3,…,N)
入力時系列[i]のノイズが大きい場合は、推定モデルの次数を高くした方が良いです。ただし、最大の推定モデル次数は入力時系列の数値個数の半分を超えてはいけません。また、スペクトル出力の計算間隔Hz増が大きいとき、計算間隔内にある鋭い真のピークが失われ、ピークの両側の平のスペクトルだけが求められてしまうことがあります。
本関数は戻り値として、指定次数Nまで誤差が一番小さいと思われる推定モデルの次数を返しますが、あまり正確的ではないため、参考だけにして下さい。

     [i] ・・・・・・・・・・・・・・・ 時系列の入力数値組

     [oHz] ・・・・・・・・・・・・・・・ 結果の対応周波数の出力数値組

     [oy] ・・・・・・・・・・・・・・・ 結果のスペクトルの出力数値組

     △t ・・・・・・・・・・・・・・・ 時系列数値のサンプリング周期(単位:秒)

     Hz初,Hz終 ・・・・・・・・・・・・・・・ スペクトルの出力区間

     Hz増 ・・・・・・・・・・・・・・・ 正:刻み値、負整数:均分点数

     N ・・・・・・・・・・・・・・・ 推定モデル次数(最大1000)の指定

例:次の例は0.8Hz+0.85Hz+1Hz+1.4Hzの信号に対し、ノイズ混入無しの場合、11次の推定モデルであればきれいなスペクトルを求められましたが、信号最大強度の5倍相当の強いランダムノイズを混入すると、100次の推定モデルでも0.8Hzと0.85Hzの信号を区別できずに、200次でやっときれいに真のスペクトルを得ることができました。更に、スペクトル出力の計算間隔Hz増を0.03に広げると、真のスペクトルのピークを失ってしまいました。
例 : ノイズ混入なしの場合
rand_init(0);
val_fx(sin(0.8*2*PI*x)+sin(0.85*2*PI*x)+sin(1*2*PI*x)+sin(1.4*2*PI*x),[1],[2],0,0.1*1023,0.1);
mem_spect([2],[3],[4],0.1,0.6,1.6,0.0005,11);
ノイズ混入有りの場合
rand_init(0);
val_fx(sin(0.8*2*PI*x)+sin(0.85*2*PI*x)+sin(1*2*PI*x)+sin(1.4*2*PI*x)+20*rand(),[1],[2],0,0.1*1023,0.1);
mem_spect([2],[3],[4],0.1,0.6,1.6,0.0005,200);

return