SmallDVについて

投稿日 by Hiro

Raspberry Pi(およびその他)用の埋め込みFreeDV

機械翻訳のサイトです
原文は http://www.kk5jy.net/smalldv-v1/

ラズベリーパイでFreeDVインターフェイスの紹介です。

マット・ロバーツ-matt-at-kk5jy-dot-net

公開日:2018年5月29日

更新済み:2018-06-19

図1-ハードウェアフロー

 

図2-オーディオ
インターフェイス回路の例

 

図3-ソフトウェアフロー

 

図4-プロトタイプ

 

図5-プロトタイプ
インジケータLED

FreeDVプロジェクトは、具体的にアマチュア無線の使用のために設計された、オープンソースのデジタル音声モデムを提供します。GUIソフトウェアはかなり軽量で、Raspberry Piの新しいバージョンでも実行でき ます。ただし、このモードのすべてのユーザーが、オンエアで操作するために、どんなに小さくても単純でも、PCまたはGUIアプリケーションを使用する必要があるわけではありません。

FreeDVソフトウェアは十分にファクタリングされており、コアコーデックはcodec2と呼ばれるスタンドアロンライブラリとして利用できます。このライブラリは、コーデック を他のソフトウェア製品に埋め込むための緊密なインターフェースを提供します。実際、FreeDVチームはスタンドアロンの「ボックス」提供して います 汎用コンピュータなしで動作するポータブル低電力デバイスにDVモデムが組み込まれています。このようなデバイスは、モバイルまたはポータブル操作、またはコンピューターなしの「シャック」に簡単に使用できます。

SM1000デバイスは非常にクールですが、モードをいじりたいだけの人にとっては少し高価です。オープンソースであるにもかかわらず、主にFreeDVをサポートするように設計されているように見えるため、真剣なユーザーにとっては「オールイン」ソリューションになります。codec2以来APIはフリーソフトウェアとして利用できます。SM1000と同様の機能を提供するキットデバイスのベースとしてRaspberry Piを使用することにしました。これにより、予備のRasPiデバイスを持っている人は、少ない予算で組み込みデバイスのモードを試すことができます。RasPiの豊富なハードウェアI / Oセットは、拡張性と実験の余地を十分に残します。特に、構築と調整を好む人にとっては十分です。

結局のところ、FreeDV APIは非常に軽量であり、GUIなしで操作するために必要なすべての機能を備えています。オリジナルバージョン1のRasPiで実行した場合でも 、実際に遅いデバイスですが、以下で説明するソフトウェアは、十分なリソースを備えたデフォルトの1600モードを実行できます。ソフトウェアは、元のデバイスからRaspberry Piデバイスで、現在の(そして非常に高速な)RasPi 3B +までクリアする必要があります。

私はキットをSmallDVと呼んでいます。

キットの説明キットに

必要なハードウェアは、設計上非常に単純です。アイデアは、必要なハードウェア全体を最小限に抑え、できるだけ少ないカスタムハードウェアを使用することです。フロー図を図1に示します。このキットでは、Raspberry Piをコアとして使用します。小さなコンピューターはすべてのDSPを実行し、少量の外部ハードウェアも制御して無線PTTを制御し、オーディオをルーティングします。オプションで、デバイスの動作の監視に使用するいくつかのLEDを駆動できます。

DVアダプターとアナログ無線を使用するには、4つのオーディオ接続が必要です。

  • マイクロフォン
  • スピーカーまたはヘッドフォン
  • 無線送信オーディオ
  • ラジオ受信オーディオ

FreeDVソフトウェアには、必要な4つの接続を提供するために2つのサウンドデバイスが必要です。ただし、アマチュア無線の世界でのほとんどの音声操作は半二重です。つまり、各サウンドカードの半分は常にアイドル状態であり、ソフトウェアは2つのカードのサンプリングレートに合わせて追加の作業を行う必要があります。いつでも必要なのは、1つの音声入力と1つの出力だけです。

その結果、SmallDVキットは単一のサウンドデバイスを使用し、必要に応じて単一のDPDTリレーを使用して入力と出力を適切な機能に接続します。ソフトウェアは、サウンドカードのミキサーデバイスを使用して、4つの機能のそれぞれに異なるオーディオレベルを設定することもできます。

インターフェイス回路の例を図2に示します。。インターフェイスは、小さなプロトタイプボードに簡単に構築できます。回路内のV +電圧は、使用されているリレーのコイルと一致する必要があります。 RasPiの+ 5Vレールから快適に電力を供給できるほど十分に低い電流引き込みの適切な5VDC小信号リレーを選択しました 。

