2026年5月1日金曜日

nRF52833で測距(7) - IQデータの処理方法(4)



ちょっと本気出して測距を考えてみたい。IQデータの料理方法についてまとめておきたい。、、、の第4回目。MUSICやる。(タイトルにnRF52833ってもう要らんなー、、、が、今さら消すわけにもいかない)

CaponまでやったらMUSICもやってみる(<--Geminiのアドバイスによる(´ㅂ`; ))。で、例によってMUSICとはどういうものかGeminiに解説してもらったのでこちらをどうぞσ( ̄∇ ̄; )。ちな、Geminiが結論のところに書いてくれるとよかったんだけど、MUSICスペクトルは信号そのものの強さではなく数学的な直交性(離れ具合)がプロットされているので、MUSICスペクトラムの「ピークの高さ」と「信号の電力(強さ)」には直接的な相関関係は無いです。(しかし、これ考えた人ほんとすごいね、発想が。どういう思考経路でここに至るのか見当もつかん。)
で、MUSICスペクトラムは
\[ P_{\text{MU}}(t) = \frac{\mathbf{a}^H(t) \mathbf{a}(t)}{\mathbf{a}^H(t) \mathbf{E}_n \mathbf{E}_n^H \mathbf{a}(t)} \tag{1} \] ってなっていて、$\mathbf{R}_{xx}$の固有値分解がこうなっていて、
\[ \mathbf{R}_{xx} = \mathbf{U} \mathbf{\Lambda} \mathbf{U}^H = \sum_{m=0}^{M-1} \lambda_m \mathbf{e}_m \mathbf{e}_m^H \tag{2} \] (添え字を0始まりに変更)
で、$M$個の固有値$\lambda_m$を降順に並べたときに、どっかからどっかまでが信号で、どっかからどっかまでがノイズって(ある意味勝手に)決める。で、ノイズに該当するとした固有ベクトルを連結して$\mathbf{E}_n$とするわけだ
\[ \mathbf{E}_n = (\mathbf{e}_{K}, \mathbf{e}_{K+1}, \dots, \mathbf{e}_{M-1}) \tag{3} \] 、、、numpyで固有値計算すると、がっちゃんこなって固有ベクトルが(行列で)出てくるから連結するというよりは取り出すってかんじになる。
で、$a(t)$はCaponのときと同じステアリングベクトル
\[ \mathbf{a}(t) = \begin{pmatrix} 1 \\ e^{-j 2 \pi \Delta f t} \\ \vdots \\ e^{-j 2 \pi (N-1)\Delta f t} \end{pmatrix} \tag{4} \]
いちおうこれでMUSICスペクトラムが計算できるのでやってみる。
ble_music.py

結果はこうなる

たしかにMUSICってよさそうに見える。ここまで来たら一旦データ採りまくって検証したいけど、狭い我が家では2mくらいが精いっぱいT_T。公園でやったら怪しいし、会社でやったら会社の資産だから掲載できないし、、、過疎ってる実家付近ならやり放題なんだけどなー、、、ちな、今回使っているモジュールは技適マークあるので違法電波にはならないよー


物理的制約のある中、無理難題をうまく解決するのがエンジニアリングだと思っている。元エンジニアでも管理職になるとエンジニアじゃなくなる人いるんだね。残念なことです。

0 件のコメント:

コメントを投稿