これが私の「週末」の趣味の問題です。
クラシックシンセサイザーのROMからの愛されているシングルサイクル波形がいくつかあります。
これらは8ビットのサンプルです(256の可能な値)。
それらはわずか8ビットであるため、ノイズフロアはかなり高くなります。これは量子化誤差によるものです。量子化誤差はかなり奇妙です。それはすべての周波数を少し台無しにします。
これらのサイクルを取り、それらの「クリーンな」16ビットバージョンを作成したいと思います。(はい、私は人々がダーティバージョンを愛していることを知っているので、ユーザーが好きな程度にダーティとクリーンの間を補間できるようにします。)
下位8ビットを永久に失ってしまったので、不可能に聞こえますよね?しかし、これはしばらくの間私の頭の後ろにありました、そして私はそれをすることができるとかなり確信しています。
これらは、再生のために何度も繰り返される単一サイクルの波形であるため、これは特殊なケースであることに注意してください。(もちろん、シンセは、エンベロープ、モジュレーション、フィルターのクロスフェードなど、サウンドを面白くするためにあらゆる種類のことを行います。)
個々のバイトサンプルごとに、私が本当に知っているのは、16ビットバージョンの256個の値の1つであるということです。(16ビット値が切り捨てられるか8ビットに丸められる逆のプロセスを想像してみてください。)
私の評価関数は、最小のノイズフロアを取得しようとしています。1つまたは複数のFFTでそれを判断できるはずです。
徹底的なテストにはおそらく永遠に時間がかかるので、低解像度の初回通過を行うことができます。または、ランダムに選択された値を(同じ8ビットバージョンを維持する既知の値の範囲内で)ランダムにプッシュして、評価を行い、よりクリーンなバージョンを維持しますか?それとも私ができるより速い何かがありますか?検索空間の他の場所にいくつかのより良い最小値があるかもしれないとき、私は極小値に陥る危険がありますか?私は他の同様の状況でそれが起こったことがあります。
おそらく隣接する値を調べることによって、私が行うことができる最初の推測はありますか?
編集:新しい波形を元の波形にサンプリングするという要件を削除すると、問題が簡単になると指摘する人もいます。それは本当だ。実際、よりクリーンなサウンドを探しているだけなら、解決策は簡単です。