++C++; // 未確認飛行 C 避けて通れない「非同期処理」を克服しよう

Top総合 目次ディジタル信号処理

周波数特性

このエントリーをはてなブックマークに追加

目次

キーワード

周波数特性

信号処理の分野では、時間領域信号をフーリエ変換したもの、 要するに周波数領域信号を周波数特性(frequency property)と呼びます。 周波数領域信号を、信号やシステムの周波数的な特性を表す物理量だとみなすわけです。 (他にも、自然科学や数学の他の分野でも通じる一般的な呼称として、スペクトル(spectrum、複数形は spectra)というものもあります。)

フーリエ変換」 で示したように、 時間信号 f(t) のフーリエ変換・逆変換の式は以下のようになります。

F(ω)
 ∞
 
-∞
f(t)exp(-iωt)dt
f(t) =
1
 ∞
 
-∞
F(ω)exp(iωt)dω

この、逆変換公式に出てくる積分中の項 F(ω)exp(iωt) ですが、 F(ω) を絶対値 A(ω) と、 偏角 φ(ω) に分けることで、 以下のように表すことができます。

F(ω)exp(iωt) = A(ω)exp i(ωt + φ(ω))
A(ω)|F(ω)|
φ(ω)argF(ω)

exp iωt というのは、虚部(あるいは実部)を見ると、 正弦波(余弦波)になっています。 なので、 A(ω)exp i(ωt + φ(ω)) という式は、振幅 A、位相φ の正弦波だと考えることができます(図1)。 要するに、フーリエ逆変換の式は、 角周波数 ω、 振幅 A(ω)、 位相 φ(ω) の正弦波を幾重にも重ね合わせたものだと考えることが出来ます。

図1: 振幅と位相

周波数領域信号 F(ω) は複素数値関数ですので、 グラフ化するのも面倒ですし、 F(ω) そのものが物理的にいったい何を表すものなのかいまいちピンと来ません。 それに対して、A(ω) および φ(ω) は、実関数ですし、上述のように、振幅や位相として考えればイメージが沸きやすいと思います。

そのため、 A(ω)|F(ω)|振幅特性(amplitude property, magnitude property)あるいは振幅スペクトル(amplitude spectrum)と、 φ(ω)argF(ω)位相特性(phase property, phase property)あるいは位相スペクトル(phase spectrum)と呼び、 非常によく利用されます。

対数振幅

振幅特性は、周波数ごとにどのくらいの振幅=信号の強さを持っているかを示す関数です。 音ならば振幅が大きいほど音の強さも大きく聞こえますし、 光ならば明るく見えます。

ところで、音にしろ光にしろ、人間の感覚は、 刺激の強さ(intensity)に対して線形ではなく、むしろ対数に近い反応を示します。 要するに、振幅が2, 3, 4, 5・・・になったときに2, 3, 4, 5・・・の大きさに感じるのではなく、 10, 100, 1000, 10000・・・倍になったときに2, 3, 4, 5・・・倍の大きさに感じます。 (大体です。ぴったり対数になるわけではない。)

なので、振幅特性 A(ω)|F(ω)| そのものではなく、振幅の対数を取ったものがよく用いられます。 数学的には、 g(ω)log|F(ω)| というように、自然対数を用いるのが式変形等が楽でいいのですが、 自然対数だと、F の振幅が 2.71828・・・ 倍になったときに g が 1 増えるというように、数値的に分かりづらいという問題があります。 そのため、工学系の分野ではデシベル[dB](deci Bell、deci は1/10を表す補助単位、Bell は人名から付けられた単位名。デシを付けない場合は [Bel] と書く)という単位がよく用いられます。 デシベル値は以下のような式で定義されます。

g(ω) = 10 log10|F(ω)|

要するに F の振幅が1桁増えた(10倍)ときに g の値が10[dB]増えます。 (振幅が1桁増えると 1[Bel] 増える。 10デシリットルで1リットルというのと同じ理屈で、 10[dB] = 1[Bel] です。)

ここで、もう1点、注意しておくことがあります。 工学の分野では、振幅特性よりも、振幅を2乗したものをよく使います。 信号の振幅を電気的に測定した場合、 その値は電圧[V]という形で得られます。 要するに、振幅の2乗というのは、電圧の2乗 = 電力[W]を表す値と言うことになります。 そのため、振幅特性を2乗したものはパワースペクトル(power spectrum)あるいは、 単にパワー(power)と呼ばれています。 そして、振幅特性と同様に、パワー p もデシベルで表します。

