
We provide amateur radio contest administration system ATS-4 and communication logging software zLog.
autodyne nextzlogATS-4 に代わる、コンテストのログの受付と集計のシステムの設計案をまとめる。
flowchart TB
subgraph Lib["ライブラリ"]
RX["RxSL: ログの形式"]
RU["規約の crate: 1 コンテスト 1 crate"]
end
subgraph Server["ATS-5 のサーバー: 1 つの実行ファイル"]
ACC["受付"]
TAB["集計"]
SCO["スコアボード"]
ADM["管理者のページ"]
DB["SQLite"]
MAIL["メールの送信"]
end
subgraph Browser["ブラウザ"]
FORM["提出のフォーム"]
WASM["WASM: 規約の確認, 得点"]
VIEW["スコアボードの表示"]
end
Z["zLog RS"]
N["N1MM+ など"]
FORM --> WASM
WASM --> RX
WASM --> RU
FORM -- "ログ" --> ACC
ACC --> RX
ACC --> RU
ACC --> DB
ACC --> MAIL
TAB --> DB
TAB --> RU
Z -- "交信, 得点" --> SCO
N -- "得点の XML" --> SCO
SCO --> DB
SCO --> VIEW
ADM --> DB
| 部分 | 受け持つもの |
|---|---|
| RxSL | ログの形式の読み書き (QxSL 相当) |
| 規約の crate | 得点、マルチ、交換の形式、ログの確認 |
| サーバー | 受付、集計、スコアボード、管理者のページ、メール |
| WASM | 提出の前の確認と得点の計算 |
flowchart LR
T["RxSL: 規約の trait"]
A["ALLJA1"]
U["UEC"]
R["リアルタイム"]
S["スクリプトの規約: 任意"]
A --> T
U --> T
R --> T
S --> T
T --> Z["zLog RS"]
T --> W["ATS-5 のサーバー"]
T --> B["ATS-5 の WASM"]
sequenceDiagram
participant P as 参加者
participant B as ブラウザ
participant S as サーバー
participant M as メール
P->>B: ログを選ぶ
B->>B: WASM で確認, 得点を表示
P->>S: 提出
S->>S: 規約で確認, 保存
S->>M: 受付のメール: 閲覧のリンク, パスワード
M-->>P: 受付のメール
sequenceDiagram
participant P as 参加者
participant S as サーバー
participant M as メール
participant A as 管理者
P->>S: 同じ呼出符号, 部門で提出
S->>S: 新しい提出を有効にし, 前の提出を履歴に残す
S->>M: 前の提出のメールアドレスに通知
S->>A: メールアドレスが違えば目印
A->>S: 必要なら前の提出に戻す
参加者に見える関門は置かない。
flowchart LR
N["N1MM+ など"] -- "得点の XML" --> R1["自己申告の受付"]
Z["zLog RS"] -- "得点の XML" --> R1
Z -- "交信" --> R2["ログからの集計"]
R2 --> RU["規約の crate"]
R1 --> B["スコアボード"]
R2 --> B
B --> V["ブラウザ: その場で更新"]
| 自己申告の得点 | ログからの集計 | |
|---|---|---|
| 送るもの | 得点の XML (<dynamicresults>) |
交信 |
| 送る側 | N1MM+ など、zLog RS | zLog RS |
| 得点の計算 | ロガーの計算 | サーバーが規約で計算 |
| 使いどころ | 普段のコンテスト | リアルタイムコンテスト |
flowchart TB
subgraph Host["サーバーの機械"]
BIN["ats5: 1 つの実行ファイル"]
DATA["データのフォルダ: SQLite, 提出のログ"]
BIN --> DATA
end
BIN -- "HTTP" --> WEB["ブラウザ"]
BIN -- "SMTP" --> SMTP["メールのサーバー"]
zLog とは別のリポジトリで開発するライブラリの設計案と、zLog への組み込みの計画をまとめる。
flowchart TB
subgraph Z["zLog RS"]
Host["状態の管理: バンド, モード, 交信の記録"]
A["zlog-audio: サウンドカード, WAV"]
end
subgraph DSP["信号処理"]
C["CW4I: CW の解読"]
R["RTTY"]
F["FTxL: FT8, FT4"]
end
O["SO2R: 2 台の運用"]
subgraph H["HaML: 機器"]
T["送信の管理"]
D["rig, keyer, so2r, ポート"]
S["sim"]
end
A -- "サンプル" --> C
A -- "サンプル" --> R
A -- "サンプル" --> F
C -- "スポット" --> Host
R -- "送信の要求, スポット" --> Host
F -- "送信の要求, スポット, 記録" --> Host
Host --> O
O -- "どの無線機で送るか" --> T
T --> D
S -. "実機の代わり" .-> D
| ライブラリ | 受け持つもの | 受け持たないもの |
|---|---|---|
| HaML | リグ、キーヤー、SO2R の箱のドライバー、PTT、FSK、送信の管理、ポートの検出、シミュレーター | 音声、画面、交信の記録 |
| CW4I | CW の解読 | CW の送信 |
| RTTY | RTTY の変調と復調、受信の端末、マクロ | FT8、FT4 |
| FTxL | FT8 と FT4 の変調と復調、交信の手順 | RTTY |
| SO2R | 2 台の運用の論理と画面 | 機器のドライバー |
flowchart TB
core["haml-core: trait, エラー, ポート"]
rig["haml-rig: CAT"]
keyer["haml-keyer: USBIF4CW, WinKeyer"]
so2r["haml-so2r: SO2R Neo, OTRSP"]
tx["haml-tx: 送信の管理"]
sim["haml-sim: シミュレーター"]
rig --> core
keyer --> core
so2r --> core
tx --> core
sim --> core
flowchart LR
App["呼び出し側"] -- "命令" --> W["機器のスレッド"]
W -- "送受信" --> Port["シリアル, HID"]
W -- "状態の変化" --> App
sequenceDiagram
participant L as 送信を頼む側
participant T as haml-tx
participant D as 機器
L->>T: 無線機 1 で送る
T->>T: 同時送信の禁止, PTT の遅れ
T->>D: PTT, CW, FSK, AFSK
L->>T: 緊急停止
T->>D: すべて止める
flowchart LR
A["サンプル"] --> FE["周波数の分解"]
FE --> TR["局の追跡"]
TR --> DEC["解読"]
DEC --> P["パネル"]
DEC --> SP["スポット"]
flowchart LR
A["サンプル"] --> DM["復調"]
DM --> TERM["受信の端末"]
TERM --> SP["呼出符号, スポット"]
M["マクロ, 入力"] --> EN["符号化"]
EN -- "AFSK のサンプル" --> Out["ホスト"]
EN -- "FSK の要求" --> Out
flowchart LR
CLK["UTC の時間の枠"] --> DEC["復号"]
A["サンプル"] --> DEC
DEC --> LIST["解読の一覧"]
LIST --> SM["交信の手順"]
SM --> MOD["変調"]
MOD -- "送信のサンプル" --> Host["ホスト"]
SM -- "記録" --> Host
LIST -- "スポット" --> Host
stateDiagram-v2
[*] --> 待機
待機 --> 応答: CQ を選ぶ, 呼ばれる
応答 --> 交換: 交換を受信
交換 --> 確認: RR73, RRR
確認 --> 記録: 73, RR73
記録 --> 待機
応答 --> 待機: 相手が離れた
flowchart TB
Host["ホスト"] -- "入力の無線機, 交信の記録" --> S["SO2R"]
S --> FOCUS["入力の無線機"]
S --> TXR["送信の無線機"]
S --> RX["受信の音声: 片耳, 両耳, 混合"]
S --> SEQ["交互の CQ, 送信の待ち行列"]
TXR --> T["haml-tx"]
RX --> B["haml-so2r"]
S --> P["パネル"]
sequenceDiagram
participant Op as 運用者
participant S as SO2R
participant T as haml-tx
participant B as haml-so2r
Op->>S: 無線機 2 で CQ
S->>B: 受信を無線機 1 に
S->>T: 無線機 2 で送る
T-->>S: 送信の終了
S->>B: 受信を両耳に戻す
flowchart TB
subgraph Repo["リポジトリ"]
Lib["lib"]
Panel["ui: パネル"]
App["ui: 単体のアプリ"]
Panel --> Lib
App --> Panel
end
Host["ホスト"] --> Panel
sequenceDiagram
participant P as パネル
participant H as ホスト
P->>H: イベント: 開始, 停止, 開く, 送信の要求
H->>P: 状態: 動作中, 重複, マルチ
H->>P: 設定の UI を自分の設定画面に描く
| 項目 | 内容 |
|---|---|
| 呼出符号 | 拾った局 |
| 周波数 | Hz |
| 時刻 | UTC |
| SNR | dB |
| 出どころ | ライブラリと無線機 |
zLog は、ライブラリごとに 1 つの拡張を持ち、設定、メニュー、交信の記録につなぐ。 拡張は、通信や信号処理を持たない。
flowchart TB
subgraph Z["zLog RS"]
Core["Core: 交信の記録, 状態, Options, メニュー"]
au["zlog-audio"]
xr["zlog-rig"]
xk["zlog-keyer"]
xv["zlog-voice"]
xs["zlog-so2r"]
xc["zlog-cw4isr"]
xt["zlog-rtty"]
xf["zlog-ft8"]
end
xr --> Core
xk --> Core
xv --> Core
xs --> Core
xc --> Core
xt --> Core
xf --> Core
xv --> au
xc --> au
xt --> au
xf --> au
xr --> hr["haml-rig"]
xk --> hk["haml-keyer"]
xs --> so["SO2R"]
xc --> C4["CW4I"]
xt --> RT["RTTY"]
xf --> FX["FTxL"]
hk --> htx["haml-tx"]
so --> htx
| zLog の crate | 使うライブラリ | 受け持つもの |
|---|---|---|
| zlog-audio | なし | サウンドカードの入出力、WAV、無線機ごとの音声の割り当て |
| zlog-rig | haml-rig | 機器の選択、バンドとモードの追従 |
| zlog-keyer | haml-keyer | F キーのメッセージ、マクロ |
| zlog-voice | haml-tx | 音声のメモリ |
| zlog-so2r | SO2R | 入力の無線機と交信の記録の受け渡し |
| zlog-cw4isr | CW4I | スポットの受け取り |
| zlog-rtty | RTTY | 送信の要求、記録 |
| zlog-ft8 | FTxL | 交換の形式、記録 |
sequenceDiagram
participant L as CW4I, RTTY, FTxL
participant X as 拡張
participant C as Core
L->>X: スポット
X->>C: 重複, マルチ
C-->>X: 結果
X->>L: 色分け
L->>X: 記録の要求
X->>C: 交信を記録
sequenceDiagram
participant K as F キー, マクロ, FTxL
participant X as 拡張
participant S as SO2R
participant T as haml-tx
K->>X: 送信の要求
X->>S: 送信の無線機
S->>T: 無線機 1 で送る
T-->>X: 送信中, 終了
zLog V3にプラグインzLog additional I/Oを入れて、CTESTWIN.txtを出力しようとすると テキストにはならずにバイナリのまま出力される。
zLogV3でファイルの種類の選択肢が増えたから?
「ファイル」-「エクスポート」メニューをクリックし、ファイル選択ダイアログでCTESTWINを選ぶ。JARL ELOGも同様。
テキストファイルになって欲しい。
規約によると区部のマルチは東京都以外(即ち政令指定都市)は不要。 aktest.dllにaktest.datが埋め込まれているみたいなので、修正したaktest.datを組み込んだdllを作成する必要があると思われる。
https://asahikawa-contest.jimdofree.com/contest-%E8%A6%8F%E7%B4%84/
2)コンテストナンバー交換 ①RST符号によるシグナルリポートと運用地のJCC 、JCGナンバー を交換する <JCCの区ナンバーは東京都だけですので注意>
例) 札幌市 0101 を入力してもnew multiにならない。 札幌市中央区 010101を入力するとnew multiになりカウントされる。
札幌市 0101 を入力するとnew multiになりカウントされる。
なるはや。
jr8ppg無線部開発班のウェブサイトを改装し、実用的なサービスを提供する。
Volatile ATSを中核に、ATS-4系のコンテスト運営アプリを提供する。
技術記事のPDFを残す。HTML版のURLはZennに転送する。
JG1VPPATS-4がJARLサマリーシートの処理に依存し過ぎている。
CabrilloやJARLサマリーシートの処理をDSLに委譲する。また、サマリーシートの内容をJSONに変換する処理は、QxSLに移植する。
JG1VPPリアルタイムコンテストDLLにおいて適切に得点計算が行われていないのではないかという問い合わせがあった 考えられる理由としては, https://github.com/nextzlog/zylo/blob/c1ea32be8642a0f878cf4328b3d4769643627c92/src/plugins/rules/rttest/rttest.cfg#L39 のようにリアルタイムコンテストのCFGにはDLLが計算をするという指定があるものの,
OnVerifyEvent
OnPointsEvent
がhttps://github.com/nextzlog/zylo/blob/c1ea32be8642a0f878cf4328b3d4769643627c92/src/plugins/rules/rttest/rttest.go#L87 の リアルタイムコンテストのプラグインのコードに含まれないため, 得点計算などが行われていない可能性がある
jucky154ATS4をよりアマチュア無線界隈に広めたいが, コンテスト主催者側から攻めるのは困難が一部存在するということがわかった そのため, 逆にコンテスト参加者側から主催者側に「なんで ATS4にしないの? あれ便利だからそっちにして欲しいんだけど」という方向の作戦もありだと思われる
それを踏まえると, コンテスターの利便性向上が求められる. 有名コンテスターはN1MMを使っていることが多いため, N1MMのログをadifにせずに, そのまま直接提出することができれば, 利便性向上につながると考えられ, 目的の一部達成につながる可能性がある.
また, 世界的にも進出させることを考えると, 世界的なロギングソフトへの対応は, 重要だと考えている
N1MMはSQLiteのs3dbなるものを使っているぽい?
jucky154PRに対してCIを実行し、マージをブロックする。
ZyLOとCW4ISRは、go fmtの実行とgo testの正常終了を条件とする。
ATS-4は、テストを実装したCIが未整備のため、引き続き運用を検討する。
個別にPRを受け付ける運用の場合は、テストの成功をマージの条件とする。
JG1VPPCW解読機に関して、さらなる発展が求められている(ハムフェア)
そして、その中で、CW Skimmerはベイジアンを使っているという話があった
http://ag1le.blogspot.com/2013/01/towards-bayesian-morse-decoder.html 以前も上のブログは読んでいたものの、真面目に読んでいなかったが、いろんな段階でベイジアンを使っているようだ CW4ISRでも、ベイジアンを一部の段階で使ってみるのはありなのかもしれないので、調査や実験が必要だと思われる
jucky154CW4ISRはJavaScript (ES5)でイベントハンドラを定義可能だが、現時点では、読み取ったメッセージの編集ができる程度。
decoder.Program = function(message) {
message.Text = message.Text.replace('5NN', '599');
message.Text = message.Text.replace('ENN', '599');
return message;
}
もっとCW4ISRの設定を細かく調節したり、デバッグ・可視化機能やRPCによる外部連携を強化したい。
Goの構造体・メソッドの形式で、JavaScriptから呼び出し可能なライブラリを充実させる。それらは、以下のように渡される。
vm := goja.New()
vm.Set("RPC", RPC{})
https://github.com/nextzlog/todo/issues/176 に関連するが…
おそらく、多くの人が求めていることはS/N比がよくない音声でもモールスを解読できることである。 求められていることを実施できるCW4ISRとしたい
現在、一般に使われているモールス信号解読機であるCW SkimmerとのS/N比の比較 および CW Skimmerと同程度の耐ノイズ性の取得 (STFTで耐ノイズ性が得られるかは微妙… 音声から波形へのアルゴリズムや波形からモールスのon/off検知アルゴリズムを真面目に考える必要がありそう) CW Skimmerも表示としてはSTFTみたいなものが出るが、どうやってそこからモールスの解読をしているのだろうか?
jucky154エラーがあると出るだけでどこがエラーなのか不明。
タイトル通り
赤で示すなど一般的に行われているUIとすればよいのでは。
ATS-4の運用に必要なサーバと環境構築を行うサービスを提供するとして、採算性を検討したい。
まず、どの程度の需要があり、かつ、そのうち何割が実際に導入に漕ぎ着けるのかを把握する必要がある。コンテスト主催者でATS-4に興味のある方は、このIssueに追記していただけると助かります。
JG1VPP高校コンテストの規約が我々が作った時と変更になっているようです http://hstest.mg-sci.com/wp-content/uploads/2020/07/2020_31st_hstest_rule.pdf 2020年のルールだとHSマルチは消えないのですが、 http://hstest.mg-sci.com/wp-content/uploads/2022/06/2022_33rd_hstest_rule.pdf 2021年以降のルールだとHSマルチは削除されるようです
SSBとCWで交信した際にはHSマルチが消えるようにする
早めに
jucky154GitHubの組織としての無線部開発班は、以下の開発に興味がある方を募集しています。主に無線従事者が対象ですが、大学社団等の所属は問いません。


