2024年2月24日土曜日

【回路】ヒルベルト変換する

なんでかやった事のないヒルベルト変換をしてみるなり.

ヒルベルト変換とはこうゆうことのようだ.

狭義のヒルベルト変換: 原波形の90度位相のずれた波形を作ること

ヒルベルト変換の広義・応用:
 ・原波形を複素時間領域表現できるようになる
 ・包絡線を綺麗に計算できる(AM復調)

ーーーー
まずは、90度位相変換をFIRフィルタでやってみる.

↓最初に、100行のtext fileに、gain=1、phase=90°の数字を並べる.
↓これを逆フーリエ変換するとFIRのタップ係数(100タップ)を得る.このFIRは90度移相フィルタに他ならない.
このタップ形状は、ヒルベルト変換のインパルス応答として知られるものと同じである.
このFIRフィルタに原信号xを通すと90°移相されたx90を得られる.
 x90 = FIR(x)
適当に生成したと、x90をグラフにするとこうなる↓ (なんかへんかも)
つぎに包絡線を考える.
原信号の複素表現をzとする、
 z = x + jx90 = A(t) e jθ(t)
包絡線Aは複素数の大きさなので、
 A = √(x*x + x90*x90)
↓それではxとx90からAを求めてみよう.
あれぇ? 包絡線っぽいけどなんかおかしい.ビロビロしちゃってる.
これには原因がある.100tapのFIRを通すと、約50遅れのx90が出てくるので、x90は位相が遅れすぎなのだ.これを回避するには原信号xを50遅れさせて時刻合わせしてやればいい.
 x90 = FIR(x)
 x’= delay(x)
のように.
x’とx90からAを求めれば正しい包絡線を得られるはずだ.(めんどくさいので割愛)

以上は前座である.
FIRで90°移相させるのをヒルベルト変換とは呼ばないんじゃないのかな???
結果は同じはずだけどね.

余談だが、90°移相をアナログ回路でやると精度が悪くて嫌な気分になる.アナログ回路で時間を操作するのは限界があるものだ.時間操作はデジタルでやってスカッとスッキリしようぜ.

ーーーー
以下は本物のヒルベルト変換.

ヒルベルト変換の解説はこれが判りやすい.この文献に書かれたやり方でヒルベルト変換をやってみる.

ヒルベルト変換の手順はこうだ.
①原信号xをフーリエ変換して、Xを求める.Xは周波数領域の複素数である.
②Xを変形してZを求める.Zも周波数領域の複素数なのは言うまでもない.
つまり、フーリエ変換出力Xの前半をReもImも強制ゼロにする.同後半を2倍する.
③Zを逆フーリエ変換して、zを求める.zは時間領域の複素数である.
 z = x + jx90
zのReパートがxであり、Imパートがx90である.
④包絡線Aを求める.
 A = √(x*x + x90*x90)

操作②の意味がさっぱりわからんのだが実際にやってみよう.

↓まずはxと、ヒルベルト変換③で求めたx90の比較から.今度はちゃんと出来てる.
↓つぎは包絡線Aを求めたもの④.綺麗な包絡線が出ました.

包絡線をGETするには便利そうなヒルベルト変換だけど、こちらのページによると、馬脚を顕す場面もあるらしい.
 1)DCを含むと上手く計算できない
 2)2周波が混ざってると上手く計算できない
NTSCのカラーバーストみたいな信号には便利に使えるけど、white noiseの包絡線は苦手なのかな.

かしこ

4 件のコメント:

  1. 今日、インターフェース誌4月号が、家に届いたのですが、特集の「数学100」に、さっそく、
    ・クオータニオン(四元数)
    が、載っててウケました。
    ※角速度センサから、姿勢角を計算するサンプルが載ってました。
    サンプルの言語がみんな「python」ばかりなのは、「時代」なんだなー、と思いました。

    返信削除
    返信
    1. おはよーございます.
      買いましたか、ナイス.
      まさか見るとは思ってなかった四元数こんにちわ.
      チラ見したところではヒルベルト変換は載ってなかった気がしました.
      そしてみーんなpy py py言ってます.

      削除
    2. Pay pay いってますね レジで
      お支払どうしますか
      現金というのご 恥ずかしいくらい
      そうですね

      削除
    3. うひょー
      paypay言ってるのはわたしもそのうちの1人です
      「paypayで払います」
      コンビニだけでなく飲み屋でも

      ソフトバンクは新言語paythonを公開したらいかがか?

      削除