p(ω) = 10 log10|F(ω)|2 = 20 log10|F(ω)|

元の値が2乗なので、対数を取った値は2倍になります。 したがって、 F の振幅が1桁増えたときに p の値が20[dB]増えます。 工学の分野で+20[dB]と言われた場合、値が1桁上がった(10倍になった)と思ってください。 あと、覚えておくと便利な値として、 「+6[dB] で約2倍」というものがあります。 (log102 ≒ 0.3010。) その他、倍率とパワー[dB]の関係をいくつか表1に示します。

表1: 倍率とパワー[dB]の関係

パワー[dB]倍率
+60×1,000
+40×100
+20×10
+14×5 (近似)
+8×2.5 (近似)
+6×2 (近似)
±0×1
-6×0.5 (÷2) (近似)
-8×0.4 (÷2.5) (近似)
-14×0.2 (÷5) (近似)
-20×0.1 (÷10)
-40×0.01 (÷100)
-60×0.001 (÷1,000)

信号の切り出し

測定により、図2に示すような信号ご得られたとします。 無限長の信号を解析することは出来ませんから、 信号の一部分を切り出して解析することになります。

図2: 信号の切り出し

このとき、信号をどこから切り出すかによって、 すなわち、信号に時間的なずれが生じたときに、 周波数特性がどう変わるかを見てみましょう。 信号が 0 でなくなる所から信号を切り出せばいいんじゃないのかと思う方もいるかと思いますが、 測定には雑音や誤差がつき物ですから、 信号がどこまで 0 で、どこから非 0 なのかを判断するのは容易ではありません。

例えば、図2において、 区間 A で切り出した信号を fA(t)、 区間 B で切り出した信号を fB(t) とすると、

fA(t) = fB(t - T)

という関係が成り立ちます。 これらの信号をフーリエ変換したものをそれぞれ FA(ω), FB(ω) とすると、 フーリエ変換の性質より( 「フーリエ変換の性質」 参照)、 これらの間には以下のような関係式が成り立ちます。

FA(ω)exp(- T ω)・ FB(ω)

では、これらの信号の振幅特性および位相特性がどうなっているのかを見てみましょう。 FA, FB の振幅特性および位相特性をそれぞれ AA, AB, φA, φB とすると、

FA(ω) = AA(ω)exp φA(ω)
FB(ω) = AB(ω)exp φB(ω)

なので、先ほどの関係式は、

AA(ω)exp φA(ω) = AB(ω)exp( φB(ω) - T ω )

となります。 この式から、以下のようなことがいえます。

  • 振幅特性は時間的なずれに対して不変。
  • 時間 T の遅延に対して、位相特性は -T ω だけ変化する。

信号の切り出し位置が変わっても(信号の両端が 0 ならば)、 振幅特性は変化しないので、 振幅特性の解析は細かいことはあまり気にせず適当に信号を切り出しても大丈夫です。

これに対して、位相特性は切り出し位置が変わると値が変わってしまいますから、 2つの信号の位相特性を比較仕様と思うと、切り出し位置を正しく合わせるための工夫が必要になります。 例えば、比較したい2つの信号を同時に測定するとか、 測定の開始時間を表すトリガー信号を記録しておくなどの工夫をします。

位相特性の不定性

指数関数は、exp jx = exp j(x + 2πn)n は任意の整数)という性質を持っています。 したがって、振幅および位相特性 A, φ に関して、以下のような式が成り立ちます。

A exp j(Tω + φ) = A exp j(Tω + φ + 2πn)

この式から、位相 φφ + 2πn の間には区別が付かないということが言えます。 すなわち、 位相特性には の不定性があるということになります。

位相特性は、φ(ω)argF(ω) 周波数特性の偏角として定義されるわけですが、 複素数の偏角は

argα = tan-1(
Re α
Im α
)

というように、tan の逆関数で表されるわけですが、 数値計算上、この式の値は -π ~ π の範囲で出てくるのが普通です。 したがって、計算機上で位相特性を求めると、 図3に示すように細切れにされた状態になります。

図3: 位相特性

