2024年3月6日水曜日

小ネタ










 空力の専門家…… いや、まあ、そうなんだけど。レッドブル・エアレースの関係者ってF1にアサインされたのかな。それともレッドブルはエアレースは主催であって技術者はいなかったのかな。

 システムとか画角とかもうちょっと調整したら良さそうだが。試作段階だと画角が水平寄りで遠くまで見えてて速度感があってよかった。本番のは画角が低くて視界が狭いからあんまり速度感が無い。もしかしたら気象の関係で実際に遅いだけかもしれないけど。



 最近の戦闘機(F-22やF-35)は複座型が無いから広報的には厳しいよねぇ。アメリカ空軍や海軍の広報でYouTuberや著名人をF-16とかF/A-18に載せたりはしてるけど、最近の戦闘機は下から眺めるしかできないからなぁ。今後単座戦闘機が主流になると、民間人が戦闘機に乗れるのは今のうちかな?


 Razerのマウスのエンコーダ、試しにamazonでそれっぽいエンコーダを買って交換してみた。商品写真が左右反転されているのに気が付かずに買ったせいでちょっと手間取ったけど、問題なく交換完了。無事ホイールでスクロールできるようになった。クリスプ感があまりなくて、なんとなくヌメった感じ。あと、ちょっと重い。もうちょっと軽いほうが好みだな。

 自作キーボードはジャンルとしてある程度確立されている感があるし、キーの操作感やキートップのデザインとかはいろいろ選択肢があるけど、マウスってどうなんだろうか。性能を気にしないのであれば例えばBambu Labのキットを買うとかできるけども。あるいは安物のゲーミングマウスをドナーにしてとかもできるけど、それにしたってガワを作るだけだしな。スイッチとかエンコーダとかを好みのものに変えるみたいな製品はあまりなさそう。

 ちなみに、今回買ったエンコーダ、マレーシアの倉庫から送られてきたけど、前に別の出品者から買った別の部品と同じ発送元だった(住所や電話番号が同じ)。住所でググったらクアラルンプール国際空港が出てきた。まさか航空便で送って20日弱かかるわけもあるまいし、船便だと思うんだけど。空港の近くに物流倉庫みたいなのがあるのかな?

 そういえば、DELLの液晶は拡散シートに変なシミがあるし、昔買ったIntel CPUは不良品だったし、思えばPC関連で不良品買いがちだなぁ…… 日頃の行いが悪いから。。。


