狂右衛門(くるえもん)さあ、今日は複素正弦波を使って具体的に離散フーリエ変換の計算の仕方をお伝えします。離散フーリエ変換の公式です。左辺のX(k)は、ある周期の波kに対し計算実施した結果で、全部でN個分のデータとなります。右辺のx(n)は、”0~N-1の離散フーリエ変換対象の信号”です。0~N-1の時間信号”のイメージで計算してましたが、実際は時刻に限らず、等間隔に並んだ離散信号なら何でもよいのでこの表現がしっくりきます。右辺の計算は、たとえばNが8であれば、”0から7までの8個の離散フーリエ変換対象の信号”に、複素正弦波(この公式では便宜上指数に-が付きますが内積計算に影響ありません)を乗じて各信号との内積を求め、それらをΣ(合計)することを意味します。離散フーリエ変換公式による計算N=8の時を例として計算方法をお伝えします。k=0の時、各要素の計算はこんな感じになります。各要素は複素数になるので、複素平面上の円回転でも表現できます。視覚的に理解いただくために要素の下に掲載しました。こんな感じになります。ちなみにX(0)のときはeの指数部が常に0になります。次に他の7個分を計算します。kの値を変えるとこのとおり、回転速度が変わります。変わるのか視覚的に示すために複素平面図に矢印で示してみました。一部省略しましたが、kを0→7まで増やしていくとこんな感じになります。ここで最もお伝えたいことは、kの値が低いほど回転が遅く、周波数も低くなることと、逆にkの値が高いほど回転も速く、周波数は高くなるということです。三角関数を使わない、シンプルな離散フーリエ変換の計算テクニックとは、このように分析対象の波に対して、低い周波数から少しずつ高いものにずらして複素正弦波との内積を取る。その計算結果から周波数成分を見つけていくというアプローチになります。このブログ全体を通じてディジタル信号処理や離散フーリエ変換について皆さまの関心が高まったり、ご理解が深まれば、大変嬉しく思います。最後に、信号処理ついてご質問やご相談がありましたら、下記相談フォームにて承ります。よる性能UPなど、遠慮なくお伝えください。信号処理に関するお問い合わせはこちら今後ともよろしくお願いいたします。狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。狂右衛門(くるえもん)こんにちは。今、日本のアスリートが国際舞台で躍動していますね。彼らアスリートのフィジカルサポートには可搬式の超音波診断装置が用いられていて、チームドクターが練習場等に診断装置を持ち込み、筋肉やじん帯などを可視化して、治療方針の策定に役立てているそうです。これら診断装置には信号処理技術が使われていますので、わが社の信号処理技術がもしやメダル獲得につながっているかもしれない!などと勝手な想像をしてしまいます笑さて、これまでの記事でご紹介した、ディジタル信号処理の周波数成分の求め方のおさらいです。離散フーリエ変換のおさらい正弦波の周波数を少しずつずらして内積を求めれば、全周波数成分が求められる。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の感じになります。図1複素平面上の円周をぐるぐると回る周期関数となります。2πftのfの値を増やせば、同じtの変化量(Δt)に対してより大きく回転しますので、周期関数の回転速度もより速く(周波数がより高く)なります。複素正弦波は、指数に虚数がついているため取っつきにくい印象の式ですが、このように複素平面上でぐるぐる回る図にすると理解しやすく感じられたらうれしいです。次回は今日の基本情報踏まえ、離散フーリエ変換の公式で複素正弦波との内積を計算していきます。周波数成分の求め方4狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。狂右衛門(くるえもん)こんにちは。前回は入力信号の周波数を少しずつずらして正弦波との内積を求めれば、あらゆる周波数成分の大きさを成分検出できそうということでした。前回記事はこちらです。1では検証してみましょう。ずらした入力信号の周波数成分を求めるまず、2つの入力信号を時間で少しずらします。́とするそれぞれ、図1ような波形に変わります。時間だけずらしただけなのですが、波形にするとずいぶんと違いますね。4cos(2Hz)です。cos(2Hz)ずらした信号とcosとの内積が0?これら3つの波形を、前回同様、内積を求める時間単位の一覧表に展開して、内積を計算してみましょう。́とcos3を時間毎に掛け算していき、最後にそれらの和を求めるのでしたね。結果はどうなったでしょうか。内積が0になってしまいました。́の2Hzの成分は一体どこに消えてしまったのでしょうか?考察:内積が0になった理由を考えてみるもちろん、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成分それぞれの計算結果を使わなければならないので扱いが面倒です。効率性を重視することが好きな私としては、普段もっと扱いが楽な方法で計算しています。次回以降では、オイラーの公式や複素数を用いた、実用的な計算方法についてお伝えしていきますね。周波数成分の求め方3狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。狂右衛門(くるえもん)こんにちは。・音や光など、どんな物理現象の「波」も、周波数の異なる”信号”の組み合わせでできていること。・高校数学で学んだ三角関数と内積で「波」がどんな信号で構成されているのか検出できること。これがフーリエ解析の前提であることをお伝えしました。数式と4つの前提ある「波」から特定の信号を検出することを、”周波数成分を求める”とも言います。今日は、三角関数(正弦波)との内積を用いれば、「波」の周波数成分をもとめることができることをお示しします。特性の異なる2つの信号波を用意しました。理解しやすくするために単純な振幅の信号にしています。図1次に、計算のために1秒間で8つのタイミングを取り、図2に一覧表にしました。図2また、これらの信号が検出ができているかを調べる正弦波として31Hzのcosを用意しました。図3入力信号1とcos3、入力信号1とcos3が相関関係にあるかどうかは、内積を求めることで検出できます。内積の式のおさらいここで、前回お伝えした内積の式を思い出してください。「nを時間とみなせば、信号処理的に内積は信号Aと信号Bの相関を求めていることと同じになります。それぞれの内積1✖3、2✖3を求めていることと同じになりますね。1✖3から実際にやってみましょう。計算結果をさっきの一覧表に追加してみますとこんな感じになります。図4右端赤枠に1✖3、2✖3の積の和の合計(横に足していきます)で求められる内積を示しました。結果は、1周波数1Hzの入力信号と3との内積が4、2周波数2Hzの入力信号と3との内積が0でした。⓵と3では相関があるので信号を検出できましたが、2と3は合計0なので相関が無いため、信号は検出されませんでした。3cos1Hz用いて1の周波数1Hzの成分だけをうまく検出できましたね!次に2Hzの正弦波(cos)を使い、同じように成分を求めてみます。2Hzの周波数成分を求める次に正弦波の周波数を少しずらして、入力信号1、2の周波数成分を求めてみます。ずらした正弦波を4cos2Hzとして、用意しました。図51Hzの時と同じように、入力信号1との内積1✖4、入力信号2との内積2✖4の和を求めてみると、図6のようになりました。図6結果は、1周波数1Hzの信号に対しては内積が0、2周波数2Hzの信号に対しては内積が2です。4を用いて、今度は2周波数2Hzの成分だけをうまく検出することができました!さらにこの値2は信号2の振幅に比例もしています。周波数をずらすことの意味これらの結果から、周波数を少しずつずらして正弦波との内積を求めれば、あらゆる周波数成分の大きさを検出できそうだな、と感じられると思います。本当に検出できるのか、次回はそれを検証してみましょう。周波数成分の求め方2狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。狂右衛門(くるえもん)こんにちは、狂右衛門(くるえもん)です。前回、フーリエ変換の得意技は「連続的な信号を離散的な周波数成分に分解することで、時間領域の信号から周波数領域に変換」すること、またディジタル信号の周波数特性を解析し、特定の周波数成分のフィルタリングや圧縮などの処理が可能になるとお伝えしました。フーリエ変換とは?今日は離散フーリエ変換の数式と前提知識についてお伝えします。離散フーリエ変換の数式はこれです。第一印象はどうお感じになりましたか?私が離散フーリエ変換について講義する際に、数式をご覧になった参加者からの反応はこんな感じです。とっつきにくいと感じられた方が多いようですね。このような問いに私はいつも「大丈夫ですよ」とお答えしています。このブログシリーズでも、そのことをお伝えしたいと思います。離散フーリエ変換(DFT)4つの前提知識さて、今回は離散フーリエ変換(DFT)を知る上で前提となる、高校で習ったけどおそらく社会人になっても使わないと思っていた数学知識が3つと、有名な公式1つについてお伝えします。昔皆さんが学校で習った(はず)記憶を引っ張り出してみましょう。1三角関数1つ目は三角関数です。cosとかsinというやつです。私がこれを高校で習った時には、正直「三角関数なんて何の役にも立たない!」と本気で思っていましたが、ディジタル信号処理では非常によく使います。その理由は、三角関数のcosやsinの波の形が、ディジタル信号処理で扱う信号=周期的な波の形にとても似ているからです。似ているので、三角関数はディジタル信号処理に便利に扱えるわけです。三角関数のcos(余弦波)とsin(正弦波)の例を示してみました。図1次に図2に信号=周期的な波の形を平面図で表現し、信号処理でよく扱う事象を表しました。信号の波の高さを振幅、1秒間に繰り返す波の数のことを周波数f、繰り返す波のどこにいるのか位置情報を位相と呼びます。三角関数と形がとても似ていますね。表すのにとても役立ちます。余談ですがcosとsinは数学ではそれぞれ余弦波、正弦波と言いますが、ディジタル信号処理の世界ではどちらも正弦波と言います。位相(周期的に変動する波の位置情報や振動するタイミング)が異なるだけだから、偉い先人がシンプルに同じ言い方にしたのだろうと勝手に思っています。2内積2つ目は内積です。これも当時三角関数以上に何に使うのかサッパリ理解できませんでした。内積は「2つのベクトルAとBがどれだけ似ているか=相関」を求めるものでしたね。ベクトルAとBの内積は、2つのベクトルの大きさとそれらの間の角度θのcosの積として表せます。平面図で表すとこんな感じです。図3次にベクトルAとBを成分表示してみます。(b1​,b2)としてグラフで表すと図4のような感じになります。図4このときベクトルAとBの内積は各成分の積の総和としても表すことができます。式で書くとこうなります。(次元がn個に増えても考え方は変わりません)図5は、左図に内積のベクトル成分値(a1,a2),(b1,b2)を、右図で横軸をn、縦軸を各成分の大きさとして、並べ変えてみました。a1×b1+a2×b2+...an×bnの和が、内積になります。ベクトルを信号とみなせば、左図は、信号に含まれる成分の大きさで、それを時間nで離散的に示せることわかる思います。内積は信号AとBの相関を求めていることと同じになります。高校で習ったけどおそらく社会人になっても使わないと思っていた数学知識の3つ目は虚数です。2乗すると-1になる謎の数字です。これも一生使うことはないと思っていましたが、ディジタル信号処理では虚数をよく使います。ディジタル信号処理では、高校数学では虚数をiで表しますが、信号処理では、iが電流と間違えやすいためjを使います。信号処理では、実数だけで信号の計算すると場合分けが発生するため計算がかなり面倒です。虚数が加わることで実数だけの計算よりも手早く信号の特性を分析できます。実際にはこの虚数と実数の両成分を合わせ持つ複素数を使うことで、信号の振幅と位相情報を手間をかけずに算出できるようになります。最後、4つ目はある有名な公式です。三角関数と指数関数の関係を表す式、オイラーの公式です。(wikipediaより)信号処理の計算は冒頭の三角関数を用いれば可能ですが、指数関数を使うと計算がより簡単になるので扱い方を覚えておくと便利です。その計算方法も追ってご紹介いたします。以上、高校では役に立たないと思っていたが、今とても役立っている数学知識を中心にお伝えしました。皆様も思い出してきましたでしょうか。次回は周波数成分の求め方をお伝えします。理解が進むように例や図解を用いて解説を進めますね。1狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。多岐にわたる分野で使用される数学的手法で、主に連続フーリエ変換と離散フーリエ変換の二種類があります。連続フーリエ変換は、非周期的なアナログ信号を周波数成分に分解するのに用いられ、離散フーリエ変換(DFT)はデジタル信号の周波数解析に適しています。計算効率を高めた高速フーリエ変換(FFT)も広く利用されており、リアルタイムでの信号処理に不可欠です。フーリエ変換ができること何か波形を思い浮かべてみてください。きれいな正弦波でしょうか?それともぐちゃぐちゃの波形でしょうか?実は思い浮かべた波形がどんなに複雑な波形であっても、あらゆる周波数の正弦波を合成すれば作り出すことができます。「フーリエ変換」はどんな複雑な合成波であっても、それがどんな周波数の正弦波で構成されているか明らかにする処理です。数学世界のミックスジュース解析これは、目の前にある謎のミックスジュースから、それぞれの果物の割合を正確に特定するようなものです。人間が「色」や「匂い」や「味」で果物を識別するように、フーリエ変換では波形を分析して、その成分が何なのかを明らかにします。音楽の波形をフーリエ変換すると、その音楽がどのような音の高さ(周波数)で構成されているかが分かります。オーケストラの演奏を聴いて、どの楽器がどの音を出しているかを聞き分けるようなものです。至るまで、多岐にわたる分野で応用されています。スペクトラムアナライザ(スペアナ)はその一例で、高周波信号に含まれる周波数成分の分布、すなわちスペクトラム(Spectrum)を表示・解析する測定器です。高周波信号(電波)はパワーメータや周波数カウンタなどでも測定されます。電子機器の開発で、信号のノイズを取り除くためにフーリエ変換が使われることもあります。私たちの開発製品でも、特定環境の音を取り去ったり、特定周波数の音だけを聞き取りやすくする為に、信号処理を活用した事例があります。事例について詳しくはこちらをご覧ください。このようにフーリエ変換は、世の中の無数の波形を理解するための強力なツールです。見えない世界の成分を解き明かし、社会の進歩に貢献しています。料理研究家が味で料理の神髄を解き明かすように、フーリエ変換は波形で世の中を解き明かし、それが新発見へとつながっていくのです。次の記事では、ディジタル信号処理で使われる、離散フーリエ変換についてさらに掘り下げていきます。次回はその前提条件の数学知識についておさらいします。狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。狂右衛門(くるえもん)今季節は鬱陶しい梅雨の真っただ中。雨上がりの晴れた空に美しい虹がかかっているのを見つけたら、ちょっとうれしく感じます。アナログ信号とは何かさてここで、虹について簡単なクイズです。レインボーカラーの7色?もし私の小6の息子がそう答えたなら、「うん。実際には虹の色はきれいに分かれておらず、連続的に変化してるんだよ、アナログ信号みたいにね。」と答えてしまいます(笑)虹に例えてみましたが、アナログ信号とは、”時間tに対して変化が連続的な”信号”のことで、関数グラフで表すと図1のような波として表せます。図1ディジタル信号処理とは?これと対照的なものにディジタル信号があります。詳しい解説がありますが、一言で言うならディジタル信号とは、”情報を段階で区切って数字で値nで離散的に示した信号“のことです。この離散的というのはどういう状態なのか、図2に示しました。図1の連続的なアナログ信号が、段階的に区切られ、切り離された個々の数値になっています。これは、アナログ信号から一定間隔でサンプルを取り出しているのですが、このプロセスを標本化(サンプリング)と呼び、これら標本化された値の集合がディジタル信号となります。様々な情報のより高度かつ効率的な処理をコンピュータで実現することです。実は連続的なアナログ信号はそのまま今のコンピュータでは扱うことはできません。ディジタル信号=離散した数値にしないと処理ができないのです。コンピュータに支えられている今の社会環境にとって、ディジタル信号処理は目立たないけれども、とても重要なプロセスなんです。ディジタル信号処理を数学的に示すとディジタル信号処理について数学的に示したのが、図3です。図3右図の連続=アナログ信号の積分は、時間の関数としての信号の面積を求める操作であり、∫x(t)dtと表されます。これに対して、左図の離散=ディジタル信号では、標本化された値の総和を取ることで、信号の全体的な特性を捉えます。これは∑x(n)という形で表されます。このとき、ディジタル信号の総和は、アナログ信号の積分に相当すると考えることができます。システムに始まり、私たちが扱う産業機器センサや超音波医療機器など、実に幅広い機器やサービス創出を裏で支えてきました。私自身、信号処理のプロとして現場で革新的な瞬間を何度も体験しました。その経験から言えるのは「これからエレクトロニクス技術で未来社会を支えていくエンジニアが、信号処理を数学的に理解し適切に扱えるようになれば、技術者として確固たる強みになる」と感じています。このブログシリーズで、ディジタル信号処理における強力なツールの1つである離散フーリエ変換(DFT)とは何か、高校レベルの数学で理解いただけることを段階を踏んでお伝えしていきます。次回は、フーリエ変換とは何か、そしてその理解の前提条件となる数学知識についてお伝えします。フーリエ変換とは?狂右衛門(くるえもん)ディジタル信号処理の伝道師。あのネコ型ロボットのようなエンジニアが理想です。