オクターブバンド
オクターブバンドの比率
オクターブバンドの中心周波数はIEC 61260-1:2014によって規格化されています。
base-10, base-2が存在しますが、多くの音響機器ではbase-10が採用されているようです。base-10において、1オクターブあたりの比率Gは以下の式で定義されています。
$$G = 10^{(3/10)} \approx 1.995262$$
base-2の場合は、\(G = 2\)として定義されています。
中心周波数の定義
IEC 61260-1:2014における中心周波数の定義は下記のようになっています。
bが奇数の場合は、
$$f_m = f_r G^{x/b}$$
で定義され、bが偶数の場合は次の式で定義されます。
$$f_m = f_r G^{(2x + 1)/2b}$$
ここで、\(f_r\)は基準周波数を表します。bはオクターブの分割数を表しb=1なら1オクターブバンド, b=3なら1/3オクターブバンドということになります。\(x\)は任意の整数を表します。つまり、オクターブバンド系列のインデックスです。ここで、基準周波数\(f_r\)は1000Hzとしてバンド系列が定義されています。
オクターブの帯域端周波数
1オクターブとは上記の比率Gで定義されています。base-2の場合は2倍、base-10の場合は1.995262倍ということです。
オクターブバンドは中心周波数\(f_c\)を基準に、上下端が対数軸上で等距離になるように定義されています。対数周波数軸で見たときに、中心周波数と下端の距離 = 中心周波数と上端の距離 です。
このことからバンド幅の対称性条件が決まります。
中心周波数\(f_c\), 下端を\(f_l\)、上端を\(f_u\)とすると、対数軸で対象というのは
$$\log_{10}(f_c) – \log_{10}(f_l) = \log_{10}(f_u) – \log_{10}(f_c)$$
となります。これを整理すると
$$\frac{f_c}{f_l} = \frac{f_u}{f_c}$$
となります。
ここで、バンド全体の幅は、比率Gで定義されています。このことを使って、
$$\frac{f_u}{f_l} = G^{1/b}$$
となります。
これら、二つの条件を使って方程式を解くと
$$f_u = f_c \sqrt{G^{1/b}}$$
$$f_l = \frac{f_c}{\sqrt{G^{1/b}}}$$
実際の数値例
オクターブバンド
公称中心周波数[Hz] | 厳密な中心周波数[Hz] | 下端周波数[Hz] | 上端周波数[Hz] |
31.5 | 31.623 | 22.387 | 44.668 |
63 | 63.096 | 44.668 | 89.125 |
125 | 125.89 | 89.125 | 177.83 |
250 | 251.19 | 177.83 | 354.81 |
500 | 501.19 | 354.81 | 707.95 |
1000 | 1000.0 | 707.95 | 1412.5 |
2000 | 1995.3 | 1412.5 | 2818.4 |
4000 | 3981.1 | 2818.4 | 5623.4 |
8000 | 7943.3 | 5623.4 | 11220 |
16000 | 15849 | 11220 | 22387 |
1/3オクターブバンド
公称中心周波数[Hz] | 厳密な中心周波数[Hz] | 下端周波数[Hz] | 上端周波数[Hz] |
25 | 25.119 | 22.387 | 28.184 |
31.5 | 31.623 | 28.184 | 35.481 |
40 | 39.811 | 35.481 | 44.668 |
50 | 50.119 | 44.668 | 56.234 |
63 | 63.096 | 56.234 | 70.795 |
80 | 79.433 | 70.795 | 89.125 |
100 | 100.00 | 89.125 | 112.20 |
125 | 125.89 | 112.20 | 141.25 |
160 | 158.49 | 141.25 | 177.83 |
200 | 199.53 | 177.83 | 223.87 |
250 | 251.19 | 223.87 | 281.84 |
315 | 316.23 | 281.84 | 354.81 |
400 | 398.11 | 354.81 | 446.68 |
500 | 501.19 | 446.68 | 562.34 |
630 | 630.96 | 562.34 | 707.95 |
800 | 794.33 | 707.95 | 891.25 |
1000 | 1000.0 | 891.25 | 1122.0 |
1250 | 1258.9 | 1122.0 | 1412.5 |
1600 | 1584.9 | 1412.5 | 1778.3 |
2000 | 1995.3 | 1778.3 | 2238.7 |
2500 | 2511.9 | 2238.7 | 2818.4 |
3150 | 3162.3 | 2818.4 | 3548.1 |
4000 | 3981.1 | 3548.1 | 4466.8 |
5000 | 5011.9 | 4466.8 | 5623.4 |
6300 | 6309.6 | 5623.4 | 7079.5 |
8000 | 7943.3 | 7079.5 | 8912.5 |
10000 | 10000 | 8912.5 | 11220 |
12500 | 12589 | 11220 | 14125 |
16000 | 15849 | 14125 | 17783 |
20000 | 19953 | 17783 | 22387 |
python スクリプト
import numpy as np
def get_octave_ratio(base):
if base == 10:
return 10 ** (3.0 / 10.0)
elif base == 2:
return 2.0
else:
raise ValueError(f"Unknown base: {base}")
def octave_band_center_frequencies(fmin=20, fmax=20000, fractional=1, fr=1000.0):
"""
IEC 61260-1:2014 (base-10) に基づいて中心周波数を計算
"""
G = 10**(3/10) # 1オクターブあたりの比率
x = np.arange(-50, 50)
if fractional % 2 == 0: # 偶数
freqs = fr * G**((2*x+1)/(2*fractional))
else: # 奇数
freqs = fr * G**(x/fractional)
return np.array([f for f in freqs if fmin <= f <= fmax])
def band_edges(fc, b=1):
"""中心周波数から下限・上限を求める"""
G = 10**(3/10)
fl = fc / (G**(1/(2*b)))
fu = fc * (G**(1/(2*b)))
return fl, fu
if __name__ == "__main__":
print(octave_band_center_frequencies())
print(octave_band_center_frequencies(fractional=3))
print("オクターブバンド")
for fc in octave_band_center_frequencies():
print(fc, band_edges(fc))
print("1/3オクターブバンド")
for fc in octave_band_center_frequencies(fractional=3):
print(fc, band_edges(fc, b=3))
まとめ
本記事では、オクターブバンドの中心周波数とその帯域について解説しました。
コメント