コラム14 ラズベリーパイでFFTを実行する


●ラズベリーパイとOpenCVの準備

 本コラムではC言語で書かれたFFTのソースコードを
ラズベリーパイで実行します。またスペクトルを描画するためにOpenCVコラム16参照)というライブラリを使用します。


■ラズベリーパイでコンパイルして実行する

 C言語で書かれたソースコードのコンパイルには
gcc(GNU Compiler Collection)を使用します。gccはラズベリーパイ(正確にはRasbianというOS)に含まれています。


●ソースコードのダウンロード

 ラズベリーパイをネット接続してWeb Browserを開き、ここにあるZIPファイルをダウンロードします。その後Terminalを開き、Downloadsディレクトリに行って次のように解凍します。

cd ~/Downloads
unzip chap1.zip

 するとchap1というディレクトリが出来るので次のようにデスクトップに移動します。

mv chap1 ../Desktop
cd ~/Desktop/chap1


●C言語で書かれたソースのコンパイル

 chap1ディレクトリにFFTのソースコード(calcfft.c)があるので次のようにコンパイルします。(*1)(*2)(*3)

gcc `pkg-config --cflags opencv` calcfft.c -o calcfft `pkg-config --libs opencv`

(*1)コンパイル済みの
バイナリここ。属性を変える必要あり(chmod 744 calcfft)

(*2)`pkg-config ... opencv`を囲むキャラクタ(``)はクォーテーションマークではなく、
バッククオート。本サイトからコピー&ペーストすると良い。

(*3)OpenCVをインストールしないとエラーになります(コラム16にインストール手順)。


●FFTの実行

 エラーなしで通ったら次のように実行します。

./calcfft sin1k.txt


●入力は1kHzのサイン波なのでそこだけスペクトルが立つ

 図1-78のようなウインドウが現れてスペクトルが描画され、1kHzの成分が顕著に現れます。sin1k.txtは図1-79のような「
48kHzでサンプリングされた1kHzのサイン波」です。他のファイル(sin2k.txt, sin3k.txtなど)でも試してみましょう。


 図1-78 スペクトルが描画され、1kHzにピークがある


 図1-79 入力ファイルは48kHzでサンプリングされた1kHzのサイン波


●FFT結果ファイルを見てみる

 スペクトルのウインドウ上で何かキーを押すか、Terminal上でCtrl+Cでアプリケーションは終了します。終了するとfft.txtと言うファイルができており、それが
FFT結果です。このアプリケーションは1024点FFTなので1024個のデータが書かれていますが、22番目の数値が極大になっています(図1-80)。


 図1-80 FFT結果。22行目が極大になっている


●スペクトルの22番目ということは約1kHzの成分が大きい

 極大値になるのは周波数何Hzでしょうか?以下のように求めます。
 N点FFTの場合、スペクトルの解像度は「
サンプリング周波数/N」になります。サンプリング周波数48kHz、1024点FFTの場合、周波数解像度は以下のようになります。

48000 / 1024 = 46.88 Hz

 したがって22番目(0からスタートすると21番目)の周波数は以下のようになります。

46.88 * 21 = 984 Hz

 入力信号は「48kHzでサンプリングされた1kHzのサイン波」なので、正しいFFT結果が得られていることが分かります。

 Cソースの説明に関してはここを参照してください。


目次へ戻る