ディー・クルー・テクノロジーズ Blog

bookmark_borderディジタル信号処理~高校数学で理解する離散フーリエ変換⑦ 周波数成分の求め方4

さあ、今日は複素正弦波を使って具体的に離散フーリエ変換の計算の仕方をお伝えします。

離散フーリエ変換の公式

再び、離散フーリエ変換の公式です。

左辺のX(k)は、ある周期の波kに対し計算実施した結果で、全部でN個分のデータとなります。

右辺のx(n)は、”0~N-1の離散フーリエ変換対象の信号”です。 このブログではx(n)を”時刻 0~N-1の時間信号”のイメージで計算してましたが、実際は時刻に限らず、等間隔に並んだ離散信号なら何でもよいのでこの表現がしっくりきます。右辺の計算は、たとえばNが8であれば、”0から7までの8個の離散フーリエ変換対象の信号”に、複素正弦波(この公式では便宜上指数に-が付きますが内積計算に影響ありません)を乗じて各信号との内積を求め、それらをΣ(合計)することを意味します。

離散フーリエ変換公式による計算

N=8の時を例として計算方法をお伝えします。

k=0の時、各要素の計算はこんな感じになります。各要素は複素数になるので、複素平面上の円回転でも表現できます。視覚的に理解いただくために要素の下に掲載しました。

こんな感じになります。ちなみにX(0)のときはeの指数部が常に0になります。

次に他の7個分を計算します。kの値を変えるとこのとおり、回転速度が変わります。どう変わるのか視覚的に示すために複素平面図に矢印で示してみました。一部省略しましたが、kを0→7まで増やしていくとこんな感じになります。

ここで最もお伝えたいことは、kの値が低いほど回転が遅く、周波数も低くなることと、逆にkの値が高いほど回転も速く、周波数は高くなるということです。

三角関数を使わない、シンプルな離散フーリエ変換の計算テクニックとは、このように分析対象の波に対して、低い周波数から少しずつ高いものにずらして複素正弦波との内積を取る。その計算結果から周波数成分を見つけていくというアプローチになります。

私の離散フーリエ変換の公式を使った計算テクニックとは以上のようなものですが、いかがでしたでしょうか? このブログ全体を通じてディジタル信号処理や離散フーリエ変換について皆さまの関心が高まったり、ご理解が深まれば、大変嬉しく思います。

最後に、私も携わった信号処理技術を活用したディ―・クルーのソリューションを2つご紹介します。

bookmark_borderディジタル信号処理~高校数学で理解する離散フーリエ変換⑥ 周波数成分の求め方3

こんにちは。今、日本のアスリートが国際舞台で躍動していますね。彼らアスリートのフィジカルサポートには可搬式の超音波診断装置が用いられていて、チームドクターが練習場等に診断装置を持ち込み、筋肉やじん帯などを可視化して、治療方針の策定に役立てているそうです。これら診断装置には信号処理技術が使われていますので、わが社の信号処理技術がもしやメダル獲得につながっているかもしれない!などと勝手な想像をしてしまいます笑

さて、これまでの記事でご紹介した、ディジタル信号処理の周波数成分の求め方のおさらいです。

離散フーリエ変換のおさらい

  • 正弦波の周波数を少しずつずらして内積を求めれば、全周波数成分が求められる。
  • ただし、cosとsinの内積は0(相関なし)になるので、cosと分析対象の内積、sinと分析対象の内積、それぞれの値を求める必要がある。
  • cosとsinそれぞれの内積で求めた値が、各周波数成分の大きさである。

ここまでがご理解いただければ離散フーリエ変換の本質はばっちりです。

いままでの記事での内積計算を実践してお分かりいただけたと思うのですが、cosとsinの内積をそれぞれ求めて合計するのは、いかんせん手間がかかります。なので、これをシンプルにする計算テクニックをお伝えします。まず離散フーリエ変換の計算テクニックとして必要な部分を中心に、オイラーの公式、虚数、複素数についてそれぞれ触れ、最後に公式を用いた計算の実践までお伝えいたします。

計算テクニックのポイント

離散フーリエ変換の計算テクニックのポイントは以下の4つです。

  • オイラーの公式の活用
  • 複素正弦波を導く
  • 複素正弦波の回転を視覚的に示す
  • 複素正弦波の内積を求める

オイラーの公式の活用

オイラーの公式は、フーリエ変換の計算テクニックにとって強力なツールです。世代によって高校カリキュラムではやっていないそうで、私の時代も範囲外でしたが、次の世代のカリキュラム改革で範囲内になったと聞いたことがあります。

公式は以下のように表されます。

eはネイピア数という定数です(詳しい説明はここでは割愛します)。θは実数(xと記述することもあります)です。オイラーの公式を使うと、右辺のcosとsinの2つの三角関数を、左辺の指数関数1つですっきり表すことができます。虚数jがあるので複素数の理解が多少は必要になりますが、それ以上に式をシンプルにしてくれるメリットがあります。

複素正弦波を導く

まず、オイラーの公式を利用しながら、周期的な波を回転で示す指数関数を導きます。

周波数fとは1秒間にf回同じことを繰り返す周期的な波のことですが、まずこの波を回転で示します。 1秒間に一回グルっと回すとは、360°/1秒=2×180°/1秒=2πfです。(角周波数といいます)

これをオイラーの公式に代入しますと、こうなります。