で、位相には 2πn の不定性があるわけですから、 の整数倍だけずらしても構わないわけです。 通常は、ω = 0 付近での位相が 0 になるようにして、 図4 に示すような感じで位相特性を繋げていきます。 このようにして、位相特性を連続的に繋いでいく処理を、 位相のアンラッピング(unwrapping)処理といいます。

図4: 位相特性

遅延

周波数特性」 で述べましたが、 位相特性は正弦波信号の時間的なずれになります。 「時間的な」と書きましたが、 信号に遅延時間を与えたとき、その遅延時間 T がそのまま位相になるわけではありません。 「信号の切り出し」 で述べましたが、 信号に遅延時間 T を与えると、 位相が - T ω だけ変化します。 すなわち、 φ(ω) = - T ω は、 遅延時間 T に相当する位相だといえます。

これとは逆に、位相から遅延時間に相当するものを求めようとすると、 位相遅延と呼ばれるものと、群遅延と呼ばれるものの2通りの方法があります。

位相遅延特性

まず、1つ目は位相遅延と呼ばれるものです。 先ほど述べたとおり、周波数によらない一定の遅延を与えた場合には、 φ(ω) = - T ω という関係式が成り立ちます。 そこで、この両辺を ω で割って、

Tp(ω) = -
φ(ω)
ω

という式で遅延を定義するのが位相遅延特性(phase delay property)です。

位相遅延特性は、直感的には分かりやすくて、 ピークの位置の時間差・遅延を表すものです。 角周波数 ω の2つの正弦波の間の位相遅延差が Tp(ω) だということは、 2つの正弦波のピークの位置の時間差が Tp(ω) であるということです。

ところが、計算上の面から見えると、位相遅延特性は非常に面倒な問題を抱えています。 位相には 2πn の不定性があり、 位相 φ(ω)φ(ω) + 2πn の間には区別が付かないわけですが、これら2つの位相特性から位相遅延特性を求めると、 前者は

Tp(ω) = -
φ(ω)
ω

となる一方で、後者は

Tp'(ω) = -
φ(ω)
ω
2πn
ω

となります。 区別が付かないはずの2つの位相から、異なる遅延が得られてしまうわけで、 これはあまり都合のいいことではありません。

まず第一に、正しく位相をアンラッピングしてから求めないと、 位相遅延の値が不連続になってしまいます。 また、アンラッピングを正しく行ったとしても、 位相の不定性がなくなるわけではなく、 位相遅延の考え方により求めた遅延時間は必ずしも正しいものであるとはいえません。

群遅延特性

もう1つの遅延は群遅延と呼ばれるものです。 位相遅延が ω で割るという方法を取るのに対して、

Tg(ω) = -
d
dω
φ(ω)

というように、ω で微分するのが群遅延特性(group delay property)です。

位相遅延と違って、こちらはイメージ的には少し分かりにくくなっています。 位相遅延が単純に2つの正弦波の「ピークの差」なのに対して、 群遅延は「うなりのピークの差」になります。 周波数がほんの少しだけ違う2つの波を重ねると、うなりが生じるわけですが、 式で表すのなら、

cos { (ω + Δω) t + (φ + Δφ)}cos{(ω - Δω) t + (φ - Δφ)}

という感じになります。 この式を、加法定理を用いて書き換えると、

2 cos{ Δω t + Δφ }cos{ ω t + φ }

となるわけで、 この cos{ Δω t + Δφ } の部分がうなりです。 そして、うなりの部分の位相遅延に相当するものが、 Tp(ω) = -

Δφ
Δω
なわけですが、この式に対して、Δω → 0 の極限を取ると、 群遅延特性が得られます。

なぜこんなイメージの掴みにくいものをわざわざ定義するかというと、 群遅延には計算上、有利な点があるからです。 まず、位相の不定性の影響を受けないというのが最大の利点です。 2つの位相 φ(ω)φ(ω) + 2πn の間には区別が付かないわけですが、 群遅延の場合、ω で微分するので、定数である 2πn の部分は消えてしまいます。 この利点は非常に大きなものですので、 位相遅延よりも群遅延の方がよく使われます。

さらに、位相遅延特性にはアンラッピング処理すら必要としない求め方があります。 周波数特性 F に対して、位相 φ は、 φ = argF で定義されるわけですが、 複素数の偏角に関して、以下のような公式があります( 「対数関数」 参照)。

