可能なノイズシェーピングに制限?
100 kHz、16ビットアプリケーションでノイズシェーピングを行い、すべての量子化ノイズを25 kHz〜50 kHzバンドにシフトし、DC-25 kHzバンドのノイズを最小限に抑えたいです。 Mathematicaを設定して31サンプルのエラーフィルターカーネルを作成します。これは強化学習によってうまく機能します:少し学習した後、低周波帯域での低減とほぼ同じ量で高周波ノイズが約〜16dB向上します(中央の線は、整形されていないディザノイズレベルです)。これは、「Gerzon-Craven」ノイズシェーピング定理と一致しています。 今私の問題に: Gerzon-Cravenの定理はそれを禁止していませんが、私は徹底的な学習の後でもノイズをさらに形作ることができません。たとえば、ローバンドで40 dBの低減、ハイバンドで40 dBの増強を実現できるはずです。 だから私が遭遇している別の基本的な制限はありますか? 私はシャノンのノイズ/サンプリング/情報の定理を調べてみましたが、しばらくしてから、なんとかして単一の制限を導き出すことができました。それは、シャノンの定理の直接の結果であるように見える、Gerzon-Cravenの定理です。 どんな助けでもありがたいです。 編集:詳細 まず、上記のノイズシェーピングを生成するフィルターカーネルです。最新のサンプルが右側にあることに注意してください。.01に丸められたBarChartの数値:{-0.16、0.51、-0.74、0.52、-0.04、-0.25、0.22、-0.11、-0.02、0.31、-0.56、0.45、-0.13、0.04、-0.14、 0.12、-0.06、0.19、-0.22、-0.15、0.4、0.01、-0.41、-0.1、0.84、-0.42、-0.81、0.91、0.75、-2.37、2.29}(厳密にはバー文字ではないが、同様の曲線を生成する) エラーフィードバックの実装に関する別の注意: エラーフィードバックの2つの異なる実装を試しました。最初に、丸められた出力サンプルを目的の値と比較し、この偏差をエラーとして使用しました。次に、丸められた出力サンプルを(入力+エラーフィードバック)と比較しました。どちらの方法でもまったく異なるカーネルが生成されますが、どちらもほぼ同じノイズシェーピング強度で横ばいになるようです。ここに投稿されたデータは、2番目の実装を使用しています。 これは、デジタル化された波のサンプルを計算するために使用されるコードです。stepは丸めのステップサイズです。waveはデジタル化されていない波形です(通常、信号が適用されていない場合はゼロのみ)。 TestWave[kernel_?VectorQ] := Module[{k = kernel, nf, dith, signals, twave, deltas}, nf = Length@k; dith = RandomVariate[TriangularDistribution[{-1, 1}*step], l]; signals = deltas = Table[0, {l}]; twave = wave; Do[ twave[[i]] -= k.PadLeft[deltas[[;; …