2024年1月10日水曜日

小ネタ




 物理の査読雑誌にパスタの論文が乗るんだから、理系の大学の卒論あたりでラーメンを扱った論文とか無いものかな。麺類のスロッシング特性とか結構興味深い気がするんだけど。配膳ロボットの普及等で麺類の周波数特性が把握できると便利だろうし。

 体感として、麺が入っているとバッフルとして効くので高周波の加速度には強くなる一方で、低周波の加速度にはあまり影響はなさそう。麺がない場合は低周波から高周波まで幅広く共振するけど、内容物が減る分で多少耐性が出る。



 表紙は前に見たことがあったけど、著者まで確認せず流していたやつ。先日誰が書いたのかを知る機会があって、買わなきゃ!!と読んだ次第。著者は炭酸飲料を笑顔で振り回す人、あるいはギターの人

 登場人物がちょっと多いので誰が誰か把握するのがなかなか大変。あと翻訳でちょっと「ん?」というところは何箇所か。ミッションの動機が(それ以前のミッションにも増して)政治的だから、話もそういう話題が大半。サイエンスっぽい雰囲気はあまりないかな。


 Qiitaのエディタ、自動保存みたいな機能がものすごい重い気がする。編集中は常に自動保存が走るからアホみたいにエディタが重い。5秒位入力がなかったら自動保存する、みたいな処理にしたほうが良さそうな気がするんだけど。入力があるたびにいちいち保存してたらサーバー側だって負荷高いだろうに。

 田舎からアクセスすると回線速度とかレイテンシが悪いから顕在化しやすい、みたいなこともあるのかな? 開発エンジニアをワーケーションと称して田舎に飛ばすと都市圏のつよつよ回線に依存しないサービスを開発できて品質の向上が期待できる可能性が…… 先にエンジニアが発狂しそう。

 もしかしたら自動保存じゃなくてプレビューのレンダリングが重いだけかもしれないけど。とはいえプレビューを非表示にしても重いからなあ。非表示にしてもプレビューの生成は走っているみたいなオチかもしれないけど。


 相関処理の、forゴリ押し(時間空間)とFFT(周波数空間)の処理速度の比較

 C#で実装、FFTはMathNet.Numericsを使用。Complex32型。時間空間の処理時間を周波数空間の処理時間で割ったもの(処理時間の比)をグラフ化。64-512と1024-16384が綺麗に直線に乗ってて面白い。

 2^nなら32点くらいだとforで回したほうが早いが、点数が増えるとFFTの優位性が強烈に効いてくる。数百倍とか数千倍とか早くなる。点数が2^n以外だとそこまで強く効くわけじゃないけど、3000点を越えたあたりから明確に差が出てくる。

 2^n以外の場合、例えば1000点の相関を取るなら24点をゼロで埋めるとかして処理すれば良さそう(スケーリングに注意する必要がある)。


 地デジのIQファイルから自己相関

 横軸が距離(km)。32768ポイントを相関。128e6/63spsなので時間にして数ミリ秒、距離にして数千kmに相当(1wayで計算)。

 最初のピークが302kmあたりにあるけど、これは1.008msに相当する距離。ガードインターバルに相関が出ているのかな。340kmにも小さいピークが出ているけど、1シンボルに相当するので、AC1/TMCCに相関しているのかな? 1360kmにもピークが出ているけど、これは4シンボルに相当し、ISDB-Tコヒーレントモードでは拡散パイロットが4シンボルごとに1周するから、これが相関に出ているはず(AC/TMCCの相関も加算される)。


 試しに自己相関+FFTで2次元画像化

 左端が距離ゼロ、右端が距離最大、上下方向が速度で中央が速度ゼロ、みたいなグラフになっているはず。何箇所か速度が高めの場所で少し明るい点があるけど、他のサンプルでも同じ場所に輝点が出る。速度を持つ物体が別の時間に同じ場所に居ることはないはずだから、偽像のはず。OFDMの送信クロックと受信クロックを同期していないから、GIとかSPが距離方向に、クロック誤差が速度方向に見えていそうな可能性はありそう。

 そもそもアンテナが指向性アンテナでビーム向かい合わせだからな。たぶんビーム内に何も入ってないだろうし。スカイツリーみたいに送信側の開口が高いところに有れば飛行機相手にドングル2本で直接波と反射波を受けて相関させて、みたいな事もできそうだけど、田舎の低い山の上についてる100W程度だとバイスタティックレーダーみたいに遊ぶのは厳しそうな気がする。スカイツリーだと70kWクラスで出してるし、パルスレーダーと違ってパルス幅が非常に長いから、受信側の開口はそこそこでもある程度実用的にレーダーとして使えそう。ただし対空レーダーみたいにペンシルビームとか幅の狭いファンビームで出ているわけではないから、立体角あたりの電力密度ではだいぶ落ちそう。

 札幌送信所がおおよそ30kWで、丘珠空港までが15kmくらい。アンテナ次第では何か見えそう。せっかく札幌の方まで行くなら新千歳でTACAN拾ったりもやってみたいけどな。しかし丘珠と新千歳の距離よ。。。国によっちゃ飛行機飛ばすレベルで離れてる。札幌ももう何年も行ってないなー。スカイツリーはERP70kW程度で、札幌送信所はERP30kW程度だけど、スカイツリーは歪んでいるとはいえほぼオムニ特性に対して、札幌送信所は多少絞ったビーム形状だから、立体角あたりの電力ではあまり大差はないかな? 丘珠空港はビームの方向にあるし。スカイツリー羽田間が10kmくらいだから、距離でだいぶ差がある(少なくとも距離の2乗で効いてくる)のと、使用する機体の大きさが違うけど。

 しかし、札幌送信所のカバーエリアを見ると石狩湾上に相当な面積があるけど、なんで海の上にビーム伸ばしてるんだろう? さすがに地球の直径が小さいから利尻の方までは届かないとしても、うまく雨とか雪でクラッターがあれば細いビームでワンセグ程度は受信できそうな可能性が。

 長期間停電したときのテレビ中継ってサバイバルモードみたいな機能はないんだろうか。例えばSeg.No.0だけ放送に使えば単純計算で放射電力は10分の1以下になるから、バッテリーバックアップの寿命が伸びるとか。リモートコマンドでIFに550kHzくらいのBPF通す感じの機能があれば良さそうだけど、ISDB-Tは法令で決まってるから法改正が必要みたいな話になるんだろうな。固定受信用のテレビってSeg.No.1以降が受信できない場合ってどういう挙動になるんだろう? ちゃんとワンセグだけ受信してくれるんだろうか? まあ、ワンセグ対応端末もどんどん減っている昨今、ワンセグを強靭化しても……という感は無きにしもあらず。


 C#でvoid F(int a,int b,int c,int d);みたいなメソッドに対して、var a=1;var bc=(2,3);var d=4;をF(a, ..bc, d);みたいに呼べるような機能がほしい。メソッドの引数にタプルとかレコードを分解して渡すような機能。

 あとvar arr=new int[5];int i=8;に対してarr[i%arr.Length];とかarr[i%=arr.Length];を省略してarr[i%];とかarr[i%=];みたいな機能があると地味に便利そうな気がする。普通は配列を何回も舐め回すみたいな使い方はしないはずだからなぁ。使う人はほとんどいなさそう。

 LINQのZipみたいな機能をforeachのSpanに対して使いたいと思うことが時々。Span<int>a;Span<int>b;をforeach(var(v,w) in (a, b)){}みたいな感じで。2個のSpanを組み合わせて1個のSpanに格納する、みたいな使い方。結果の格納先で結局カウンタが必要になるから変な構文を導入しない限り複数のSpanをforeachで回せる旨味はなさそうだけど。


 CA1860: 'Enumerable.Any()' 拡張メソッドを使用しない - .NET | Microsoft Learn

 たとえゼロとの比較であってもリテラルを直接書くのはふさわしくないからAny()を使うべき、みたいな話だったよーな気がするけど、IsEmptyを使うか、あるいはLength or Countとのゼロ比較が優先されてるんだな。IEnumerable(遅延評価)でCountを使うのは良くないからAnyを使うべき(IEnumerable以外なら関係ないからLengthとかCountを使え)、みたいなことなんだろうか。

0 件のコメント:

コメントを投稿