デバイスを実行するソフトウェアは2つの部分に分かれており、フロー図を図3に示し ます。最初の部分はfdvcoreと呼ばれる非常に小さなユーティリティ です。サウンドデバイスに接続し、FreeDVエンコードおよびデコードを行います。そのC ++コードは、すべてのDSPを可能な限り最高の効率で実行できるように、小さく、最小限で、高速です。smalldvPythonで記述されたプログラムは、構成の処理、fdvcoreの管理、各T / R遷移でのミキサーレベルの調整、GPIOおよびオーディオルーティングの制御を担当します。この分割により、fdvcoreは高速で、他の機能からほとんど独立できますが、メインのsmalldvプログラムでは、迅速な開発と、愛好家による簡単な変更が可能です。以来 Pythonはラズベリーパイで使用される主なプロトタイピング言語である愛好家は、それはRasPi環境に精通している人にやさしいキットになります。smalldv

プログラムには、SmallDVキットの構成と制御に使用できるソケットリスナーがあります。つまり、SmallDV組み込みデバイスは、シンプルテキストモード接続、Webアプリケーションなど、任意の数のユーザーインターフェイスから制御できます。これにより、キットの上にカスタムUIを簡単に配置できます。最低限、キットはtelnetのみで構成できます。

初期のプロトタイプを図4に示します図2に示すインターフェイス回路を実装しています。特定のUSBサウンドデバイスを使用し ます、Adafruitチームによってテストされ、Raspberry Piおよびその標準ドライバーセットと適切に連携します。また、入力と出力が1つしかないため、レベルの構成が簡単になります。デバイスは、AdafruitまたはDigikeyやMouserなどの再販業者から入手できます。

現在の機能

ソフトウェアの現在のバージョンは、FreeDVモデムの1600および700モードのバリアントをサポートしています。目的のモードは、TCP制御インターフェースを介して実行時に変更できます。

このキットは、Raspberry PiのGPIOピンを介していくつかの機能をサポートしています。

  • PTT入力ボタン。これは、ユーザーがT / R切り替えを制御するために使用する高品質で瞬間的な押しボタンに接続する必要があります。RasPi GPIOライブラリはソフトウェアのデバウンスをサポートしていないため、 このボタンにはRCデバウンス回路を使用する必要があります。
  • 無線への接続用のPTT出力。これは、オープンコレクタまたはオープンドレイン回路を駆動するために使用する必要があります。このGPIO信号は、オーディオルーティング用のDPDTリレーの駆動にも使用されます。両方の機能の例を図2に示し ます
  • SYNC表示用のLED。「キャリア検出」表示とよく似ており、モデムが受信信号にロックされていることを示します。
  • CLIP表示用のLED。これは、レシーバー(RX中)またはマイク(TX中)から受信したオーディオレベルが高すぎることをユーザーに警告します。
  • 5つの異なる偏差状態を表示できる3つのLEDで作成されたチューニングインジケーター。これは、SSB受信機で信号をチューニングするための補助として使用できます。

図5は、最新のプロトタイプのLEDインジケータを示しています。

さまざまなGPIO機能に使用される極性とチューニングインジケーターの範囲は、smalldvスクリプトで構成でき、幅広いハードウェア構成をサポートします。smalldv

プログラムは、サウンドデバイスのソフトウェアミキサーコントロールの入出力オーディオレベルを調整することもできます。モデムが各T / Rトランジションを実行すると、ミキサーは入出力レベルを調整して、サウンドカードの各オーディオ接続に接続された新しいデバイスをサポートできます。たとえば、トランスミッターに必要なドライブレベルは、おそらくヘッドフォンを駆動するために必要なものと同じではありませんが、リレーを介して同じオーディオ出力デバイスを共有します。そのため、モデムが受信と送信を切り替えると、ミキサーは出力レベルを調整して、サウンドカード出力に接続されるデバイスに合わせ、正しいレベルが維持されるようにします。入力接続についても同じことが行われます。

4つの異なるレベルの組み合わせが構成可能で、それぞれ2つが送信と受信に使用されます。これにより、キットは外部ハードウェアなしでソフトウェアですべてのレベル管理を実行できます。とはいえ、トリマーで外部にレベルを設定することを好むキットビルダーはそうすることができます。すべての機能のデフォルトレベルは、変更しない限り100%です。外部ハードウェアで調整するのに最適です。ヘッドフォン/スピーカーの音量レベルは、外部ハードウェア制御に特に適しています。smalldv