***


 ダイレクトサンプリングのスペクトル

 ADCはフリーランさせている。6bitなら4.72Msps、8bitなら3.863Msps。6bitは+12dBで8bitに合わせてある。やはり分解能が低いと特性も悪くなる。あと、ノイズらしいスペクトルも色々出てくる。1440kHzとか1602kHzは6bitでは見えなくて、8bitが必要になる。

 1.78MHzと1.88MHzあたりにも鋭いピークがあるのが謎い。後者はアマチュア無線の1.9MHz帯に近いけど、1.88MHz付近は使えない。わざわざバンドプランから除外してるってことはなにか別の用途で使っていて、それが見えているのかな。1.88MHzでググったらいろいろ出てくるけど、いまいち何に使ってるのか見えてこない。

 SNRは入力レベルが低いのが問題だから、もう一段増幅してやればいいんだけど。ただ、前回作ったときに3段では発振してしまったような記憶がある。ということで今回は2段(DC付近で4096倍)にしている。ADC分解能が高ければその分SNRも稼げるけど、今度はADCのサンプリングレートが問題になる。デュアルADCなら単純にサンプリングレートが2倍になるけど、Nucleo-G474REのピンアサインだとデュアルADCは結構難しい。

 アナログ周りが結構面倒で、もういっそコンパレータで2値化してフルデジタルで処理してもいいんじゃね、とか思ったり。ADCのサンプリングレートでも処理速度が足りないんだから、さらに高いサンプリングレートを処理できるわけないんだけど。

 今回は2段のRF増幅段で4倍から4096倍(12-72dB)まで11段階に対数で直線状に設定できるようにするために、1段あたりPGAを2個使っていた。ただ、4096倍でもゲインが少し不足しているから、多段階の設定はあまり旨味がない。これを例えば増幅3段で8192倍から262144倍(78-108dB)まで6段階に対数で直線状に、みたいなコンフィグをして、増幅率のレンジを狭くするかわりにOPAMPの使用量を減らすこともできる。ただ、1万倍あたりまでいくとサチりそうな気がする。さらに高い増幅率だと確実にサチる。途中の増幅率を下げて例えば2048倍から65536倍の範囲とか、512倍から16384倍とか、適当に選べばいいんだけど。この構成の利点はOPAMPの組み合わせが多少自由になるので、デュアルADCがやりやすくなる。デュアルADC12bitはシングルADC6bitよりもサンプリングレートが高いから、エイリアスがより遠くなるし、データ自体の分解能も高くなる。ただしデータレートが高くなるとCICのNを大きくできなくなるし、情報量が増えるからRも小さくしなきゃならない。


 CICの計算、R16, N4で入力がint8_t[n]とint8_t[n][2](ローカル)、出力がint32_t[n/R][2]で、実数と複素数のミキサを兼ねた処理を、4096ポイント8ブロックの処理に対して行ったら、3.41ms(@Cortex-M4,170MHz)くらいだった(R,Nを含めて積分器・微分器はベッタベタのベタ書き)。このCICに100%の計算リソースを与えた場合、9.6Mspsくらいを処理できる計算。ただしこの計測はADC(DMA転送)を止めた状態で行っているので、実際にはアービトレーションでもう少し遅くなる。

 32bit幅の複素数を4段の積分器に通す場合、Cortex-M4が持つ汎用レジスタに必要な情報がおさまるから、ロード・ストアをかなり少なくできる。ただ、途中の値を配列で持つといちいちストアが入るから、計算速度が2倍くらい遅くなる。コードを書くのが非常に面倒くさいけど、全部ベタの変数で持つ必要がある(N4の複素数で16個必要だから、地味に面倒)。

 おおよそ17.7クロック/サンプルで処理している。積分だけ考えるなら、1サンプルあたりロード3回(実数のサンプルと複素数のローカル)、積2回(ミキサ)、加算8回(2N)、という感じなので、単純計算で13サイクル必要。追加でサンプルやローカルのポインタの管理もあるし、ループカウンタや微分器の処理も(16分の1とはいえ)必要だし。ということで、ほとんど無駄なくCIC処理が動いている感じ。

 ちなみに、途中で使うレジスタを64bitにすると、処理時間は17.5msくらいになる。5倍くらい遅くなる。レジスタに乗り切らないからロード/ストアが必要になるし、加算も2回必要になる。91クロック/サンプルくらい。32bitコアで64bitのCICは32bitに比べて数倍遅いけど、とはいえ例えば32bitでまず5分の1に落としてやれば32bitと同等の処理速度になるから、ダイナミックレンジを広く稼げる64bitを使ってもいい。


 ADC(8bit), local(7bit, table), CIC(R8, N4), local(7bit, NCO) CIC(R16, N4), FIR(R2)でデシメーションして複素数をDACに出力

 DSB復調なのでキャリアのビートが出ている。22Hzくらいズレているのかな。567kHzを受信して22Hzのズレってことは40ppmくらいのクロックエラーか。まあそんなもんだろう。

 DACは約15.1kspsで駆動しているので、7.55kHzあたりで折り返してエイリアスが出ている。FIRで6kHzくらいのLPFを通しているので、3kHz幅くらいのノッチがある。外付けのLPFを作るのも面倒だし、FIRの後ろにもう1回CICを追加してインターポレーションするほうがいいかな。計算リソースと要相談。現在でも96%くらい使っているから、あんまり余裕はない。1chだけでいいならFDMA使えばいいんだけど、2ch出そうとするとちょっと面倒。今はデバッグ用にI/Qを出しているだけであって、最終的には1chだけ出すようになるはずだから、そうなればFDMAでインターポレーションすればいいはず。

 FIRはCICを補償するような特性なので、いちおうRF入力に対してフラットな周波数特性になっている(DACのSincは未補償だけど、DACのサンプリングレートはもっと高くする予定だから、フラットな領域を使えるはず)。


 周波数特性の設計はこんな感じ


 1個目のサイドローブが-50dBくらい。2段目のCICのNを増やせばもう少し下がるので、計算リソースと相談といったところ。実際どのくらいが必要なのかもわからないしな。50dBも落ちてれば十分な気もする。ただ、RF増幅段の特性で数百kHz離れると20dBくらい差があるから、周波数が高い方を聞いてると下の方が-30dBくらいになるから、周波数によっては妨害が入るかもな、という感じか。1個目のサイドローブの中に27kHzが入っていて、これが-75dBくらいだから、3ch離れた場所で放送があると搬送波が3kHzの可聴帯に入ってくる。

 一応FIR(±20%LPF)でCICを補償しているけど、N4くらいならほとんどフラットな感じ。


 計算リソースが結構ギリギリ。現状サンプリングレートは約3.86Mspsで、できればもう少し高くしたいけど、厳しそう。FIRがもう少し最適化できそうだけど、一番サンプリングレートが低い場所だから大して効かなそうだし。


 夕方にデバッグしてて、北海道でもまだまだ明るい時間帯(1720とか)なのに急に東京からと思われるピークが出てきたりして、電波伝搬っておもしれーなー、と。電離層の変化は紫外線とかの強さの問題なわけで、可視光では昼間でも紫外線で見ると入射角が低くなればその分減衰も強くなるから、単に夜だからとか昼だからみたいな感じじゃないんだろうな。昼間は旭川の数kWとか札幌の100kWとかしか受信できないのに、ある時刻を過ぎると北海道の他の弱い局や本州の方らいし周波数に由来する線スペクトルが大量に出てくるから、処理ミスってノイズが大量に入ったのかと思う。

0 件のコメント:

コメントを投稿