「え、音って周波数ごとに分解できるの?」
「なんで同じ60dBなのに、A特性とC特性で数値が違うの?」
答えは「人間の耳は周波数によって感度が違うから」 です。
たとえば、エアコンの室外機の「ブーン」という低音(125Hz)と、金属を叩く「キーン」という高音(4kHz)。同じ大きさの音でも、人間には高音のほうが「うるさく」感じます。この感覚の差を数値化するのが、オクターブバンド騒音解析です。
今回解説するのは、ブラウザ上でリアルタイム計算できるオクターブバンド騒音解析シミュレーター。ただの計算機ではありません。9つの周波数帯域の入力から、A特性・C特性補正、Zwicker騒音度、NC曲線適合チェックまでを一発で評価します。
この記事では、数式の導出からJavaScript実装、現実の測定データでの検証、現場の落とし穴までを完全解説します。
ざっくり本質——騒音を「レントゲン写真」で診断する
普通の騒音計は、全体の大きさ(総合音圧レベル)しか教えてくれません。これは「熱があるかどうか」だけを測る体温計のようなもの。
一方、オクターブバンド分析は、周波数ごとに音を分解して診断するレントゲン写真です。
「騒音は、どの周波数帯が問題か」を知らなければ、正しい対策は打てない
たとえば、工場の騒音が「低周波(63-250Hz)が卓越」しているのか、「高周波(1k-4kHz)が卓越」しているのかで、対策がまったく変わります。
- 低周波が問題 → 振動対策(防振ゴム、質量付加)
- 高周波が問題 → 吸音対策(グラスウール、多孔質材)
このシミュレーターの9つのスライダーを動かすだけで、どの帯域が問題か、どのくらい削れば基準を満たせるかが一目でわかります。
数式で理解する——補正と総合レベルの計算
基本の式:音圧レベル(dB)の定義
ある周波数帯域の音圧レベル $L_i$ [dB] は、基準音圧 $p_0 = 20,\mu\text{Pa}$ に対して:
L_i = 20 \log_{10} \left( \frac{p_i}{p_0} \right)
A特性・C特性補正
人間の聴感特性を模した重み付け。各中心周波数 $f_c$ に対して補正値 $A(f_c), C(f_c)$ がISO 226で定義されています。
補正後の音圧レベル:
L_{A,i} = L_i + A(f_{c,i})
L_{C,i} = L_i + C(f_{c,i})
※補正値は周波数ごとに異なり、A特性は低周波を大きく減衰(-39.4dB @ 31.5Hz)、C特性は低周波をほぼフラットにします。
総合音圧レベル(エネルギー加算)
複数の帯域の音圧レベルを合成するには、エネルギー(パワー)で加算します。対数スケールのdBを一旦リニアなパワー比率に戻し、合計してから再びdBに変換:
L_{\text{total}} = 10 \log_{10} \left( \sum_{i=1}^{9} 10^{L_i / 10} \right)
これが最も重要な式です。直感的には「一番大きい帯域が支配的」ですが、複数の帯域が同程度のレベルだと、合計は各帯域より2〜3dB大きくなります。
Zwicker騒音度(sone)の近似計算
厳密なZwickerラウドネスは臨界帯域とマスキング効果を考慮しますが、このシミュレーターでは簡易的に以下の関係を用いています:
S = 2^{(L_{\text{total,A}} - 40) / 10}
- $S$ が1 sone = 40 phon(40dBの1kHz純音と同じうるささ)
- 10dB上がるとラウドネスが2倍($S$ が2倍)
NC曲線適合チェック
NC(Noise Criteria)曲線は、各周波数帯域の許容最大値を定義します。NC-30の場合、各帯域の上限値は以下の近似式で与えられます:
\text{NC\_limit}(f) = a \cdot \log_{10}(f) + b
(係数 $a, b$ はNC値と周波数帯域ごとに異なる)
適合判定は単純:すべての帯域で $L_i \leq \text{NC_limit}(f_{c,i})$ なら合格。
コードで実装する——JavaScriptで再現
それでは、シミュレーターの核心計算をJavaScriptで実装します。ブラウザの開発者コンソールでそのまま動かせます。
/**
* オクターブバンド騒音解析 核心計算
* 9つの帯域(31.5, 63, 125, 250, 500, 1k, 2k, 4k, 8k Hz)を入力
*/
// 1. 中心周波数とA特性・C特性補正値(ISO 226準拠)
const BANDS = [
{ fc: 31.5, A: -39.4, C: -3.0 },
{ fc: 63, A: -26.2, C: -0.8 },
{ fc: 125, A: -16.1, C: -0.2 },
{ fc: 250, A: -8.6, C: 0.0 },
{ fc: 500, A: -3.2, C: 0.0 },
{ fc: 1000, A: 0.0, C: 0.0 },
{ fc: 2000, A: 1.2, C: -0.2 },
{ fc: 4000, A: 1.0, C: -0.8 },
{ fc: 8000, A: -1.1, C: -3.0 }
];
// 2. 総合音圧レベル計算(エネルギー加算)
function calcTotalLevel(levels) {
// levels: 各帯域のdB値の配列(長さ9)
const sumPower = levels.reduce((acc, L) => {
return acc + Math.pow(10, L / 10);
}, 0);
return 10 * Math.log10(sumPower);
}
// 3. A特性・C特性補正後の総合レベル
function calcWeightedTotal(levels, weightType) {
const weighted = levels.map((L, i) => {
const correction = weightType === 'A' ? BANDS[i].A : BANDS[i].C;
return L + correction;
});
return calcTotalLevel(weighted);
}
// 4. Zwicker騒音度(簡易版)
function calcZwickerSone(LA_total) {
// LA_total: A特性総合音圧レベル [dBA]
return Math.pow(2, (LA_total - 40) / 10);
}
// 5. NC曲線適合チェック(NC-30の例)
function checkNCCompliance(levels, ncTarget) {
// NC曲線の上限値(簡易近似:実測値に近い係数)
const ncLimits = {
31.5: ncTarget - 10,
63: ncTarget - 5,
125: ncTarget - 2,
250: ncTarget,
500: ncTarget + 2,
1000: ncTarget + 3,
2000: ncTarget + 2,
4000: ncTarget,
8000: ncTarget - 2
};
const results = levels.map((L, i) => {
const limit = ncLimits[BANDS[i].fc];
return {
fc: BANDS[i].fc,
level: L,
limit: limit,
pass: L <= limit
};
});
const allPass = results.every(r => r.pass);
return { allPass, details: results };
}
// ---- 実行例 ----
const inputLevels = [65, 62, 58, 55, 52, 50, 48, 45, 42]; // 各帯域のdB値
console.log('入力レベル [dB]:', inputLevels);
console.log('総合音圧レベル:', calcTotalLevel(inputLevels).toFixed(1), 'dB');
console.log('A特性総合:', calcWeightedTotal(inputLevels, 'A').toFixed(1), 'dBA');
console.log('C特性総合:', calcWeightedTotal(inputLevels, 'C').toFixed(1), 'dBC');
const LA_total = calcWeightedTotal(inputLevels, 'A');
console.log('Zwicker騒音度:', calcZwickerSone(LA_total).toFixed(2), 'sone');
const ncResult = checkNCCompliance(inputLevels, 30);
console.log('NC-30適合:', ncResult.allPass ? '✅ 合格' : '❌ 不合格');
ncResult.details.forEach(r => {
console.log(` ${r.fc}Hz: ${r.level}dB / 上限${r.limit}dB ${r.pass ? 'OK' : 'NG'}`);
});
実行結果の例:
入力レベル [dB]: [65, 62, 58, 55, 52, 50, 48, 45, 42]
総合音圧レベル: 68.0 dB
A特性総合: 60.2 dBA
C特性総合: 67.6 dBC
Zwicker騒音度: 4.29 sone
NC-30適合: ❌ 不合格
31.5Hz: 65dB / 上限20dB NG ← 低周波が大幅超過!
63Hz: 62dB / 上限25dB NG
...
注目すべき点:
- 総合レベル68dBなのに、A特性は60.2dBAと約8dB低い → 低周波が支配的だから
- C特性は67.6dBCと総合レベルに近い → C特性は低周波を減衰しない
- NC-30には程遠い → この騒音は「低周波の多い」環境騒音
数値例で確かめる——実際の測定データで検証
実際の工場騒音測定データを使って検証してみましょう。
測定条件:変圧器室(トランスから1m、床上1.5m、暗騒音補正済み)
| 周波数 [Hz] | 測定値 [dB] |
|---|---|
| 31.5 | 72 |
| 63 | 68 |
| 125 | 63 |
| 250 | 58 |
| 500 | 55 |
| 1000 | 52 |
| 2000 | 48 |
| 4000 | 44 |
| 8000 | 40 |
計算過程:
-
総合音圧レベル:
L_{\text{total}} = 10 \log_{10} (10^{7.2} + 10^{6.8} + 10^{6.3} + 10^{5.8} + 10^{5.5} + 10^{5.2} + 10^{4.8} + 10^{4.4} + 10^{4.0})各項を計算:
- 31.5Hz: $10^{7.2} = 1.58 \times 10^7$
- 63Hz: $10^{6.8} = 6.31 \times 10^6$
- 125Hz: $10^{6.3} = 2.00 \times 10^6$
- 250Hz: $10^{5.8} = 6.31 \times 10^5$
- 500Hz: $10^{5.5} = 3.16 \times 10^5$
- 1kHz: $10^{5.2} = 1.58 \times 10^5$
- 2kHz: $10^{4.8} = 6.31 \times 10^4$
- 4kHz: $10^{4.4} = 2.51 \times 10^4$
- 8kHz: $10^{4.0} = 1.00 \times 10^4$
合計:$2.53 \times 10^7$
L_{\text{total}} = 10 \log_{10} (2.53 \times 10^7) = 10 \times 7.403 = 74.0 \text{ dB} -
A特性補正後の各帯域:
周波数 測定値 A補正 補正後 31.5 72 -39.4 32.6 63 68 -26.2 41.8 125 63 -16.1 46.9 250 58 -8.6 49.4 500 55 -3.2 51.8 1k 52 0.0 52.0 2k 48 1.2 49.2 4k 44 1.0 45.0 8k 40 -1.1 38.9 A特性総合:$10 \log_{10} (10^{3.26} + 10^{4.18} + ... + 10^{3.89}) = 57.4 \text{ dBA}$
-
C特性補正後の各帯域:
C特性は低周波をほとんど減衰しないため、C特性総合は73.8 dBC(総合レベルに近い) -
結果の解釈:
- L_total = 74.0 dB(物理的な大きさ)
- L_A = 57.4 dBA(人間の聴感では「意外と静か」)
- L_C = 73.8 dBC(低周波が強い証拠)
- L_C - L_A = 16.4 dB → 低周波が極めて卓越
「耳にはあまり響かないけど、体に圧迫感がある」 という変圧器室の典型的な特徴が数値に現れています。
シミュレーターで遊ぶ——3つの実験
実験1:低周波 vs 高周波、同じ総合レベルでもA特性が違う
設定:
- ケースA:31.5Hzだけ80dB、他は50dB
- ケースB:4kHzだけ80dB、他は50dB
結果:
- ケースA:L_total ≈ 80dB, L_A ≈ 41dBA(低周波はA特性で大幅カット)
- ケースB:L_total ≈ 80dB, L_A ≈ 81dBA(高周波はA特性で増幅)
なぜ? → A特性は31.5Hzで-39.4dBも減衰するのに対し、4kHzでは+1.0dB。同じ80dBでも、高周波のほうが人間には「約40dBも大きく」聞こえる。
実験2:NC曲線を突破する帯域を特定する
設定:
- すべての帯域をNC-30の上限値ギリギリに設定
- 125Hzだけ+5dBする
結果:
- 125HzがNC-30曲線を超える → 不合格
- 他の帯域はすべて合格ライン内
現場での意味:NC曲線は「1つでも超えたらアウト」。125Hzの+5dBをどう削るかが対策の焦点になります。この帯域は空調ダクトの共鳴周波数に一致することが多く、ダクトサイズ変更や消音器設置の判断材料に。
実験3:Zwicker騒音度の非線形性を体感
設定:
- 全帯域40dB(均一)→ L_A ≈ 40dBA → 1 sone(基準)
- 全帯域50dB(+10dB)→ L_A ≈ 50dBA → 2 sone(2倍!)
なぜ? → Zwicker騒音度は $S = 2^{(L_A - 40)/10}$。10dB上がるとラウドネスが2倍になるという非線形性を表現しています。つまり、「10dB大きい」=「2倍うるさい」。
現場でハマるポイント——3つの落とし穴
1. 「総合レベルが小さい=静か」は間違い
低周波が卓越した騒音では、総合レベルが70dBでもA特性では50dBA程度。人間の耳には「静か」でも、体には振動として感じられる。
対策:必ずA特性とC特性の差(L_C - L_A)を確認。10dB以上差があれば低周波対策が必要。
2. 1つの帯域を10dB上げても総合レベルは1dBしか変わらない
すべての帯域が60dBの状態で、125Hzだけ70dBにすると:
- 総合レベル:60.4dB → 61.4dB(たった1dB)
- しかし、NC曲線はこの1dBで突破される
教訓:「たかが1dB」と軽視してはいけない。特にNC曲線適合が求められる設計では、各帯域の細かい調整が合否を分ける。
3. GIGO(ゴミを入ればゴミが出る)
このシミュレーターは入力された9つの値が正しいことが全ての前提。
- 騒音計のマイク向きを間違えると、特に高周波で誤差大
- 風防なしで屋外測定すると、低周波に風雑音が混入
- 暗騒音の補正を忘れると、特に低レベル帯域で過大評価
実務の鉄則:測定前に校正、測定後に暗騒音補正、そして複数回測定して再現性を確認。
まとめ——騒音対策の「解像度」を上げる
- オクターブバンド分析は「騒音のレントゲン写真」:全体の大きさだけでなく、どの周波数帯が問題かを特定できる
- A特性とC特性の差が低周波騒音の指標:差が大きいほど「体に響く騒音」
- NC曲線は「1つでも超えたらアウト」の厳格な設計基準:どの帯域を削るかが対策の核心
- Zwicker騒音度は「うるささ」を2倍則で表現:10dB上がるとラウドネス2倍
そして、理論を実践に移す最強のツールがこれ:
▶ オクターブバンド騒音解析シミュレーター
ブラウザで即動作、登録不要。9つのスライダーを動かすだけで、A特性・C特性・Zwicker騒音度・NC曲線適合がリアルタイムに計算されます。
「騒音対策の費用対効果を最大化したい」「設計段階で問題を先取りしたい」——そんなエンジニアに、ぜひ使ってほしいツールです。
NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら