私の目的は、ビット (0 と 1) を表す 2 つの周波数のような一連の周波数を持つことです。これらの周波数をサウンドカードを介してオーディオ出力に送りたいです。もう一方の端で、サウンド カードのマイク入力にコードを接続します。私は、他のコンピューターからその信号 (生成された 2 つの固定周波数のシリーズ) を感知し、データを再形成するのが好きです。
これどうやってするの?
私の目的は、ビット (0 と 1) を表す 2 つの周波数のような一連の周波数を持つことです。これらの周波数をサウンドカードを介してオーディオ出力に送りたいです。もう一方の端で、サウンド カードのマイク入力にコードを接続します。私は、他のコンピューターからその信号 (生成された 2 つの固定周波数のシリーズ) を感知し、データを再形成するのが好きです。
これどうやってするの?
まず、特定の周波数の 2 つの正弦波を生成する必要があります。基本的に、サウンドカードの現在のサンプルレートを知り、そのサンプルレートで特定の周波数の正弦波を表す一連のフロートを生成するだけです。つまり、48000 Hz で周波数が 1000 Hz のサウンドカードの場合、各完全な正弦波 (1 つの山と 1 つの谷) は 48 のサンプルで構成される必要があります。
生成できる最大周波数はサンプルレートの半分であることに注意してください。
次に、2 番目の周波数で 2 番目の正弦波を生成します。2 つの周波数が互いに一定の距離を持っていることを確認します。そのためには、1半音の周波数係数で十分ですfactor >= (1+1/12)
。
また、両方の正弦波の合計が最大振幅を超えないようにしてください。これを行う最も簡単な方法は、両方の正弦波を振幅に制限すること<= 0.5
です。オーバーシュートは信号をクリップし、新しい周波数ピークを作成します。
受信側で、着信信号の短いタイム スライス (約 256 ~ 1024 サンプル) の FFT を実行します。周波数分解能を向上させるには、重なり合うスライスを取得し、端を徐々にフェードアウトしてから、スペクトル スライスを時間平均します。結果のスペクトルでは、送信された 2 つの周波数にピークがはっきりと表示されます。
オーディオについてよく知らない場合、これはおそらくかなり難しい作業です。