パワースペクトルの実際の作業内容-06

 両対数プロットの問題点,解決策

両対数プロットをとったときの問題点を考えていきましょう.

逆fノイズ波形を例にとるとわかりやすいかもしれません.

1/fノイズ(ピンクノイズ)を生成するために,
 サンプル(サンプル数)            :2048
 ノイズ密度(これはよくわかりません...) :0.1
 指数(たぶん,f^(-n)のnのこと)      : 1
 dt(このアイコン内での設定ではないですが) : 0.5 ms

で生成した波形に対して,
 FFTサンプル数 : 2048
でパワースペクトルを計算すると

と両対数プロットの場合では,
 高周波に行くに従い,ノイズ(ノイズのノイズ)が大きくなる
 高周波に行くに従い,dfが密になる
 低周波領域では,dfが荒い

ことがわかります.これではなかなか近似がうまくいかなくなりそうですね.
 低周波領域のポイントが少ない
 高周波領域のポイントが多い

ので,近似をすると高周波領域に引っ張られちゃいます.

前々ページにあるように,

 実際の波形の時間 (s)  : Stime
 サンプル周波数 (1/s)  : Sfreq
 サンプル時間分解能 (s) : dt
  実際の波形の数     : n

とすると,

\(\Large \displaystyle S_{time} = n \times dt = \frac{n}{S_{freq}} \)

の関係になります.これにフーリエ変換すると,

 フーリエ変換の横軸の最小単位 (Hz)   : df
 フーリエ変換の横軸の数        : fnumber
 フーリエ変換の横軸のレンジ(最大値) :  frange

とすると,

\(\Large \displaystyle df = \frac{S_{freq}}{n} = \frac{1}{S_{time}}\)

\(\Large \displaystyle f_{number} = \frac{n}{2} \)

\(\Large \displaystyle f_{range} = \frac{S_{freq}}{2} \)

なので,

 dt = 0.0005 ms (Sfreq = 2000 1/s)
 n = 2048
 Stime = 0.0005 ms×2048 = 約1S

とすると,

\(\Large \displaystyle df = \frac{2000}{2048} = 0.9766 Hz \)

と,
 1~10 Hzの間に約10ポイント
しかポイントがないことがわかります.

逆に,
 100~10000 Hzの間に約900ポイント
もポイントがあることがわかります.

対数で表示すると同じ幅なのに...

直感的にも,
 もっと低周波にポイントを
 高周波のポイントを少なくしてもいい

ことがわかります.

 

・低周波領域の周波数分解能を上げるにはどうしたらいい?

これは簡単,dfの計算式を見るように,

\(\Large \displaystyle df = \frac{S_{freq}}{n} = \color{red}{\frac{1}{S_{time}}}\)

とにかく計測時間を延ばすことに尽きます.

当然ながら,低周波とはゆっくりとした周期なので長時間データが取ることが必須となります.

ですので,蛍光色素の退色,たんぱくの変性などなかなか厳しいものがあります.

しかし,もし,長時間データを取得できたとしても,別の問題があります.

それは,計算時間の増大,です.

FFTの最初のFは,Fast,であるように,高速計算できるところに特徴があります.しかしそれは,あくまで一般的なフーリエ変換に比べて,です.

こちらのサイトにありますように,FFTの計算時間は,

\(\Large \displaystyle 計算時間 \propto N \ log_2 \left(\frac{N}{2} \right) \)

に比例することが知られています(ちゃんと計算したことはないですが).

すると,たとえば(比例係数を無視して),

n nlog2(n/2)
4 4
8 16
16 48
32 128

とnが2倍になっても,2倍以上の計算時間となります.

グラフで表すと,

とDFTに比べるとFFTは圧倒的に計算時間を短縮できますが,いずれも下凸カーブなのでデータ数が多くなると計算時間がどんどん長くなります.

ですので,あまりデータ数が多いと莫大な計算時間がかかってしまいます.

しかし,dfの式をよく見ると,

\(\Large \displaystyle df = \color{red}{\frac{S_{freq}}{n}} = \frac{1}{S_{time}}\)

とあるように,サンプル周波数,Sfreq,を下げれば,同じnであっても,Stime,を伸ばすことができます.

100ポイントであっても,1秒ごとなら100秒,0.1秒ごとなら10秒となるので.

しかし,やみくもにサンプル周波数を下げると,

\(\Large \displaystyle f_{range} = \frac{S_{freq}}{2} \)

今度は高周波領域の解析ができなくなってしまいます

八方ふさがりですが,一ついい手があります.それは,

 高時間分解能でデータを取得して,あとで間引けばいい

ということ.

1ms間隔でデータを取得して,その後データを間引けば(Decimate),高周波領域も低周波領域も高い分解能で解析できます.

しかし....そう簡単にはいかないのです....その説明と対策は次ページに

 

 

 

 

l tr