2020年6月10日水曜日

バーカー符号っぽいやつ

 バーカー符号っぽいやつを探索してる。とりあえずN35まで。

5
++++-

7
+++-+--

11
+++-++-+---

13
++++++-+-++--
+++++-+++--+-

15
++++-+-++--+---

19
++++-+-+----++-++--

23
+++++-+-++--++--+-+----

31
+++++-+++---+-+-++-+----++--+--
+++++-++--+++----++-+-+--+---+-
+++++--++-+--+----+-+-+++-++---
++++-++-+++--+--+----+++-+-+---

35
+++++-+++--+----+-+-++--+--+-+++---

 バーカーコードはN13までしか無いらしい。バーカーコードの条件って何だろう?

 上のコード列はサイドローブの絶対値が1以下で、正負反転・MSB/LSB反転・ビットシフトの組み合わせで同じになるコード列は除いてある。

 今回、試しに捜索アルゴリズムをCのビット演算で書いてみた。GCCは独自拡張で128bitまで宣言できるので、内部処理の関係でN64程度のコードまで処理できる。さすがにN30を超えると処理時間は凄まじいことになるけど。

 なんとなく、サイドローブの絶対値が1になるコードは、ある程度傾向がありそうな気がする。例えば4N-1で正と負の差が1であればサイドローブが1になりやすい、とか。11は4*3-1、15は4*4-1、31は4*8-1、という感じ。とはいえ、13はこれに当てはまらないし、27や39は見つかっていないのだが。

 相関処理の書き方で処理時間が大幅に変わる。それ以外は大した計算コストじゃない。総当りするなら単純に変数をインクリメントしていくだけ。
 大規模な相関処理だとフーリエ変換で周波数空間を経由すると早いけど、せいぜい数十ポイント程度で2値しかないなら周波数空間を経由する利点はあまりなさそう。N=2^mじゃないのでこれを当てにしたFFTも使えないし(実際のFFTライブラリはもう少し賢いが)。
 ビット演算で相関処理すると一気に数十bitとかを処理できるので、前後処理を考えてもFFTを使うより相当早い。ただ、時間空間での自己相関探索は1タップずつ総当りで試すしかないので、これが結構大変。もっとも、サイドローブが1になることを目的とするなら、最初の数タップで弾かれるはずだが。
 N=数百~数千くらいを処理するなら8ポイント単位でシフトしながら相関取って、1bitずらしながら8回回すほうが早そう。
 真面目に探索するならFPGAでハードウェアゴリ押しするのが早いんだろうなぁ。まぁ、実際に使うならM系列やGold符号を使え、という話になってくるんだろうけど。

 ISASが1995年に運用を開始したKSCのレーダー、N1000付近をコンピュータで探索して、N1009で-34dBの符号を見つけた、らしいんだけど、当時の計算能力でそんなこと可能なんだろうか?
 時期的にはISASが宇宙VLBI衛星(MUSES-B)を開発していた頃に近いので、VLBI相関器を流用して探索してた可能性はありそうだけど、VLBI相関器ってそんな使い方できるんだろうか。純粋にコンピュータの計算能力で探索したのかな?

***

 N31はコードが4個あって、相互相関は9(-19dB)になる。複数地点からGPSで同期して正秒のタイミングでパルスを送ったりすれば、双曲線で位置が決定できたりするかも。あるいは、普通に符号多重でデジタル通信とか。受信側凄まじく面倒な気がするけど。
 超音波は電波よりは扱いやすいし、可聴帯ほど低周波でもないので、ちょっと遊ぶにはいいけど、伝搬距離を稼ぎづらい(開口部で利得を上げづらい)とか、伝搬速度が変数(温度と相対風速の影響)とか、実用的に使おうとするといまいち使いづらいんだよなぁ。

***

 なんかスゲー音がした!と思って慌てて外見たら、C-130っぽい機体が2機フライバイしていった。始めて見た。気がする。昔行った航空祭で地上にいるのを見たかもしれんけど。
 このあたりで固定翼機が飛んでるのは見たことがないねぇ。U-125っぽいやつが通過したり、くらいか。

***
追記:2021/09/19
 Wikipediaによると、バーカーコードの自己相関は非循環で評価するらしい。上に書いてあるコード列は循環型の自己相関で評価しているが、これを非循環型で評価しなおすとサイドローブの絶対値は1を上回る。

0 件のコメント:

コメントを投稿