programは、同じデバイス上の他のプログラムからの接続を受け入れるTCPリスナーを実行します。これにより、任意の数の異なるユーザーインターフェイスをスーパーバイザーに接続して、デバイスを構成および操作できます。TCPインターフェースは、改行で互いに分離された単純なコマンドで、ライン指向のインターフェースを使用します。各コマンドは1行を消費し、ソフトウェアからの応答は1行を消費します。コマンドインターフェイスには、次のような多くの構成およびステータスの動詞があります。
バージョンfdvcoreプロセスのバージョンを要求します。VOLTX無線送信音声レベルを要求または設定しますVOLRX無線受信の音声レベルを要求または設定しますVOLPHヘッドフォンまたはスピーカーの音量を要求または設定します。VOLMICマイク入力の音量を要求または設定します。テキスト送信中に送信される帯域外テキストを要求または設定します。TXTX(1)モードにするかRX(0)モードにするかを示すブール値を指定します。これはソフトウェアT / Rコントロールで、Raspbery PiのハードウェアPTT入力に加えて動作できます。クリップ最後のCLIPコマンド以降にクリッピングが発生したかどうかを示すブール値を要求します。フレーム処理されたデータフレームの数を要求します。DF受信信号の周波数オフセットを要求します。これは、調整インジケーターを駆動するために使用できます。SNR受信信号の信号対雑音比を要求します。同期受信機が受信信号に同期しているかどうかを示すブール値を要求します。STATSYNCコマンドとSNRコマンドの組み合わせである値のペアを要求します。終了するTCP接続を閉じます。シャットダウンTCPを閉じて、SmallDVモデムをシャットダウンします。モデム使用するCodec2エンコーディングを読み取るか設定します。有効な値は 1600700700B700C、及びCODEC2 0.8ライブラリにリンクするとき700D。クライアント(C)とサーバー(S)間の交換の例は次のようになります。

C:バージョン
S:OK:バージョン= fdvcore 1.0
C:TX
S:OK:TX = 0
C:VOLPH
S:OK:VOLPH = 100
C:VOLPH = 75
S:OK:VOLPH = 75
...
		

モデム構成が変更されるたびに、設定はファイルに保持されます。これは、「アプライアンス」スタイルのデバイスに最適です。すべてのソフトウェアコンポーネントはバックグラウンドサービスとして実行されます。これにより、何も表示せずにソフトウェアを起動および実行できます。

ソフトウェアのダウンロード

プロジェクトのソフトウェアは、以下のソース形式で入手できます。Linux(RasPiを含む)でソフトウェアを構築するには、いくつかの前提条件が必要です。

  • ビルド必須のメタパッケージ。
  • libsndfile1のライブラリとlibsndfile1-devの開発用ヘッダ。
  • Gary Scavone によるRtAudioの最新バージョン。
  • 最近のバージョンCODEC2の FreeDVのウェブサイトからライブラリ。

このプロジェクトはまだ進行中ですが、コア機能は機能しています。そして、それはキットにとって十分であり、それがポイントです。私は自分の用途に合わせてキットを開発し、新しい機能を追加し続けますが、安価なハードウェアにFreeDVを埋め込む実験をしたい人のために、ここでソフトウェアを利用できます。

すべてのソフトウェアとファームウェアは、GPLバージョン3の条件の下でリリースされます 。これにより、エンドユーザーが製品を自由に利用できるようになりますが、このコードを自分のプロジェクトで使用する人々が自分の改善を一般に再リリースすることも保証されます。このようにして、アマチュア無線コミュニティは、ソフトウェアまたはファームウェアに基づいた商用製品に適用される可能性のある改善点に自由にアクセスできます。

 

  SmallDV 1.0ダウンロード   (ここをクリック)

ソフトウェアパッケージをダウンロードするには、上のリンクをクリックしてください。ソースはGPLバージョン3でリリースされており、ダウンロードページからも入手できます。

リリース履歴

2018-05-29-初期リリース。
2018-06-01-チューニングインジケーターのサポートを追加します。
2018-06-02 -SYNC LED出力のサポートを追加します。
2018-06-08 – fdvcoreの RXオーディオパスのバグを修正しました
2018-06-10-効率がさらに向上し、fdvcoreのPASSおよびMUTEモードのバグが修正されました
2018-06-14-リサンプリングに使用されるフィルタークラスのバグを修正。
2018-06-19-700Dをより適切にサポートするためにバッファ制限を修正しました。

Copyright(C)2018 by Matt Roberts、KK5JY。全著作権所有。