2台のコンピューター間で音声でデータを送信します(非常に近い距離)
私は、2台のコンピューター間でサウンドを介してデータを送信する例を作成しています。いくつかの要件: 距離が非常に近い。つまり、2台のコンピューターは基本的に互いに隣接している ノイズが非常に少ない(先生がノイズソースとしてロックソングをオンにするとは思わない) エラーは許容されます。たとえば、「無線通信」を送信した場合、他のコンピューターが「RadiQ通信」を受信した場合も同様に問題ありません。 可能であれば:ヘッダー、フラグ、チェックサムなどはありません。サウンドを介してデータを送信する基本を示す非常に基本的な例が必要なためです。派手になる必要はありません。 このリンクに従って、オーディオ周波数シフトキーイングを使用してみました。 ラボ5 APRS(自動パッケージレポートシステム) そしていくつかの結果を得ました: 私のGithubページ しかし、それだけでは十分ではありません。クロックリカバリ、同期の方法がわかりません...(リンクにはタイミングリカバリメカニズムとしてフェーズロックループがありますが、明らかに十分ではありませんでした)。 だから私はもっと簡単なアプローチを見つけるべきだと思う。ここにリンクを見つけました: データを音声に変換して戻します。ソースコードによる変調/復調 しかし、OPは回答で提案されたメソッドを実装していなかったため、非常に複雑になる可能性があります。また、私は答えで提案されているデコード方法を明確に理解していません: デコーダはもう少し複雑ですが、概要は次のとおりです。 必要に応じて、サンプリングされた信号を11Khz付近でバンドパスフィルターします。これにより、ノイズの多い環境でパフォーマンスが向上します。FIRフィルターは非常にシンプルで、フィルターを生成するオンラインデザインアプレットがいくつかあります。 信号をしきい値処理します。最大振幅の1/2を超える値はすべて1で、以下の値はすべて0です。これは、信号全体をサンプリングしたことを前提としています。これがリアルタイムの場合は、固定のしきい値を選択するか、一定の時間にわたって最大信号レベルを追跡する何らかの自動ゲイン制御を行います。 ドットまたはダッシュの開始をスキャンします。サンプルをドットと見なすために、ドット期間に少なくとも一定数の1を表示することをお勧めします。次に、スキャンを続けて、これがダッシュかどうかを確認します。完全な信号を期待しないでください。1の真ん中にいくつかの0が表示され、0の真ん中にいくつかの1が表示されます。ノイズがほとんどない場合、「オン」期間と「オフ」期間を区別するのはかなり簡単です。 次に、上記のプロセスを逆にします。ダッシュが1ビットをバッファにプッシュする場合、ドットが0をプッシュする場合。 ドットとして分類する前に1がいくつあるのかわかりません。そのため、今のところわからないことがたくさんあります。プロセスを理解できるように、音声でデータを送信する簡単な方法を提案してください。どうもありがとうございました :) 更新: (ある程度)動作しているように見えるMatlabコードをいくつか作成しました。まず、振幅シフトキーイング(サンプリング周波数48000 Hz、F_on = 5000 Hz、ビットレート= 10ビット/秒)を使用して信号を変調し、次にヘッダーと終了シーケンスを追加します(もちろん変調もします)。ヘッダーと終了シーケンスはアドホックベースで選択されました(そう、ハックでした)。 header = [0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 …