回答:
いくつかあります。このサイトには、妥当な(しかしおそらく古い)リストがあります:
線形フィルタリング
ピーターの答えの最初のアプローチ(ホワイトノイズのフィルタリング)は、非常に簡単なアプローチです。でスペクトルオーディオ信号処理、JOSを生成するために使用することができる低次フィルタ与えるまともな近似を伴って、解析結果のパワースペクトル密度は、理想的に一致どれだけの。線形フィルタリングは常に近似値を生成しますが、実際には問題にならない場合があります。JOSを言い換えると:
ホワイトノイズからピンクノイズを生成できる正確な(合理的な有限次数の)フィルターはありません。これは、フィルターの理想的な振幅応答が無理関数に比例する必要があるため です。ここで、はHz単位の周波数を示します。ただし、知覚的に正確なものを含め、任意の近似度でピンクノイズを生成するのは簡単です。 f
彼が与えるフィルターの係数は次のとおりです。
B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];
これらは、MATLABフィルター関数へのパラメーターとしてフォーマットされているため、明確にするために、次の伝達関数に対応します。
明らかに、実際には係数の完全な精度を使用することをお勧めします。そのフィルターを使用して生成されたピンクノイズがどのように聞こえるかへのリンクを次に示します。
固定小数点の実装では、通常[-1,1)の範囲の係数を使用する方が便利なため、伝達関数の再加工が適切に行われます。一般的に、推奨事項は2次セクションに分割することですが、その理由の一部は(1次セクションを使用するのではなく)根が複雑な場合に実際の係数を操作するためです。この特定のフィルターの場合、すべての根は実数であり、それから2次セクションに結合すると、おそらく1以上の分母係数が得られるため、次のように3つの1次セクションが妥当な選択です。
どこで
a 1 = 0.99516897 、a 2 = 0.94384177 、a 3 = 0.55594526
オーバーフローを防ぐには、これらのセクションの順序を慎重に選択し、各セクションのゲイン係数を選択する必要があります。Peterの回答のリンクに記載されている他のフィルターは試していませんが、おそらく同様の考慮事項が当てはまります。
白色雑音
明らかに、フィルタリングアプローチでは、そもそも一様な乱数のソースが必要です。ライブラリルーチンが特定のプラットフォームで使用できない場合、最も単純なアプローチの1つは、線形合同ジェネレーターを使用することです。効率的な固定小数点実装の1つの例は、TMS320C5xでの乱数生成(pdf)で TIによって提供されています。さまざまな他の方法の詳細な理論的議論は、ジェームズ・ジェントルによる乱数生成とモンテカルロ法にあります。
資源
Peterの回答の以下のリンクに基づくいくつかの情報源は、強調する価値があります。
コードの最初のフィルターベースのチャンクは、Orfanidisによる信号処理の概要を参照しています。全文はそのリンクで入手でき、[付録Bで]ピンクとホワイトの両方のノイズ生成について説明しています。コメントが言及しているように、Orfanidisは主にVossアルゴリズムをカバーしています。
Voss-McCartneyピンクノイズジェネレーターによって生成されるスペクトル。Vossアルゴリズムのバリエーションについて詳細に説明した後、ページの下部にあるこのリンクは、巨大なピンク色の文字で参照されています。上記のASCIIダイアグラムのいくつかよりも読みやすくなっています。
ウェンティアン・リーによる1 / fノイズに関する書誌。これは、PeterのソースとJOSの両方で参照されています。一般に1 / fノイズに関する目を見張るほどの数の参照があり、1918年までさかのぼります。
1990年からCorsiniとSalettiのアルゴリズムを使用しています。G。Corsini、R。Saletti、「A 1 / f ^ガンマパワースペクトルノイズシーケンスジェネレータ」、IEEE Transactions on Instrumentation and Measurement、37(4)、1988年12月、615 -619。ガンマ指数は-2〜+2です。私の目的にはうまくいきます。エド
このスクリーンショットを追加する試みが機能する場合、以下の図は、Corsini and Salettiアルゴリズムのパフォーマンスの例を示しています(少なくとも1990年にプログラミングしたとき)。サンプリング周波数は1 kHz、ガンマ= 1で、1000個の32k FFT PSDが平均化されました。
これは、以前のCorsini and Saletti(C&S)ノイズジェネレーターに関する投稿に続きます。次の2つの図は、低周波数(ガンマ> 0)および高周波数(ガンマ<0)ノイズの生成に関してC&Sジェネレーターがどれだけうまく機能するかを示しています。3番目の図は、C&Sジェネレーター(私の最初の投稿と同じ)の1 / fノイズPSDと、Orfanidis教授の優れた書籍(eqn B.29、p。736)にある例B.9 1 / fジェネレーターを比較しています。これらのPSDはすべて、1000個の32k FFT PSDの平均です。それらはすべて一方的であり、平均減算されています。C&S PSDでは、3極/ 10年を使用し、4桁(0.05〜500 Hz)を使用可能な範囲として指定しました。したがって、C&Sジェネレーターにはn = 12の極とゼロのペアがありました。サンプリング周波数は1 kHz、ナイキストは500 Hz、分解能要素は0.0305 Hzをわずかに上回りました。エドV