コラム32 FIRフィルタを実行するCソース(firexec.c)の説明 ■将来のリアルタイム化を見越したC言語コーディング WAVEファイルを読み込んで信号処理する場合、基本的に2通りのやり方があります。図3-24にそれらを示します。 ●英語の本をじっくり翻訳して日本語版にするイメージ 図3-24 (a)はWAVEファイルをいったん「全部」読み込んでメモリ領域に置き、じっくり信号処理しながらその結果をWAVEファイルに書き込むやり方です。 ●英語のスピーチを聞きながら同時通訳するイメージ 同図(b)はWAVEファイルからデータを1個読むたびにリングバッファ(400ワード)に書き込み、その後すぐにリングバッファを読み出し、信号処理を行ってデータを1個計算し、WAVEファイルに書き込んでいくやり方です。 ●前者はハードウエア向きでない 前者はWAVEファイルが小さければよいのですが、何十分、何時間と巨大になるとラズベリーパイやパソコンのメモリを浪費し、アプリケーションが不安定になることがあります。 また図3-25のようなリアルタイムシステムを考えます。同図ではマイク→A-Dから次から次へとデータが入ってきて、フィルタリングを行い、途切れることなくD-A→スピーカーにデータを送ります。そのようなシステムでは、入力データを全部メモリに溜め込むようなことは出来ません。 図3-25 リアルタイム信号処理システム ●リングバッファにぐるぐる書いて読むC言語コーディング したがってラズベリーパイで実行する段階から、将来的なリアルタイム化することを見越したコーディングが必要になります。コラム31で使用したCソース(firexec.c)はそのようなコーディングになっています。filter関数内にリングバッファがあり、図3-24(b)のような使い方をしているので参考にしてください(リスト3-1)。 目次へ戻る |