ノイズジェネレータ
ホワイト・ピンク・ブラウン・ブルー・バイオレット・グレー・ベルベットの各ノイズと、線形帰還シフトレジスタ(LFSR)によるノイズを作ります。波形・振幅の分布・平均したスペクトラム・スペクトログラムで表示し、スペクトラムの傾きを測ります。どのノイズも実効値を −20 dBFS にそろえるので、切り替えても大きさは変わりません。
色の名前は、パワースペクトル密度の傾き(周波数が 2 倍になるごとの dB)で決まる
1 秒あたりのパルスの数。下げるほど疎になり、1 つずつのパルスが聞こえるようになる
フィルタ: 6 つの 1 次のフィルタの和(Kellett)。1/f からのずれは ±0.03 dB。Voss–McCartney: 間隔を倍々にして引き直す乱数の和。ずれは ±0.9 dB
スピーカーへ出す大きさ(0 dB = 波形と同じ大きさ)
ゲーム機などの音源 IC のノイズのシフトレジスタ。ビット長・タップ・帰還・初期値・クロックをまとめて変える
シフトレジスタのビットの数
最大周期の表: ビット長ごとの原始多項式(Xilinx XAPP052)。任意: 図のビットを押してタップを入れ切りする
1 秒あたりのシフトの回数。出力は次のクロックまで保持し、標本の間隔ごとに平均して鳴らす
XNOR は XOR の否定。すべて 0 の状態から動くかわりに、すべて 1 の状態から動かない
レジスタの最初の値(10 進。図の右端がビット 0)。XOR ではすべて 0、XNOR ではすべて 1 の状態から動かない
図のレジスタを 1 秒に何ステップ進めるか(音のクロックとは別に、ゆっくり動かす)
- 傾き(当てはめ)
- —
- 実効値
- —
- ピーク
- —
- 波高率
- —
- 尖度
- —
- 周期
- —
- 周期の長さ
- —
- 繰り返しの基本周波数
- —
横 1 目盛り(div)あたりの時間。表示窓の幅は 10 div
対数にすると、分布の裾(まれな大きな値)の違いが見える
中心から端までの振幅(フルスケールを 1 とする)
対数: 1 オクターブを同じ幅に並べ、傾きが直線になる。リニア: LFSR のクロックの整数倍の零が等間隔に並ぶ
1 回の FFT に使う点数。大きいほど周波数は細かく(LFSR の線が分かれる)、時間の変化には遅れる
スペクトラムで平均する区間(半分ずつ重ねる)の数。超えた後は、同じ重みの指数移動平均
スペクトログラムの横幅に入れる時間
スペクトラムの上端と、スペクトログラムの最も明るい色(dBFS/Hz)
スペクトラムの下端と、スペクトログラムの地の色(dBFS/Hz)
動作原理と式
ノイズの色
ノイズの「色」は、パワースペクトル密度 が周波数のべき に比例するときの指数 で決まります。周波数が 2 倍(1 オクターブ)になるごとに、 dB 変わります。
| 色 | 性質・作り方 | |
|---|---|---|
| ホワイト | 白色雑音。下の「乱数」で作る | |
| ピンク | オクターブごとのパワーが等しい | |
| ブラウン(赤) | ランダムウォーク(白色雑音の積分) | |
| ブルー | ピンクの 1 次差分 | |
| バイオレット | 白色雑音の 1 次差分 |
大きさをそろえる
どのノイズも、白色雑音を通すフィルタのインパルス応答のエネルギーで割って、実効値を −20 dBFS にそろえます。
dBFS は、フルスケールの正弦波を 0 dBFS とする決め方です[1]。
- 実効値: 倍してから dB にする
- ピーク: 振幅の絶対値の最大をそのまま dB にする
乱数
白色雑音の元になる乱数は、xorshift128 で作ります[2]。周期は です。xorshift もシフトと排他的論理和だけで状態を進める、線形帰還シフトレジスタの仲間です。
| 分布 | 作り方 | ピーク | 尖度 |
|---|---|---|---|
| 一様分布 | の乱数 を広げる | 実効値の 倍で止まる。波高率 4.77 dB | 1.8 |
| 正規分布 | Box–Muller 法で 2 つの一様乱数から作る[3] | 上限がない | 3 |
尖度は、4 次のモーメントを分散の 2 乗で割った値です。
ピンク
作り方は 2 つあります。どちらも 1/f のパワーに近づけますが、ずれの大きさが違います。
Kellett のフィルタ
極をずらした 6 つの 1 次のフィルタ(うち 5 つは低域通過)の和で、 の振幅に近づけます[4]。 から求めた 1/f からのずれは、20 Hz〜20 kHz で ±0.03 dB です。
係数は 44.1 kHz 用です。48 kHz では周波数が 48/44.1 倍にずれるだけなので、1/f の形は変わりません。
Voss–McCartney
- 行 は 標本ごとに引き直す
- 引き直すのは、標本の番号の末尾の 0 の数が のとき。1 標本で引き直すのは 1 行だけ
引き直す間隔が倍々なので、スペクトルは波打ちます。1/f からのずれは ±0.9 dB です。
ブラウン・ブルー・バイオレット
ブラウンは白色雑音の積分、バイオレットは 1 次差分、ブルーはピンクの 1 次差分です。
- 積分: 0 Hz で発散するので、極を 5 Hz に置いた漏れのある積分にする
- 1 次差分: の振幅は で、 より上で から下がる。48 kHz では 20 kHz で 2.6 dB 足りない
そこで に極(積分では零)を 1 つ足して、高域を補います。 は、48 kHz で 20 Hz〜20 kHz のずれが最も小さくなる値です。ずれはブラウン・ブルー・バイオレットとも ±0.2 dB 以内です。
グレー
グレーは、人が同じ大きさに感じるよう、A 特性[6]の逆数の形にしたノイズです。A 特性の逆数は 0 Hz に向かって で大きくなるので、20 Hz の 4 次バターワースの高域通過を掛けて止めます。
この形の 20 Hz の値は、1 kHz より 47 dB 大きくなります。パワーの 9 割は 50 Hz より下にあります。
フィルタの作り方は次のとおりで、目標からのずれは ±0.04 dB です。
- 20.6・107.7・737.9 Hz の零と、高域通過の極は、整合 z 変換で移す
- 12.2 kHz の 2 つの零は、20 Hz〜20 kHz で合うように当てはめた双 2 次で置き換える
ベルベットノイズ
ベルベットノイズは、平均の間隔 の区間ごとに、ランダムな位置に符号もランダムなパルスを 1 つだけ置き、ほかは 0 にした疎な列です[7][8]。
スペクトルは白色ですが、ほとんどの標本が 0 なので、振幅の分布は正規分布と大きく違い、尖度が大きくなります。
実効値は です。そこで、密度 を下げるほどパルスの高さ を上げてそろえます。 が 1 を超えるところ、つまり 48 kHz で毎秒 240 個より疎なときは、1 に抑えます。
- 番目の区間のパルスの位置
- パルスの符号
- ・
- 0〜1 の一様乱数
線形帰還シフトレジスタ(LFSR)
ビットのレジスタをクロックごとに右へずらし、ビット 0 を出力します。帰還の形は 2 つです。
- フィボナッチ形: タップのビットの排他的論理和を左端に入れる
- ガロア形: 出力を途中のタップのビットへ排他的論理和で足す
周期
どちらの形も、帰還の多項式 で決まります。 が原始多項式なら、すべて 0(XNOR ではすべて 1)以外の状態を残らず回り、周期は最大の になります。これを M 系列といいます[9]。
原始多項式でなければ、周期は短くなり、初期値で変わることもあります。NES の短周期モードは、初期値 1 からは 93 ステップで、ほかに 31 ステップの輪があります[10]。
タップの「最大周期の表」は、3〜32 ビットの最大周期のタップの表[11]によります。「実在の音源」は、NES[10]、ゲームボーイ[12]、SN76489 とセガの互換品[13]の資料によります。
スペクトル
M 系列の出力を ±1 にすると、自己相関は 2 値になります。0 のずれで 1、それ以外で です[9]。
- スペクトルは、繰り返しの周波数 おきの線に分かれる
- 線の高さは、出力をクロックの間保持する矩形の で決まり、クロック周波数 の整数倍で 0 になる
- 周期が長いと、線の間隔が FFT の分解能より細かくなり、連続したスペクトルに見える
音にする
音は、保持した出力を標本の間隔ごとに平均して作ります(区間の積分)。そのため、クロックが標本化周波数より速くても、折り返しが小さくなります。平均で小さくなる分も含めて実効値をそろえ、1 周期の平均(直流)は引きます。
スペクトラムの表示
スペクトラムは、Welch 法で求めたパワースペクトル密度です[14]。1 Hz あたりの dBFS で表します。
- 直近の 点半分ずつ重ねた区間
- ハン窓区間ごとに掛ける
- FFT
- パワーを平均
- 等価雑音帯域幅で割るdBFS/Hz
- 傾き: 25 Hz〜20 kHz の 1/3 オクターブ帯ごとの平均を dB にし、 に対して最小 2 乗で直線を当てはめた値
- 破線の参照線: 色のノイズでは、1 kHz で生成器の理論の値に合わせた理想の傾き(グレーは目標の形)。ベルベットと LFSR では理論のスペクトル
- 表示する信号: 鳴らしている間は AudioWorklet が出している音そのもの。止めている間は、同じ生成器を表示のために回したもの
出典
- フルスケールの振幅の定義Audio Engineering Society, AES17-2020 AES standard method for digital audio engineering — Measurement of digital audio equipment
- xorshift128G. Marsaglia, “Xorshift RNGs,” Journal of Statistical Software, vol. 8, no. 14, 2003
- 正規分布の乱数(Box–Muller 法)G. E. P. Box and M. E. Muller, “A Note on the Generation of Random Normal Deviates,” The Annals of Mathematical Statistics, vol. 29, no. 2, pp. 610–611, 1958
- P. Kellett のフィルタの精密版の係数、J. McCartney の方式R. Whittle, “DSP generation of Pink (1/f) Noise”
- Voss の方式M. Gardner, “Mathematical Games: White and brown music, fractal curves and one-over-f fluctuations,” Scientific American, vol. 238, no. 4, pp. 16–32, 1978
- A 特性IEC 61672-1:2013, Electroacoustics — Sound level meters — Part 1: Specifications
- ベルベットノイズM. Karjalainen and H. Järveläinen, “Reverberation Modeling Using Velvet Noise,” AES 30th International Conference, 2007
- ベルベットノイズV. Välimäki, H.-M. Lehtonen, and M. Takanen, “A Perceptual Study on Velvet Noise and Its Variants at Different Pulse Densities,” IEEE Transactions on Audio, Speech, and Language Processing, vol. 21, no. 7, pp. 1481–1488, 2013
- M 系列の周期と自己相関S. W. Golomb, Shift Register Sequences, Holden-Day, 1967
- NESNESdev Wiki “APU Noise”
- 3〜32 ビットの最大周期のタップ(表 3)P. Alfke, “Efficient Shift Registers, LFSR Counters, and Long Pseudo-Random Sequence Generators,” Xilinx XAPP052, 1996
- ゲームボーイの NR43 と LFSRPan Docs “Audio Registers”・“Audio Details”
- SN76489 とセガの互換品SMS Power! “SN76489”
- Welch 法P. D. Welch, “The use of fast Fourier transform for the estimation of power spectra: A method based on time averaging over short, modified periodograms,” IEEE Transactions on Audio and Electroacoustics, vol. 15, no. 2, pp. 70–73, 1967
このツールで決めたこと
- ピンクの 2 つの作り方の、1/f からのずれの値。このツールで周波数応答から求めた
- グレーの形(20 Hz の高域通過)とフィルタの係数
- 「最大周期の表」のタップが最大周期になることは、このツールのテストで確かめている