$ vim [1] 37147 killed vim
みたいになってエラーも出ず、一切起動しない。ビルドした src/vim は起動するが、make install 後のバイナリでこの現象が起こる。ファイルサイズも異なるなるのでインストールプロセスを疑ったところ strip を OS 標準のものにしたら正常に起動するようになった。
$ vim [1] 37147 killed vim
みたいになってエラーも出ず、一切起動しない。ビルドした src/vim は起動するが、make install 後のバイナリでこの現象が起こる。ファイルサイズも異なるなるのでインストールプロセスを疑ったところ strip を OS 標準のものにしたら正常に起動するようになった。
STM32F103C8 のやっすいボード (bluepill などと呼ばれているらしい) については数年前に書いた STM32F103 C8 T6 の安いボードでLチカ (platformio + mbed) が、これを題材にして ChibiOS の環境を用意する。
適当に git repo を作って ChibiOS を submodule に追加する。もちろんただダウンロードしてきてコピーしても良いがとにかくレポジトリ内に全コードを入れておく
mkdir foo cd foo git init git submodule add git@github.com:ChibiOS/ChibiOS.git
できれば同じ MCU のボードだと変更点がすくなくてよい。Bluepill は Maplemini というののクローンの一種らしいので、そこからコピーしてくる。
cp -r ChibiOS/demos/STM32/RT-STM32F103-MAPLEMINI/* .
CHIBIOS := ./ChibiOS
手元にあるボードと、既にあるボード定義はだいたい一致していないので、修正する必要がある。
Makefile に以下のような行がある。
include $(CHIBIOS)/os/hal/boards/MAPLEMINI_STM32_F103/board.mk
このディレクトリをまるっと自分のディレクトリにコピーする
cp -r ChibiOS/os/hal/boards/MAPLEMINI_STM32_F103 STM32F103_BLUEPILL
board.mk を編集する。まずはパスを変更したディレクトリにあわせるだけ。
# List of all the board related files. BOARDSRC = STM32F103_BLUEPILL/board.c # Required include directories BOARDINC = STM32F103_BLUEPILL # Shared variables ALLCSRC += $(BOARDSRC) ALLINC += $(BOARDINC)
board.h を確認して、必要であれば編集する。
まずクロック設定があっているか確認する。実際の基板のものとあってないと何もかもがおかしくなる。後述する mcuconf.h と組合せてよくチェックする。
#define STM32_LSECLK 32768 #define STM32_HSECLK 8000000
VAL_GPIOACRL など、GPIO の初期設定を必要に応じて変更する。とはいえアプリケーションコード (main.c) で、palSetPadMode などで、あとから変えることもできるので必須ではない。
ここまででベースはおわり。make は通るはず
入力として使う alternate function は、ピンに特別な設定は必要なく、PAL_MODE_INPUT などにして、ペリフェラル側の設定を有効にするだけで良い。
出力として使う alternate function は、ピンにもPAL_MODE_STM32_ALTERNATE_PUSHPULL を指定する必要がある。
(STM32F401 などとは設定方法が違う)
ChibiOS の HAL ドライバのインターフェイスは MCU ごとに柔軟に設定できるようになっている。裏をかえすと、基本的に MCU ごとに設定方法を変えなければならない。
一番簡単なのは定義を読むことで、ChibiOS/os のディレクトリで git grep したりして、必要なソースコードを読むのがてっとりばやい。ChibiOS は幸い、あまり変なコードはなく素直に読みくだせるようになっている。
特殊なことをしないなら HAL ドライバを使ったほうが圧倒的に楽だが、もちろん利用せずに自力でレジスタを設定しても良い。データシートを読みながらペリフェラルを設定する場合は結局こうすることになる。その場合 mcuconf.h で利用するペリフェラルのドライバは無効にすること。
できたものは https://github.com/cho45/STM32F103C8-ChibiOS
STM32 の開発環境で悩んでいて、ちょうどよく気にいるものがなかなくていろいろ試している。STM32 デバイスでの例が多く抽象化やビルドシステムもちょうどよく手に収まる感じで、今のところいい感じ。
ChibiOS は RTOS のライセンスがGPLであるのが若干やっかいだが、OSS ならまぁ GPL 採用すればいいので気にしないことにする。
以下をいれるととりあえずおさまる。ccls と相性が悪い??
let g:lsp_insert_text_enabled = 0 let g:lsp_text_edit_enabled = 0
あとラベルが勝手に補完に含まれるのはinitialization_optionsになんか指定するとよいらしい?
au User lsp_setup call lsp#register_server({
\ 'name': 'ccls',
\ 'cmd': {server_info->['ccls']},
\ 'root_uri': {server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'compile_commands.json'))},
\ 'initialization_options': #{
\ cache: #{directory : '/tmp/ccls_cache'},
\ completion: #{detailedLabel: v:false}
\ },
\ 'whitelist': ['c', 'cpp', 'objc', 'objcpp', 'cc'],
\ }) 以下を根拠に測定する
アマチュアの F3E の占有周波数帯幅の許容値は 40kHz (ただし 430-440MHz では 30kHz)。ただし事実上の帯域幅は 16kHz 程度になっていることが多い。
周波数変調は振幅が周波数偏移になるため、最大振幅でどれぐらい周波数偏移をするかを決めなければならない。アマチュアで通常使われてる狭帯域FMで、最大振幅時の最大周波数偏移は ±5kHz。
標準変調度とは、通常、規定の最大周波数偏移許容値を100%としたものであり、最大周波数偏移の許容値が規定されていない場合は工事設計書の設計値(工事設計書に記載される値)の最大周波数偏移を100%としたものである。基準周波数偏移とは、試験機器の最大周波数偏移が規則で規定されていない場合、測定のための基準点の周波数偏移である。
で F3E では、「標準変調度又は基準周波数偏移(位)」は「正弦波1kHzで最大周波数偏移の70%」になる。測定時には「基準周波数偏移の入力から10dB増加(擬似音声)」
アマチュアのF3Eの場合「標準変調度とは (略) 工事設計書の設計値(工事設計書に記載される値)の最大周波数偏移を100%としたものである」が適用される。工事設計書の設計値の最大周波数偏移は通常±5kHzなので、つまり 1kHz 入力したときに、5 * 0.7 = 3.5kHz 周波数偏移するように入力ゲインを変更し、疑似音声はこのときのレベルに +10dB することになる。
前に書いた「特定の変調指数になるようにゲインを調整したい場合」にそって 1kHz で変調指数 3.5 になるようにして、疑似音声をそれの +10dB で出力できるように信号源のゲインを調整する。
今回は温度制限がかかるので、出力は 5W (37dBm) でやる。(本来は最大でやらなければならない)
1kHz で最大周波数偏位 3500Hz にあわせる。
(52013416 - 52006833) / 2 = 3291Hz
FM なので 50MHz 帯で測定することにする。別表第三十五 証明規則第2条第1項第12号に掲げる無線設備の試験方法によれば、50MHzは50〜54MHzと、2MHz以上の帯域があり、この場合の試験周波数は3波になる。
正直めんどい。同じことを3回やるだけなので、今回は省略して中央のみで行う。
占有周波数帯幅の許容値が40kHz なので 帯域外領域は 2.5倍して ±100kHz。
無変調で測定する。
「30MHzを超え54MHz以下」「1Wを超え50W以下」の条件では「1mW以下であり、かつ、基本周波数の平均電力より60dB低い値」
「50μW以下又は基本周波数の搬送波電力より70dB低い値」-13dBm または搬送波電力-70dB以下ならよい
https://www.hakodate-ct.ac.jp/~moriya/class/5SCE_Exp/text05-1.pdf
http://ja5fp.org/bessel.pdf
最初に知ること
「振幅の最大値のときの最大周波数偏移」と「ある入力に対する最大周波数偏移」で若干ややこしいので注意。単に「最大周波数偏移」といったときどっちのことを言っているか気をつける。
1kHz の正弦波で変調した場合、キャリアを中心にして、1kHz ごとにピークが立つ。各ピークのレベルについては後述
入力信号周波数を変化させるとこのように変化する。ピークの幅と、ピークの振幅それぞれが変化する。
ある周波数の入力信号 を変調して、最大周波数偏移が だった場合、変調指数 は以下のようになる。
変調指数には以下のような特徴がある
出力のキャリア周波数の振幅及び、側波帯の各ピークの振幅は、変調指数をとる第1種ベッセル関数にしたがう。
縦(y)軸が振幅で、横(x)軸が変調指数。J(n,m) は変調指数 m のときの、側波帯ピークn番目(ただし0はキャリア)の振幅をあらわす。負の値が出るがスペアナで観測できるのは絶対値。
変調指数が一定の値、例えば 2.4 とかになるとキャリアの振幅は0になる。
どれも最初のキャリアゼロにあわせているので変調指数は2.4。結果、最大周波数偏位・入力ゲインが変わる。変調指数が同じなので、各ピークの大きさはどれも一致するはずだが、実際は出力バンドパスフィルタとかの影響で帯域が広くなると誤差が増える。
最大周波数偏移は入力信号振幅によるため、同じ振幅を持ち、キャリア周波数振幅が0となるように入力信号周波数を加減する。キャリア周波数振幅が最初に0となったとき m=2.4 なので、入力信号周波数 * m で最大周波数偏移を求めることができる。
ただしこの方法は、入力信号周波数を変化させても、無線機内部で振幅が変化しないことを前提としているので、イコライザやコンプレッサーなどがあり、周波数応答がフラットではない場合は成立しない。
RBWを十分に大きくして、FM波全体を見るようにする。この状態で Max Hold / Min Hold して偏位の最大周波数と最小周波数をさがす。少し測定に時間がかかるのと、スペアナのスイープタイミングと入力信号周波数が互いに素になっていないと最悪いつまでたっても結果がでないのが欠点
マーカーを2つ使い、Max Hold / Min Hold それぞれのトレースで同ゲインにくるように調整する。そのときの周波数の値を読んで、差を計算する。これが最小と最大の周波数偏位になる。(51008700 - 51004100) = 4600 なので、最大周波数偏位はこの半分の ±2300Hz になる。この画像の場合は信号周波数が 1000Hz なので、変調指数は 2.3。
例えば 1000Hz で変調指数 3.5、つまり最大周波数偏位を3500Hzにしたい場合。これは変調指数から振幅を求めて、近くなるようにゲインを調整するのが一番簡単。
ベッセル関数を使って各ピークを求めて、それにあうようにする。
これでやって調整して、上記の方法で、最大周波数偏位を測定しなおすとより良い。
(51009800 - 51003050) / 2 = 3375 (最大周波数偏位)。3375 / 1000 = 3.375 (変調指数)。なかなかぴったりにはいかない…
の続き AM(A3E)。帯域幅は6kHz。疑似音声発生器 を使う。
以下を根拠に測定する
1kHz で変調度 60% の状態で、同レベルの疑似音声を入力するということなので、まず1kHzで変調度 60% の状態を作る必要がある。
変調度 をスペアナで求める場合、搬送波振幅 (電圧) 側波帯振幅 (電圧) とすると
または、搬送波電力 、側波帯電力 とすると
1kHz で変調度 60% なら、。つまり搬送波電力に対して 側波帯電力が -10.5dB になるようにゲインを調整する。
0スパンにしてうまく設定すると変調信号を表示できる。この結果を使っても変調度を求められる。ただトリガをうまくかけられないといけない。
帯域幅は6kHzなので、±15kHz が帯域外領域
無変調で搬送波だけの状態で見る。
前回まで側波帯ごとにわけて見てたが面倒なので一括で見る
-21dBm の高調波。50μW (13dBm) 以下なので合格
ref.
https://www.hakodate-ct.ac.jp/~moriya/class/5SCE_Exp/text05-1.pdf
https://dl.cdn-anritsu.com/ja-jp/test-measurement/files/Technical-Notes/White-Paper/Guide_to_SpectrumAnalysis_J.PDF
スペアナでスプリアス測定してみる (KX3 CW) | tech - 氾濫原 というのを書いた。SSB でさらに測定してみる。途中で「帯域外領域」の測定について勘違いに気付いたため、前のエントリも修正している。
特性試験の試験方法 を参照するのが一番正しそうなので、少し細かくみていく。
「スプリアス発射又は不要発射の強度の測定方法については、別表第1に定める方法」となっている。ただし、平成16年総務省告示第88号によって、「スプリアス領域における不要発射の強度の測定を行う周波数範囲」が緩和されて定義されているので、こちらも見る必要がある。
別表第1がスプリアス測定の方法なのだけど「占有周波数帯幅の測定と同じ状態」として他の資料を参照している。
「占有周波数帯幅の測定と同じ状態」は特性無線設備の種別ごとに定義されている。アマチュアの場合は別表第35に全ての変調方式について記述がある。特に「別表 各電波型式の変調条件」が大事。
「擬似音声発生器は、白色雑音をITU-T勧告G.227の特性を有するフィルタによって帯域制限したものとする。」なのでまた別の規格を見る必要がある。G.227 : Conventional telephone signal
この装置は少し前にこれのためにつくった ブラウザで動く擬似音声発生器 (ITU-T G.227 フィルタ) | tech - 氾濫原。yak-shaving...
⑴ 変調信号は擬似音声とする。
⑵ 擬似音声の変調入力は、正弦波の1,500Hzで空中線電力が飽和レベルの80%程度となる変調入
力電圧と同じ値とする。
まず正弦波 1500Hz を入力し、飽和レベルの80%程度となるようにマイク入力ゲインを調整する。
飽和レベルはSSBの場合送信機の尖頭電力のことなので、設定した出力電力と同じになる。つまり10W出力で飽和レベル80%なら8Wになるように調整する (0.8 = 1dBひく)。
「擬似音声発生器」は電圧がひとしくなるように作ってあるので、そのまま疑似音声に切り替えれば状態が整う。
10W 出力で計測する。40dBm。1500Hz 正弦波のとき 39dBm に出力を調整する。スペアナの前に40dB アッテネータをいれている。ところで今回はスペアナに Ref Offset の設定があることに気付いたので、前もって 40dB 分のオフセットをつけて、測定値を直読できるようにしている。
無変調で測定する領域だが、SSBの場合は搬送波がないため実質的に意味がない (搬送波の綺麗さを見る試験のようだ?)。
SSB の 占有周波数帯幅の許容値 は 3kHz。スプリアス領域 は 2.5BN 離れた領域なため、± 7.5kHz の内側が帯域外領域、外がスプリアス領域。
7100kHz を帯域の中心にしたいので、LSB モードの場合は 7101.5kHz に送信周波数をセットする。これで 7098.5kHz より下、7101.5kHz より上が帯域外
なぜ 1500Hz?と最初思ったが、帯域幅が3000Hzなので、真ん中にくるようにですね。
つまり入力雑音のみの変調をかけた場合どうなるか。混乱しないでほしいが、これはスプリアス測定ではなく参考データとしてとった。
-21dBm の高調波。50μW (13dBm) 以下なので合格
「ITU-R 勧告SM.329-10における指針」に従って、基本周波数の10倍高調波まで見れば良いことにはなっている。つまり 7.1MHz なら 71MHz まで見れば十分なはず。
若干ややこしい。というのも、Shotcut の字幕は「フィルタ」として実装されており、元動画がなければつけることができない。しかしタイムラインのメインの動画にフィルタとして字幕を追加してしまうとフェードすることができない。これの問題は字幕用のタイムラインを作ってあげれば解決する。この場合、フィルタをかけるための「元動画」が必要になるので、別途用意してやる。といっても単にアスペクト比があった透過 PNGで良い。
この画像において V2 V3 は字幕用にしてある。はりつけているのはただの透過 PNG
追記:ファイル → その他を開く → 色 → transparent で OK を押すと同様のことが Shotcut 内で完結するようだ。開いた状態でプレイリストの+を押すとライブラリにtransparentが追加されるため、これをタイムラインにドラッグするやりかたが簡単
そしてフィルタをかける
テキストをかけるフィルタはいくつかあるので適当に適用する。フェードは「動画のフェードアウト」などいくつかある動画用のフィルタを使うことができる。「黒でフェードする代わりに不透明率を調整」にチェックを入れておくとお手軽にフェードアウトできる。
みんな大好き Desmos Graphing Calculator の話。
グラフの色に設定できるのが、デフォルトだと6色しかないけど、簡単に増やすことができる。
開発者ツールを開いて
Calc.colors.GREY = "#999999";
とかする。GREY のところは適当でよい。
こうすると色選択するパレットに単に色が増えるので、増やた色を選択すればグラフの色を設定できる。
パレット追加した色はリロードしたりすると消えてしまうが、グラフに設定した色は保存される。
Calc.colors をダンプするとわかるが、色IDをキー・色値を値にもつオブジェクトになっている。
Calc.colors = {
BLACK: "#000000"
BLUE: "#2d70b3"
GREEN: "#388c46"
ORANGE: "#fa7e19"
PURPLE: "#6042a6"
RED: "#c74440"
};
↑この画像は静止画ではなく、録画のスナップショット (α7R II 2160p モードを CamLink 4K/30FPS NV12 でとりこみ)
結論からいうと CamLink という HDMI → UVC 変換器 (キャプチャボードの一種) を使うのがおすすめ。カメラの HDMI 出力と繋ぎ、カメラ側は動画モードにして、HDMI INFO の設定 (HDMI に OSD を出さない) をするだけでよい。
カメラ側で HDMI 出力設定を変えて 1080p か 2160p かを選べる機種の場合は、カメラ側で設定を好みのほうに変える必要がある。デフォルトだと 4K でしかとれないので、1080p で十分なら下げたほうが負荷が低いと思う。
知ってるぞ! こういうのだろ!
HDMI → UVC 変換器もピンキリで、キャプチャできる解像度や、画質に差がある。しかし商品説明からは全くわからないことが多い。具体的に何が違うか
残念ながら買ってみるまで詳細なことはわからない。HDMI キャプチャについては安物を買わないほうが良い (安物を2台ほど買って失敗した人間の言っていることです)。
CamLink は以下のような仕様で、現状手に入る中では本当にベストだと思う。脳死でこれ買いましょう。
高周波リレー・同軸切替器・同軸リレーとからへんの話です。50W 通せる高周波リレーHF3シリーズを使ってみます。
TE の HF3 Relay という製品を最近知った。これは DC から 3GHz までの高周波リレーだが、高周波リレーとしては大きな耐電力を謳っている。最大で 60W, 62.5VA、2.5GHz 23℃ では 50W の連続通過と書いてある。定格電圧と電流はそれぞれ 250VAC / 2A。高周波リレーは通常、小信号用であり、2W程度が定格になっていることが多いのでこれは結構珍しい。
このリレーは DigiKey でも購入することができる。しかも $12 程度と、この手のリレーとしてかなり安い部類に入る。DigiKey の RF リレーのカテゴリでは、2A までのリレーしか扱っておらず、その 2A のリレーはこのシリーズだけになっている。
2003年ぐらいからあるようで、特に新しいコンポーネントというわけではない。検索してみると実際アマチュア無線用途に使用している海外の例がヒットしたりする。
リレー単体だと使えないので、リレーを載せるための基板を作る。再現性のため2層にして、PCB製造サービスを使うことにした。
余計なコンポーネントを乗せず、リレーとダイオードだけを乗せた基板にした。コネクタは安価な SMA のエッジコネクタ。一応伝送路はマイクロストリップライン (Coplanar Waveguide with Ground) として設計している。いまいち伝送路端の接続方法がわかっていないので適当につないでいるが正しくない気がする。
PCB 製造は PCBWay へ注文。部品は前述の通り、DigiKey で購入した。1週間せずすべてのパーツがそろった。
見るべき値は
手持ちのスペアナの上限が 1.5GHz なので、そこまでしか測れない。
参考として 第一電波工業株式会社 同軸切換器 CX210N のスペックを引用する。
●価格:9,800円+税 ●外形寸法:W71×H57×D42mm ●重量:440g ●周波数範囲:DC〜3000MHz●インピーダンス:50Ω ●入出力コネクター:N-J ●VSWR:1.05以下(DC〜500MHz)、1.1以下(500〜1000MHz)、1.15以下(500〜1000MHz)、1.15以下(1000〜2000MHz)、1.2以下(2000〜3000MHz) ●挿入損失:0.05dB以下(DC〜500MHz)、0.1dB以下(500〜1000MHz)、0.15dB以下(1000〜2000MHz)、0.2dB以下(2000〜3000MHz) ●アイソレーション(終端時):70dB以上(DC〜200MHz)、60dB以上(200〜1000MHz) 、55dB以上(1000〜2000MHz)、50dB以上(2000〜3000MHz) ●通過電力(SWR1.12以下時):1.5kW(DC〜30MHz)、 1kW(30〜150MHz)、500W(150〜500MHz)250W(500〜1000MHz)、150W(1000〜3000MHz) ●最大許容電力:1.5kW
NanoVNA の結果。
コモン側の反射波、NC (Normally Closed)/NO (Normally Open) にダミーロード。(S11)
リレーのスペック上は 1.5GHz 以下なら最大でも1.08 程度なので基板などの影響が大きい。
スルーコネクタでノーマライズ後、コモンに TG (トラッキングジェネレータ)、NC (Normally Closed)/NO (Normally Open) にダミーロードをつけて、コンタクトしているほうをスペアナに入力。
リレーのスペック上は 1.5GHz 以下なら、-0.15dB 未満。
スルーコネクタでノーマライズ後、コモンに TG (トラッキングジェネレータ)、NC (Normally Closed)/NO (Normally Open) にダミーロードをつけて、コンタクトしてない状態でスペアナに入力。
リレーのスペック上は 1.5GHz 以下なら、70dB 以上。500MHz 以下なら 80dB 以上ある。
メーカー製 CX210N 同軸切換器と比べると耐電力・諸特性に劣っている。ただ、耐電力以外はリレーのスペック的にはもっと良い値になるはずなので、基板設計によるところが大きそう。一方安価で電子制御可能なのが大きいメリット。
長々と遠隔で切り替えられる同軸リレーについて悩んでいて、汎用パワーリレーを使ったものを作ったり、既製品の同軸切替器をモーターで回すのを試したりしていたが、これでいいんじゃないかという感じになった。
さすがに一発でうまく基板がつくれる感じではないので、気がむいたら何度か作りなおしてみる予定。
4.5V モデルが安かったので 4.5V モデルにしたため、コイルは 145Ω (28mA) 約 140mW。5V で駆動するなら追加で 18Ω、12V で駆動するなら 268Ω が必要になる。
コントローラについてはまた別途書く。
G6K(U)-2F(P)-RF(-S, -T) の場合 VSWR 1.2 で 3W まで。接点容量は 1A