logF = log|F| + i argF
∴ φ = argF = Im[logF]

この両辺を ω で微分すると、

d
dω
φ(ω)Im[
d
dω
logF ]Im[
1
F
d
dω
F ]

という式が得られます。 すなわち、周波数特性 F と、その導関数から直接、群遅延特性を計算することができます。 (微分演算をしないといけないので、多少数値計算が面倒ではありますが。)

余談

スペクトル

信号処理の分野に限らず、 自然科学・数学では、一般的に、 時間や位置(あるいはその両方)で表される関数を場(field)と呼びます。 これに対して、 (フーリエ変換の結果得られる)周波数で表される関数をスペクトル(spectrum)と呼びます。

時間で表される信号をフーリエ変換したときの変数を時間周波数、 位置で表される信号をフーリエ変換したときの変数を空間周波数と呼び、 両者を区別することもあります。 あるいは、時間に対して角周波数(周波数×2π)、 空間に対して波数(空間周波数×2π)というものを使う場合もあります。 「波数」という言葉は、「単位長さあたりに正弦波の1周期分の波がいくつ入っているか」という意味です。

例えば、時間 t と位置 r(x, y, z) で表される場 f(t, r) に対して、 そのスペクトルは、

F(ω, k)
 
 
 
 
 
 
 
 
f(t, r)exp i ( ωt - kr)dt dx dy dz

で表され、 ω が角周波数、 k が波数になります (位置がベクトル(2次元以上)で表されるとき、空間周波数や波数もベクトルになる)。

phase と topology

数学の集合論なんかでも位相という言葉が出てきますが、 この数学の位相と、このページで説明した位相はまったく別物になります。 信号処理・物理学における位相が phase なのに対して、 集合論の位相は topology。

phase は局面とか段階という意味の単語で、物理学では正弦波の時間的なずれを表します。 topology は場所を意味するギリシャ語 topos を起源とする数学用語で、 空間上の2点が遠いか近いか、連続かどうかなどを論じるための概念です。

位相という単語を構成する漢字の意味を考えると、 「位」は場所・位置・順位を、 「相」は形・ありさま・様子を表す文字です。 このことを踏まえて、位相という日本語を見てみると、 phase は正弦波のずれ(位置)の様子を、 topology は空間(場所)の幾何学的性質(ありさま)を現す言葉ということでしょうか。 なんとなくどっちも意味は分からなくもないんですが、 同じ訳語を使われるとややこしいです。

まあ、混乱を避けるために、 phase は「相」と訳し、 topology の方だけ「位相」と呼ぶ流儀もあるんですが、 あまり定着はしていません (多分、相だけだと、(音が同じなので)層(layer)とかの別の単語を連想するからだと思います)。

執筆予定

・対数振幅
[余談]
通常、物理量の対数をとる場合、
対数関数の中身は無明数(次元を持たない値)にしておく必要がある。

例えば、化学で使われるモルやpHがそう。
モル = 原子数(単位が[個]=次元を持たない)の対数

なので、本当は

g(ω) = 10 log_10 A(ω)/A_0
と言うように、ある値 A_0 との比の対数を取る必要がある。
A(ω)の次元が[V]ならA_0も[V]、他も同様。

A_0 = 1[V] としたものが
g(ω) = 10 log_10 A(ω)

ちなみに、A_0 を何にするかでdBの意味が変わってくるので、
これを明記するために、
A_0 = 1[mV] の場合は [dBm] と言うように表す。


・周波数特性の補間

ある周波数特性が位置に依存するとき、
ある点 A, B における周波数特性 FA, FB を測定などによって得て、
A, B の間の点における周波数特性 F を補間によって求めることを考える。

振幅特性と位相特性をそれぞれ補間する手法が一般的。
対数振幅の所で説明したような理由から、振幅特性は対数領域で補完する。

例えば、補間手法として線形補間を用いる場合、
FA の対数振幅、位相を gA, φA、
FB の対数振幅、位相を gB, φB
とすると、
A, B 間を n : m に内分する点における周波数特性 F は

g = (m gA + n gB) / (m + n)
φ = (mφA + nφB) / (m + n)
F = exp(g + iφ)

で求める。

対数領域・位相の相加平均なので、相乗平均を意味する。



自己相関とかも説明する?

[お問い合わせ](q)