最初のステップは、開始サンプルレートとターゲットサンプルレートの両方が有理数であることを確認することです。それらは整数なので、自動的に有理数になります。それらの1つが有理数でない場合でも、サンプルレートを変更することは可能ですが、プロセスは大きく異なり、より困難です。
22∗ 32∗ 52∗ 7227∗ 5332∗ 7225∗ 5
データをリサンプリングする方法に関係なく、前の手順を実行する必要があります。次に、FFTでそれを行う方法について話しましょう。FFTでリサンプリングするコツは、すべてがうまく機能するFFTの長さを選択することです。つまり、デシメーションレート(この場合は441)の倍数であるFFT長を選択します。例として、FFTの長さとして441を選択しますが、882、1323、または441の他の正の倍数を選択することもできます。
これがどのように機能するかを理解するには、それを視覚化することが役立ちます。まず、周波数領域で次の図のようなオーディオ信号から始めます。
処理が完了したら、サンプルレートを16 kHzに下げたいが、歪みはできるだけ少なくしたい。つまり、上の画像の-8 kHzから+8 kHzまでをすべて維持し、それ以外のものをすべてドロップするだけです。その結果、次の図のようになります。
サンプルレートは縮尺どおりではなく、概念を説明するためだけにあることに注意してください。
25∗ 5
ご想像のとおり、いくつかの潜在的な問題があります。それぞれについて説明し、それらをどのように克服できるかを説明します。
データが間引き係数の適切な倍数でない場合はどうしますか?データの終わりに十分なゼロを埋めて、間引き係数の倍数にすることで、これを簡単に克服できます。データはFFTされる前にパディングされます。
ll − 1ゼロ(データサンプルの数とパディングサンプルの数の両方がデシメーションファクターの正の倍数でなければならないことに注意してください-この制約を満たすためにパディングの長さを増やすことができます)、パディングされたデータのFFT、周波数ドメインの乗算データとフィルター処理を行ってから、高周波数(> 8 kHz)結果を低周波数(<8 kHz)結果にエイリアスしてから、高周波数結果をドロップします。残念ながら、周波数ドメインでのフィルタリングはそれ自体大きなトピックであるため、この回答ではこれ以上詳しく説明することはできません。ただし、フィルター処理して複数のチャンクでデータを処理している場合は、フィルターを連続させるために、Overlap-and-AddまたはOverlap-and-Saveを実装する必要があると言います。
これがお役に立てば幸いです。
編集:周波数ドメインサンプルの開始数と目標の周波数ドメインサンプル数の差は、結果の負側と同じ数のサンプルを結果の正側から削除できるようにする必要があります。この例の場合、サンプルの開始数は間引き率、つまり441であり、ターゲットサンプル数は補間率、つまり160でした。差は279であり、均一ではありません。解決策は、FFTの長さを2倍の882にすることです。これにより、サンプルのターゲット数も2倍の320になります。これで差が均一になり、問題なく適切な周波数領域サンプルをドロップできます。