Bark频带

一个临界频带的“距离”通常称为一个Bark,频率(Hz)映射到Bark公式:
z ( f ) = 13 × t a n − 1 ( 0.00076 × f ) + 3.5 × t a n − 1 [ ( f 7500 ) 2 ] (Bark) z(f)=13\times tan^{-1}(0.00076\times f)+3.5\times tan^{-1}[(\frac{f}{7500})^2]\tag{Bark} z(f)=13×tan1(0.00076×f)+3.5×tan1[(7500f)2](Bark)
对于每个临界频带的频宽也可以从下式中求得:
B W c ( f ) = 25 + 75 × [ 1 + 1.4 × ( f 1000 ) 2 ] 0.69 (Hz) BW_c(f)=25+75\times [1+1.4\times (\frac{f}{1000})^2]^{0.69}\tag{Hz} BWc(f)=25+75×[1+1.4×(1000f)2]0.69(Hz)
另外,Bark频带到频率的映射可以由下式估计出来:
f = b × ( e 0.219 × b 352 + 0.1 ) − 0.032 × e − 0.15 × ( b − 5 ) 2 (kHz) f=b\times (\frac{e^{0.219\times b}}{352}+0.1)-0.032\times e^{-0.15\times (b-5)^2}\tag{kHz} f=b×(352e0.219×b+0.1)0.032×e0.15×(b5)2(kHz)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 滤波器组个数
nfilt = 22
# 48000KHz
sample_rate = 48000
NFFT = sample_rate
freq_48 = np.array(range(0, int(sample_rate/2), 1))
Bark_freq = 13*np.arctan(0.00076*freq_48)+3.5*np.arctan((freq_48/7500)**2)
low_freq_bark = 0
high_freq_bark = 13*np.arctan(0.00076*sample_rate/2)+3.5*np.arctan((sample_rate/2/7500)**2)
bark_points = np.linspace(low_freq_bark, high_freq_bark, nfilt + 2)
# print(len(bark_points))

hz_points = np.zeros([24])
for i in range(24):
    hz_points[i] = 1000 * bark_points[i] * (pow(np.e, 0.219 * bark_points[i]) / 352. + 0.1) - 0.032 * pow(np.e, -0.15 * pow(bark_points[i] - 5, 2))
print(hz_points)

bin = np.floor((NFFT + 1) * hz_points / sample_rate)

fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))
for m in range(1, nfilt + 1):
    f_m_minus = int(bin[m - 1])   # left
    f_m = int(bin[m])             # center
    f_m_plus = int(bin[m + 1])    # right

    for k in range(f_m_minus, f_m):
        fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])  # 等高
        # fbank[m - 1, k] = fbank[m - 1, k] * 2 / (bin[m+1] - bin[m - 1])  # 等面积
    for k in range(f_m, f_m_plus):
        fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
        # fbank[m - 1, k] = fbank[m - 1, k] * 2 / (bin[m + 1] - bin[m-1])
plt.figure(1)
for i in range(0, nfilt):
 plt.plot(range(0, 24001), fbank[i])

plt.figure(2)
plt.plot(freq_48, Bark_freq)
plt.ylabel("Bark-frequency")
plt.xlabel("frequency")
plt.title("Frequency to Bark-frequency")
plt.grid()

plt.figure(3)
plt.plot(bark_points, hz_points)
plt.ylabel("Frequency-Bark")
plt.xlabel("Bark")
plt.title("Bark-frequency to Frequency")
plt.grid()
plt.show()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值