手習ひデジタル信号処理(43) 適応線スペクトル強調器(ALE)、LMSアルゴリズム版とな

Joseph Halfmoon

ALEというと、私の心の中では40年以上前から不動のAddress Latch Enableであります。しかし今回は、Adaptive Line Enhancer、適応線スペクトル強調器なんであります。適応フィルタの応用であります。信号処理素人の私にとっては適応と聞いただけで恐れいってしまうのですが。大丈夫か。

※参照させていただいております三上直樹先生著の教科書は以下です。

工学社『「Armマイコン」プログラムで学ぶデジタル信号処理

三上先生の御ソースは、Arm社MbedのWeb環境(要登録、無料)内で公開されており、「呂」で検索すれば発見できます。今回は第9章「適応フィルタ」のところの9.4 「AleLmsクラス」を使う「適応線スペクトル強調器」を参照させていただいております。

※実験は、ST Microelectronics社製 Nucleo-F446REボード(Arm Cortex-M4Fコア搭載STM32F446RE)向けにMbed環境内でビルドしてオブジェクトファイルを得て行っています。測定にはDigilent社 Analog Discovery2を使用しています。

適応線スペクトル強調器(ALE)

ざっくり言ってしまうと、入力信号の基本周波数が不明なままで、雑音を抑え、基本周波数の周期信号を取り出すことのできるアダプティブなフィルタです。今回実験する構成は、動的に係数を変更できるFIRフィルタ(100次)と、動的に係数を修正するアルゴリズムの組み合わせです。使用されているのはLMSアルゴリズム(Least Mean Square)です。LMSならばなんとか理解できるかも。そんなこと言って大丈夫か。

ビルド

今回は、先に三上先生のプログラムそのものを実機上でエクササイズして雰囲気を確かめることにいたしました。なんたって「適応フィルタ」です。恐ろしいデス。ビルド結果が以下に。

Build

いつも通りRAMはあまり使わずに済んでますが、Flashの使用量は微妙に多い気がします。でもま、まだまだメモリは余裕です。

実験準備

今回の実験は、正弦波の基本波にノイズを載せて入力信号とし、それをアダプティブなフィルタにかけてノイズを抑制してその様子を観察しようというものです。まずは入力用にノイズの載った正弦波用意しないとなりません。信号処理素人はこういう信号に慣れてないデス。

三上先生の教科書では、三上先生はお手製ツールでノイズ入りのパターンを生成した上で5kHz(今回のサンプリング周波数は10kHz)以上の周波数をLPFで落として入力信号生成されているようです。信号生成用にもう一枚Nucleo F446RE ボードがあれば三上先生と同じ方法をとることもできますが所持しておりませぬ。

しかし大抵のことは出来てしまう Analog Discovery2 です。パターンジェネレータで、普段使ったことのない Custom を指定して、さらにその中で Math というタブを開くと、波形を計算して生成することが可能でした。いやあ便利だね。振幅1のsin()派に振幅0.2の乱数を重ねて作った波形の原型が以下に。CustomWave

上記のカスタム波形を任意の周波数にマップできるのでお楽。

さて準備をもう一つというと大袈裟ですが、今回のサンプル・プログラムはNucleo-F446REのUSBシリアルに接続した仮想端末からフィルタ設定を操作するようになってます。仮想端末側の設定確認です。三上先生のプログラムをそのままビルドすると

    • ボーレート 9600bps
    • 送信改行コード CR

です。最初上手く動かねえな、と思ったら改行コード設定がLFでした。「伝統の」Tera Termの改行コードの設定画面が以下に。

TerminalSettings

動作確認

以下全て黄色のC1が入力、青色のC2が出力です。最初の波形をご覧くだされ。

ALE_ON_NONOISE

上の出力は綺麗な正弦波に見えます。入力はノイズの載ってない信号です。FFTかけると以下のようです。設定周波数の500Hzのところに一本ピンと立ってますな。InputSigNoNoise

先ほどの設定のランダム・ノイズを載せた波形をFFTしたものが以下に。三上先生の教科書では、ノイズを載せたあとナイキスト周波数より上の成分を抑制してから実機に食わせているみたいです。こちらではそういうことをしていないので、5kHzより上にもノイズはありーの。後でフィルタを作って挿入してみようかしら。ホントか?

InputSigSPE

さて、上のノイズの載った波形を入力したときの時間波形が以下に。まずはALEオン設定です。

ALE_ON_TIM

出力の青色波形、動的な画面で見ていると微妙に揺らいでますな。続いてALE=OFFの時がこちら。

ALE_OFF_TIM

上記のような静的な画面だとあまり差が分からないですが、動的な画面で見ているとオフると揺らぎが速くて大きい感じがします。

時間波形でははっきりしないので、再びスペクトルを観察してみます。まずはONの時。基本波および高調波の「線スペクトル」が並んでますな。強調されている?

ALE_ON

以下は、ALE=OFFのときです。基本波、高調波以外にもいろいろ載っている?だいたいノイズフロア自体が上がっているような感じだし。ALE_OFF

まあ、とりあえずサンプルプログラムの雰囲気は分かった、と。ホントか?

手習ひデジタル信号処理(42) アップサンプリング処理をOctaveしてみる へ戻る

手習ひデジタル信号処理(44) 適応線スペクトル強調器、学習同定法+Leaky LMS版とな へ進む