vDSPを使う(高速フーリエ変換編 その1)


加減乗除ができたところで、早速ですが高速フーリエ変換に挑戦してみます。高速フーリエ変換では複素数を扱う事もあって、加減乗除に比べて若干手間がかかりますがそこまで難しくはありません。

フーリエ変換ってなんだっけ?

実際にフーリエ変換を行う前にフーリエ変換について簡単に確認しておきます。サウンドにおけるフーリエ変換は、

  1. 入力された信号に、どれくらいの高さの音がどれくらい含まれているか、位相はどうなっているか、を調べたり
  2. 逆にどれくらいの高さの音をどういう位相でどれくらい含ませるかを指定して信号を生成する

ときに使うものです。少し難しく説明すると

  • 音声信号(グラフにしたとき横軸が時間)⇔周波数特性(グラフにしたとき横軸が周波数)の変換

です。

抽象的でわかりにくいですが、音関係で一番わかりやすいのはスペクトラムアナライザだと思うので、とりあえずそれを作るときに使う技術だと考えておけばいいと思います。

離散フーリエ変換

コンピュータ上で行われるフーリエ変換は離散フーリエ変換(DFT)と呼ばれるものです。この記事を読んで挑戦してみようなんていうお気楽フーリエ変換では、とくにこの名前や概念を深く理解する必要はないですが、今の時点で一つ念頭に入れておかなくてはいけない点として、離散フーリエ変換を行うときには対象信号の長さ(信号のどこからどこまでを対象にフーリエ変換を行うか)を決めなくては行けません

この長さが長くなればなるほど細かく周波数特性を解析することができますが、その分処理が重くなってしまったり、変化の激しい信号では望んだ解析結果が得られなくなってしまいます。具体的な長さをどれくらいにするべきかは後述します。他にも考慮しなければいけない点がありますが、それも実際に実装してみてから考えます。

高速フーリエ変換

「離散フーリエ変換のやり方も説明していないのに(´・ω・`)」と思うかもしれませんが、結論から言うと素直に実装した離散フーリエ変換は処理が重すぎるのでリアルタイム性が必要とされる部分ではあまり実用的ではありません。そこで、実際には高速フーリエ変換(FFT)と呼ばれるものが使われます。vDSPで提供されるものもFFTです。

高速フーリエ変換では、複雑なアルゴリズムを使って計算されるため高速なのですが、条件として長さが「2のn乗」になっているデータしか解析することができません。とはいえ、解析に使いたい波形の長さを2のn乗に区切ればいいだけの話なので実際には難しい問題ではないです。

フーリエ変換を理解するための資料

とりあえず上記のことを頭に入れておけば、ひとまずvDSPを使った高速フーリエ変換に挑戦できると思いますが、当然ちゃんと理解するためにはフーリエ変換についてもう少し理解しておくに越した事はないです。本を読むのが一番だと思うので、自分が読んだ本の中からおすすめをいくつか参考程度にリストアップしておきます。

実際の高速フーリエ変換の使い方は次の記事にて。


「vDSPを使う(高速フーリエ変換編 その1)」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です