前回は入り口のBPFの特性を観察したので今回は真ん中辺です。BPFの出力に「中間周波数の」COS波かSIN波かけてLPFかけて低い方の信号を取り出す部分。その1で計算上はそういう操作をすればこうなる、と理解したつもりでいても実際に目の当たりにすると不思議。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※勝手に手習ひさせていただいております教科書へのリンクを掲げます。
三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』
上記教科書の6.4「Weaver変換器」による「周波数シフタ」を手習ひさせていただいております。
※実習はST Microelectoronics社製 Nucleo-F446REボード(STM32F446RE、Arm Cortex-M4F搭載)がターゲットボードです。ビルドは Arm社のWeb開発環境 Mbed Webコンパイラ(OS2)を使わせていただいております。なお、三上先生の御ソースは、Mbed Webコンパイラ環境(要無料登録)で誰でも参照可能です。
真ん中の低域通過フィルタ(LPF)
以下のブロックダイアグラムのとおり、中央部には、COS用とSIN用にそれぞれLPFがあります。入り口のBPFを通って帯域制限(0.1kHz~4.5kHz)された入力ωxにたいして、帯域中央の周波数 ωc(2.3kHz)のCOS波またはSIN波を乗じたのち、
-
- ωc + ωx は除去
- ωc – ωx は通過させる
という操作を行うためのフィルタです。
2個とも特性は同じとして設計されとります。三上先生のIIRフィルタ設計ツールで、ご指定のパラメータを与えてみると以下のような感じになります。
ここで出て来た係数(継続型の方)は、勿論ソースコードと一致しておりました。
実機でこのフィルタの振幅特性を観察するために、Mbed環境のソースをまたまた勝手改造しました。こんな感じ。
BPFも通過させず入力信号をそのままLPFに突っ込んでいます。さて、その実機動作結果(振幅特性)はというとこんな感じになりました。ほぼほぼ設計どおりな感じですかね。
COS側を通しで見てみる
前回と今回で四角い箱たちの特性は実機でも確認できたので、最後に入り口からLPFの出口まで、COS側を通しでみてみたいと思います。この後「掛けて足して出せ」ば、その2で既に観察した全体通した周波数シフタとなります。
またもやArm Mbed環境のソースを勝手変更。ソースは汚くなるばかり。すみません。
再ビルドして実機に書き込み、入力(黄色)にオフセット0V、振幅1V、周波数300Hzの正弦波を入れ、出力(青色)を観察したものが以下に。
入力(ωx)が300Hz、出力は2kHzでした。ωcの周波数が2.3kHzと設定してあるので、ωc-ωxに相当する周波数は
2.3kHz – 300Hz = 2.0 kHz
ってことで良いのかな?正解?ホントか。振幅にも1/2が係数としてかかるので半分になってるみたいだし。数式通りに動いているのだ、と言われてば当たり前っちゃ当たり前ですが、信号処理の素人には未だ新鮮で不思議であります。