可能であれば、公開メンバーとして活動いただければと思います。設定は各自でお願いします。
JG1VPP運用をなんとかすれば(ウィンドウを閉じない)問題なさそうな問題が解決されていませんが、ボチボチ見栄えのいいプラグインができましたので、広報を検討しないといけない
JA1ZLOというお約束のものだけでなく、パイルアップ・カスカスの局の解読もやらせた動画を撮ったのでそれをツイートする?
https://user-images.githubusercontent.com/58735989/197546870-6f7a6e87-83f0-4d80-8b5f-fccf498579d6.mp4
jucky154マーケットプレイスは、どれかひとつでも誤りがあると、全体の更新が停止するように構築している。その場合は、管理人は速やかに状況を修正する責任がある。ここでは、そのための連絡を行う。
JG1VPP問題意識 ZyLOにしてもzLog 令和editionにしても機能が十分に認知されていない(この辺はJR8PPGさんと共通の見解 (https://twitter.com/jr8ppg/status/1548997253658198016 )) そのため、なんらかの周知の工夫を行う必要がある。
解決方法
ATS-4で書類提出するコンテスト参加者が遭遇するトラブルの典型例(実例)をここに自由に記していく。
JG1VPP問題意識 自分が持っているATS-4オペレータ向けの知識を広く一般に公開し、ATS-4を利用しやすい形とする
解決方法