オクターブバンドの中心周波数と帯域

目次

オクターブバンド

オクターブバンドの比率

オクターブバンドの中心周波数は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.531.62322.38744.668
6363.09644.66889.125
125125.8989.125177.83
250251.19177.83354.81
500501.19354.81707.95
10001000.0707.951412.5
20001995.31412.52818.4
40003981.12818.45623.4
80007943.35623.411220
16000158491122022387

1/3オクターブバンド

公称中心周波数[Hz]厳密な中心周波数[Hz]下端周波数[Hz]上端周波数[Hz]
2525.11922.38728.184
31.531.62328.18435.481
4039.81135.48144.668
5050.11944.66856.234
6363.09656.23470.795
8079.43370.79589.125
100100.0089.125112.20
125125.89112.20141.25
160158.49141.25177.83
200199.53177.83223.87
250251.19223.87281.84
315316.23281.84354.81
400398.11354.81446.68
500501.19446.68562.34
630630.96562.34707.95
800794.33707.95891.25
10001000.0891.251122.0
12501258.91122.01412.5
16001584.91412.51778.3
20001995.31778.32238.7
25002511.92238.72818.4
31503162.32818.43548.1
40003981.13548.14466.8
50005011.94466.85623.4
63006309.65623.47079.5
80007943.37079.58912.5
10000100008912.511220
12500125891122014125
16000158491412517783
20000199531778322387

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))

まとめ

本記事では、オクターブバンドの中心周波数とその帯域について解説しました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次