無線機の特性試験の試験方法に登場する「疑似音声信号発生器」を WebAudio で実現します。
「擬似音声発生器は、白色雑音をITU-T勧告G.227の特性を有するフィルタによって帯域制限したものとする。」
WebAudio で音声を生成しています。白色雑音を生成するために AudioWorkletNode を使用しています(主要ブラウザで広くサポート)。
注意: AudioWorklet は HTTPS 環境または localhost でのみ動作します。
実際の無線機測定に使用する場合は、以下のガイドを参照してください:
- 測定器としての使用ガイド - DAC選定、校正方法、セットアップ手順
ITU-T G.227 記載のアナログフィルタを双一次変換してデジタルIIRフィルタとし、さらにFIRで補正しています。係数の算出は以下の通り Jupyter Notebook で行いました。
理論特性に対する誤差(RMSE):
| 帯域 | 44100Hz | 48000Hz |
|---|---|---|
| 10Hz〜ナイキスト | 0.024 dB (0.27%) | 0.021 dB (0.25%) |
| G.227 Figure 2 範囲 (50Hz-10kHz) | 0.002 dB (0.03%) | 0.002 dB (0.02%) |
| 電話音声帯域 (300Hz-3.4kHz) | 0.002 dB (0.02%) | 0.001 dB (0.02%) |
帯域別総パワー誤差(理論値とのエネルギー比):
| 帯域 | 44100Hz | 48000Hz |
|---|---|---|
| 10Hz〜ナイキスト | -0.0001 dB (-0.003%) | -0.0001 dB (-0.003%) |
| G.227 Figure 2 範囲 (50Hz-10kHz) | -0.0001 dB (-0.003%) | -0.0001 dB (-0.003%) |
| 電話音声帯域 (300Hz-3.4kHz) | +0.0002 dB (+0.004%) | +0.0002 dB (+0.004%) |
White Noise → IIR Filter → FIR Filter → Output
Generator (4th order) (Correction)
| | |
AudioWorklet coeffs.iir coeffs.fir
ホワイトノイズ生成には Box-Muller変換 を使用し、正規分布に従う高品質な雑音を生成しています:
すべてのフィルタ係数は coeffs.json に事前計算済みで格納されています(44100Hz / 48000Hz 対応):
{
"44100": {
"iir": { "num": [...], "den": [...] },
"fir": [...]
},
"48000": { ... }
}係数の再生成は scripts/generate_coeffs.py で行えます。
const sr = audioContext.sampleRate; // 44100 or 48000
const c = coeffs[sr];
// IIRフィルタ (4次)
const iirFilter = audioContext.createIIRFilter(c.iir.num, c.iir.den);
// FIRフィルタ (畳み込み)
const firFilter = audioContext.createConvolver();
// c.fir をインパルス応答として設定この2段階のフィルタリングにより、ITU-T G.227の理論特性を高精度で実現しています。
- 別表第三十五 証明規則第2条第1項第12号に掲げる無線設備の試験方法 (アマチュア無線機の試験方法)
- ITU-T Recommendation G.227