このときの左辺を、周期的な波を回転で示す指数関数、複素正弦波と呼びます。

複素平面で複素正弦波の回転を示す

次に、この複素正弦波の回転を視覚的イメージするために、縦軸を虚数軸j、横軸を実数軸tとする特殊な平面をご用意しました。これは虚数と実数で成り立つ複素数を理解しやすくするために作られた表現で複素平面と呼びます。

ここに複素正弦波を表すと、図1の感じになります。これを見るとお分かりのように、複素正弦波は複素平面上で、0を中心にして2πftの増加に伴い、

図1

複素平面上の円周をぐるぐると回る周期関数となります。2πftのfの値を増やせば、同じtの変化量(Δt)に対してより大きく回転しますので、周期関数の回転速度もより速く(周波数がより高く)なります。複素正弦波は、指数に虚数がついているため取っつきにくい印象の式ですが、このように複素平面上でぐるぐる回る図にすると理解しやすく感じられたらうれしいです。

いかがでしたか? 次回は今日の基本情報踏まえ、離散フーリエ変換の公式で複素正弦波との内積を計算していきます。

離散フーリエ変換の公式

bookmark_borderディジタル信号処理~高校数学で理解する離散フーリエ変換⑤ 周波数成分の求め方2


こんにちは。

さて、前回は入力信号の周波数を少しずつずらして正弦波との内積を求めれば、あらゆる周波数成分の大きさを成分検出できそうということでした。前回記事はこちらです。

では検証してみましょう。

ずらした入力信号の周波数成分を求める

まず、2つの入力信号を時間で少しずらします。それぞれ、

・入力信号① 周波数1Hz(振幅1) :0 秒のとき 値1 → 値0 これを①´とする

・入力信号② 周波数2Hz(振幅0.5):0 秒のとき 値0.5 → 値0 これを②´とする

それぞれ、図1ような波形に変わります。少し時間だけずらしただけなのですが、波形にするとずいぶんと違いますね。

図1

なお、検出用の正弦波は前回と同じ ④cos(2Hz)です。

cos(2Hz)

ずらした信号とcosとの内積が0?

これら3つの波形を、前回同様、内積を求める時間単位の一覧表に展開して、内積を計算してみましょう。入力信号①´とcos③、入力信号①´とcos③を時間毎に掛け算していき、最後にそれらの和を求めるのでしたね。さて結果はどうなったでしょうか。

図3

おや? 内積が0になってしまいました。。。

周波数の違う①´はさておき、②´の2Hzの成分は一体どこに消えてしまったのでしょうか?

考察:内積が0になった理由を考えてみる

もちろん、2Hzの信号自体が消えてしまったわけではありません。

実は2Hzの信号②´はずらした結果、sin波になっています。そして重要なのがsinとcosの関数同士の内積は0(相関なし)になるという性質です。専門的には「関数の直交性」といいます。(イメージ的には直交するベクトル同士の内積が0になる「ベクトルの直交性」と非常によく似ています。あくまでイメージですが)

数式で証明しましょう。高校数学でも出てきた、sinとcosの積とsinの2倍角の公式で考えます。

左辺はsinとcosの内積です。sinΘとcosΘの積を全ての角度(0から2πの2周期分)にわたって合計することを意味します。それを2倍角の公式で変形しますとsin2Θ(正弦波sinの2周期分)の総和となります。右辺の正弦波2周期分のsin2Θの総和は、これ実際に計算すると0になりますので、右辺が0となり、左辺のsinΘcosΘの積の和である内積は、0(相関なし)になります。

関数の直交性は何を意味するの?

関数の内積が0=関数の直交性と、sin2Hzが検出できない問題がどうつながるの?という声がでそうですね。ここでお伝えしたかったのは、cosで成分検出できない波は、sinとの内積で検出が出来るということです。

色のディジタル表現をイメージすると案外わかりやすいかもしれません。カラーディスプレイでRGB方式がありますが、赤R緑G青Bの基本3色を256段階で配分してさまざまな色を表現できますね。信号処理では、直交性を持ち、性質が異なるsinとcosの関数2つでさまざまな信号成分が表現可能なんです。

また色で信号処理をたとえてしまいましたが(笑)、すべての波がsinとcosのたった2つの組み合わせで表現可能ということ。あらためてこのシンプルさが私はすごいなと思います。

cosでは検出できない周波数成分をsinで求める

ではsinとの内積であれば先ほどの信号が検出可能か念のためやってみましょう。入力信号①´②´の2つの信号と、sinとの内積を求めてみます。検出用に④´sin(2Hz)を用意し、周波数成分を求めてみます。

sin(2Hz)

内積を求めてみると、このようになります。

図4

結果、内積が求められました。周波数2Hzの信号をsin2Hzで成分検出できました。cosでは検出できない信号成分はsinで検出できるのです。

cos+sinの組み合わせでさまざまな信号を検出

さて、前回と今回の記事を通じてお伝えしたかったのは、直交性を持つcosとsinの三角関数のセットでさまざまな波の成分検出ができる。という事でした。

いかがでしたでしょうか?

ちなみに、この方式は検出する信号毎にcos成分とsin成分それぞれの計算結果を使わなければならないので扱いが面倒です。なので効率性を重視することが好きな私としては、普段もっと扱いが楽な方法で計算しています。

次回以降では、オイラーの公式や複素数を用いた、実用的な計算方法についてお伝えしていきますね。