手習ひデジタル信号処理(27) ヒルベルト変換器による周波数シフタその3 本丸ヒルベルト変換

Joseph Halfmoon

今回は「本丸」ヒルベルト変換フィルタ(位相シフタ)を調べて行きたいと思います。前回同様、動作確認済の全体プログラムの中のヒルベルト変換フィルタの出力を外部に出力し、位相特性を観察してみようという試み。ただし、期待されるフィルタの特性はIに対してQがπ/2だけ遅れるというもの。入力に対してでないので測りづらいです。

※以下は、勝手に手習ひさせていただいております教科書へのリンクです。

三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理

上記教科書の6.3「ヒルベルト変換器」による「位相シフタ」が実験のターゲットであます。

※実験は、ST Microelectoronics社製 Nucleo-F446REボード(STM32F446RE搭載)をターゲットボードとして Arm社のWeb開発環境 Mbed Webコンパイラでオブジェクトコード生成して行っています。なお、三上先生のソースは、Mbed Webコンパイラ環境(要無料登録)で誰でも参照可能です。

まず「π/2遅れている筈の信号」取り出してみる

ヒルベルト変換フィルタの出力のうち、位相 π/2(つまり90度)遅れで出力される信号を、DA変換器に直接通すようにして信号を観察したいと思います。入力信号は、前回のDCカットフィルタを通った後にヒルベルト変換フィルタを通ります。

ソース的には、最終出力の yn を中間結果の ynQ で置き換えれば完了。以下の修正コードは、行き場所の無くなったynが使われていないと警告でてますが動作はOKです。

modified

300Hz、1V振幅の入力波形(C1、黄色)を与えたときの出力の時間波形(C2、青色)を眺めてみたものが以下に。お馬鹿な感想、あれ90度遅れているようには見えないな。。。

Qtim

ナイキスト周波数である5kHzまで取得するとグラフが細かくなりすぎてなんだかよく分からないので、500Hzまでで打ち切った実測のボード線図(基準はC1の入力波形)が以下に。振幅の方は50Hz付近からほぼ0dBとなって平なので予定通りですが、位相はノコギリ状です。

IbodeRAW

このグラフ見てからはたと気づきました。ynQは、入力信号xnに対してπ/2遅れているわけでなくて、ヒルベルト変換フィルタのもう一方の出力であるynIに対して遅れているのだ、と。当たり前じゃん。おお間抜け。

ynI側の信号も取り出して観察

実機の道具だてとして、DA出力の1本にしか外付け回路を用意してないです。2信号を同時に出すのはメンドイ。ynQと同時にynIを外へ出せないので、ynIだけで出してみます。ソースの変更は以下です。

modified2

一応、ynQと同じ設定のynIの時間波形は以下に。

Itim

そしてボード線図が以下に。

IbodeRAW

しかし、上記の「素のまま」では肝心のynIに対してynQが90度遅れている様子が観察できません。そこで上記のボード線図と、ynQのボード線図の両方で測定結果をCSVファイルとして吐き出しておきました。後は力業あるのみ。

2枚のボード線図の測定結果を力業でガッチャンコ

まあ、csvファイルになれば、OctaveでもR言語でも処理可能です。しかし、今回は霧のかかった頭でもなんとかなる表計算ソフトを利用させてもらいました。何の工夫もない単純作業です。生データをガチャンコしたデータの一部が以下に。

IQ_Phase_diff

単純計算すると、90度回転でなく-270度回転と表示されてしまう領域があるので、そこをアジャストして計算した ynI に対する ynQの位相プロットが以下に。

PhasePlot

DCに近いところでちょこっと成り立たない部分がありますが、以降はベタに90度が続いております。デジタルフィルタだから、計算通りの結果が、そのまま信号として出てきて、それを測定して計算したらば、また予定通りだった、というだけのこと。が、これだけ綺麗に結果が出てくると嬉しい感じもひとしおであります。π/2遅れてますねえ。良かった。

手習ひデジタル信号処理(26) ヒルベルト変換器による周波数シフタその2 DCカットフィルタ へ戻る

手習ひデジタル信号処理(28) Weaver変調器による周波数シフタその1 へ進む