Open irukabando opened 11 months ago
イシューを立てていただき誠にありがとうございます。 録音のCWのデータをgithubのイシューに添付していただけますか?
性能通りのデコードされない。 ことが実際に性能を発揮できていないのか、それともCW4Iの性能の限界によって解読できていないのかの切り分けや、どういう音声が苦手なのかの調査に必要となります。
windows のセキュリティに引っかからない件については、https://github.com/nextzlog/todo/issues/103 と同様ですね。ただいま、対応を検討中です。
「セキュリティーに引っかかる理由としては音声デバイスにアクセスしており、利用者の音声を盗み聞するウイルスソフトではないかと勘違いされているからです。対応としては、https://support.microsoft.com/ja-jp/windows/windows-セキュリティに除外を追加する-811816c0-4dfd-af4a-47e4-c301afe13b26#ID0EBF=Windows_10のようにしていただければ幸いです。」と言うのが現状です。 exeそのものをネット配布・自作アプリ・インストール作業不要というアプリだとどうしてもセキュリティーで弾かれてしまうので…
ご回答ありがとうございます。 スマホで、Youtube にアップロードされていた CW の録音を流しました。わかりにくく申し訳ありません。 URL を添付いたしました。 セキュリティのほうは、ご回答の通りやってみます。 よろしくお願いします。
https://www.youtube.com/watch?v=wk5a_V2Hvnk&t=997s これなどでもやってみましたが、上位に E, T の組み合わせ文字列がきて、下位にデコードされました。ほぼ完全でした。 録音音声の品質の問題でしたらすみません。 E, T の組み合わせが上位にくるのは性能通りなのか教えていただければ幸いです。 セキュリティのほうは改善できました。
その動画で解読してみました。結論から言うと、クリックノイズでしょう。
CW4ISRは、ウィンドウ最下部のスケルチを調整してから使用します。これがノイズとモールス信号とを分離する閾値です。右に1個スライドさせると、振幅では10倍に閾値が増加します。
開発段階ではスケルチの自動調整も試験してますが、手動の方が安定するので、暫定的に手動調整としています。
さて、スケルチを弱めると、確かにEとTの羅列が出現するようです。デバッグのため、JavaScriptでマクロを組んでみました。
decoder.Program = function(message) {
printf('FREQ: %d: AMP: %f: TEXT: %s\n', message.Freq, Math.max(...message.Data), message.Text);
plot(message.Freq + '.svg', message);
return message;
}
以上をcw4i.js
としてCW4ISRと同じ場所に置き、CW4ISRを起動すると、標準出力には以下のように出力されます。
FREQ: 28: AMP: 338858601077.648865: TEXT: LASTCALL COCQW?F DEVK2TER/P VK2TER/P K
また、周波数毎に波形(厳密には振幅の時系列)がSVGファイルで出力されます。
目的の信号と同時刻に130Hz離れた周波数で極めて強いクリックを検知しています。
現状、このようなノイズを高精度に判別する手法は開発中です。ヒューリスティックな解決策としては、マクロを組んで、同時刻の中で比較的弱い信号を除去する方法があります。
手打ちなど速度が部分的に変化するモールス信号の解読で多少難があるのは仕様です。これもマクロを組んで対応することを想定しています。Message
構造体には必要な情報が含まれているので、デコードに失敗した部分だけを抽出して、速度を決定し、解読をやり直すことが可能です。
BGMはモールス信号として解析の対象になります。基本的に、リグの音声出力をそのまま解析する用途を想定しています。BGMなしで試してみてください。
試験的に、以下のcw4i.js
でクリックを抑制しています。最新のcw4i.exe
と同じ場所に配置して、CW4ISRを起動してください。
decoder.Program = function(message) {
width = Math.max(...message.Body.filter((s) => s.Class).map((s) => s.Width));
numSpace = message.Text.split(/[ET ]/g).length - 1;
message.Hide = numSpace >= message.Text.length / 2 && width <= 10 || message.Text.length <= 2;
//printf("%s, tone width: %d, %d spaces\n", message.Text, width, numSpace);
return message;
}
マクロは好みで調整・改良してみてください。もし、良いマクロが開発できたら、報告いただけると助かります。
概要
性能通りのデコードされない。
セキュリティに引っかかる
再現手順・設定
使用したCW 動画 URL: https://www.youtube.com/watch?v=oJfdofz8O8A&t=380s https://www.youtube.com/watch?v=WPwnSe2v3Ts&t=241s 2つ試した。
期待される動作
対応期限
特になし。急ぎません。