Sound FSK / PSK / DSSSを介したPC間のデータ通信


8

楽しさと仕事のために、PCのスピーカーを使用して音声またはデータをエンコードして送信できるJavaベースのアプリケーションを実装する必要があります。受信側には、デコーダーソフトウェア付きのマイクがあります。

私は実装にFSK(synまたはasyncまたは提案)を使用することを考えていました:

テキスト(データ)--- modulate ---> 10khz-20khzオーディオ搬送波--->無線伝送--->マイク->復調--->テキストまたはデータを表示します。

私の主な考慮事項は次のとおりです。

  • 帯域幅が200bps以下の場合
  • 特定のレベルまでのノイズに強い
  • できれば16khz-20khzの搬送波で44.1khzのサンプリング(この領域ではノイズが少なく、高齢者やマイクにはあまり聞こえません。スピーカーは安価で、ラップトップですぐに利用できます)
  • コーディングロジックが複雑すぎないこと。

最小限のコーディング作業でどの変調が最も効果的に機能しますか?Javaを使用してFSK / BFSK / PSKまたはDSSSを実現するためのライブラリ/サンプルに関する推奨事項はありますか?


3
古いモデム標準の1つ、たとえば非常にシンプルな300ボー、全二重のV21を使用できます。そこにはたくさんのドキュメントとソースコードがあるはずです。必要に応じて、ミキシングを使用してベースバンドを最大17 kHzにシフトできます。
ポールR

1
キャリア周波数を高くしすぎないように注意してください。ほとんどの商用音響機器は、20kHzに近づくにつれて明確に定義されていない周波数応答特性を持ち始めます。一部のデバイスでは、16Khzが難しい場合があります。あなたのスキームがキャリア周波数/帯域を設定するパラメータを持つことは許容されますか?
user2718 2013

1
@PaulRのコメントに追加するには、V21のような仕様を採用して、選択したキャリア周波数範囲に一致するように適合させることができます。あなたがそれを追求したいなら、私はこのサイトに適応を助けるのに十分な専門知識があると確信しています。
user2718 2013

@PaulR Javaでの実装例を教えてください。
geeknizer 2013

1
Paul R

回答:


6

チャンネルの特性上、これは実際には非常に難しい問題です。ほとんどのコンピュータースピーカーは、帯域幅がかなり制限されており、かなりの非線形性があり、室内の音響は時々変化します。

1台のPCのヘッドフォン出力から別のPCのライン入力にケーブルを接続するだけで、人生はとても簡単になります。


2
私は非常によく似た通信方式に取り組んでいます。オーディオfsk変調/復調で、fskを使用したLinuxオーディオモデムの実装を見つけました。このswは、オーディオチャネルを2つのpcとfsk間の通信リンクとして使用して、300および1200ボーに到達できます。これは非常に良い出発点になる可能性があります(私の実装は、PCオーディオデバイスの周波数応答に関連する問題のために500〜4000 Hzの周波数を使用するノイズの多い環境で200ボーにかなり達します)。リンク
Yozek

@Yozekは私にそのソースコードを教えてもらえますか?
geeknizer 2013

1
ミニモデム実装のURLは次のとおり です。whence.com / minimodem / minimodem-0.16.1.tar.gz JavaとObjective-CでのAFSKの個人的な簡単な実装にまだ取り組んでいますが、いくつかの問題があります周囲/バックグラウンドノイズと低い伝送レート制限:約100/200ボー(またはビット/秒)。しかし、原因が実用的/生理学的な制限なのか、それとも私の「それほどスマートではない実装」の問題なのかはわかりません。私は2番目のものだと思います...
Yozek

1

はい、間違いなくFSKを使用する必要がありますが、非同期である必要があり、ここに理由があります。FSKを同期的に復調することをコヒーレント復調と呼びます。FSKをコヒーレントに復調するには、着信キャリア位相ロック(位相同期)が必要です。これは通常、少なくとも10 dB程度の信号対雑音比(SNR)がないとうまく機能しない位相ロックループ(PLL)で行われます。通常、オーディオブロードキャストのSNRはそれほど高くないので、コヒーレントな復調を忘れてください。電磁信号を実際に使用することに加えて、非コヒーレントFSKは、Pb≤10-4のコヒーレントFSKの場合よりも最大で1 dB以上のEb / Noを必要とします(これは、同じビット誤り確率Pbを取得するために、追加の送信のみが必要であることを意味します)各ビットの電力のdB)。しかし、コヒーレントな参照信号を生成する必要がないため、非コヒーレントなFSK復調器は構築がかなり簡単です。したがって、実際のシステムでは、すべてのFSK受信機が非コヒーレント復調を使用します。これは、すべての同期問題に対処するのではなく、追加のdBの電力を送信することを好むためです。

主な考慮事項への回答:

200bps以上の帯域幅:連続位相直交キャリア8fskを使用して200 bpsを達成し、スマートフォンをスピーカーから1 m離しました。

特定のレベルまでのノイズに対する耐性:データブロックごとに最大8個のエラーを修復する機能を備えたBCHエラー修正コードを実装しました。BCHコードは、25〜50%の冗長性が追加されたときに最大のコーディングゲインを持ちます。

できれば16khz-20khzの搬送波で44.1khzのサンプリング:サンプリング周波数を48 kHzまで上げ(これは今日のスマートフォンでは非常に一般的です)、動作帯域を17.5または18〜21.5 kHzに制限することをお勧めします。44.1を使用する場合は、17.5または18〜20.5 kHzで作業する必要があります。ただし、選択するスピーカーとマイクのすべてがこの高い周波数で動作するわけではないので、注意が必要です。それらの周波数応答分析を行う必要があります。PCを使用している場合は、ARTAまたはAudacityをお勧めします。プログラマーの場合は、MatlabまたはOctaveをお勧めします。スマートフォンを使用している場合は、オーディオスペクトル分析アプリをお勧めします

コーディングロジックが複雑すぎない:非コヒーレント相関直交fsk復調器をお勧めします。どのfftベースの実装よりもはるかに軽量です。特に、ドップラーとマルチパスがそれほど影響しない1 m未満の距離にいる場合

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.