共有回帖数  0  个 
	 
	
	
	
     
          
          
               
				
			 
				
					 
 
            
				   - 
						
						
							 
									
  
  
 本文是一篇对Gammatone滤波器组(Gammatone Filter Bank)的介绍,总结了此主题下的几篇重要论文(Darling-1991, Slaney-1993, Ellis-2009, 见末尾的引用部分)。
 
 
 0. 前言
 
 
 0.1 Gammatone滤波器组是干什么的?
 一种在语音识别、语音分析领域中常用的时频转换方法,作用类似短时傅立叶变换(STFT),但Gammatone滤波器组(以下简称GTF滤波器组)结合了人耳的听觉特性。它是一种听觉滤波器组(Auditory Filter Bank)。基于GTF的语音识别系统能获得较高的准确度。
 
 
 0.2 这篇文章有什么用?
 本文主要是因为网上鲜有此类总结性的文章而写。省略了繁杂的推导,着重于应用。如果你在做语音科学或音频处理方面的研究,但愿本文能帮你节省一些读论文的时间。
 
 
 0.3 学习这篇文章需要哪些基础知识?
 这篇文章并不是面向大众的科普,然而个人完全能够从网络上习得这些基础知识:
 
 
 需要数字信号处理(DSP)基础,我个人推荐Coursera上EPFL的DSP课(https://www.coursera.org/course/dsp),或者CCRMA的Spectral Audio Signal Processing(https://ccrma.stanford.edu/~jos/sasp/)一书;
 最好会使用Matlab或Octave;
 最好掌握一些单变量微积分;
 最好了解一些音频处理,会很有帮助(例如Coursera上UPF的ASPMA课(https://www.coursera.org/course/audio))。
 
 
 0.4 声明
 作者本人买不起Matlab,所以这篇文章中所有的Matlab代码都是在GNU Octave(http://www.gnu.org/software/octave/)上测试运行的,本人不保证代码不经修改即可在Matlab上执行。
 1. 概念 - 什么是滤波器组?
 
 顾名思义,一个滤波器组(Filter Bank)就是一组(n个)滤波器,对同一个信号进行滤波,输出n个同步的信号。我们可以给每个滤波器指定不同的响应函数、中心频率、增益、带宽。
 
 假如一个滤波器组中各个滤波器的频率按升序排列,各集中在不同的频率,且滤波器数量足够多,我们可以计算出在不同时间的各个输出信号的短时能量,画成一串功率频谱(Power Spectrum),或连起来成为声谱图(Spectrogram)。
 
  
 
  
 
  
 其中,
 * c - 调节比例的常数;
 * n - 滤波器级数(order),一般取4;
 * b - 衰减速度,取值为正数,b越大衰减越快,脉冲响应长度越短;
 * f0 - 中心频率,当f0 = 0,此时的GTF称为一个基带GTF(Base Band Gammatone Filter);
 * ɸ - 相位,由于人耳对相位不敏感,可以省略;
 * 这是连续时间下的定义,所以t单位为秒,f0单位为Hz,对于离散时间只需采样即可。
 
 
 我们可以看到,时域上GTF就是一个Gamma分布乘上一个余弦信号,所以叫做“Gammatone”。也可以理解成一个余弦信号把这个Gamma分布调制到f0这个频率上。
 
 下图是一个GTF脉冲响应的时域信号:
 
  
 
  
 
  
 
  
 2.3 ERB带宽和3分贝带宽
 2.3.1 GTF的等效矩形带宽
 等效矩形带宽(Equivalent Rectangular Bandwidth)指一种矩形带通滤波器的带宽,这中矩形带通滤波器的高度和某个特定滤波器的功率谱最大值相同,且通带功率和这个特定滤波器的功率相同。
 
 
 换句话说,给定一个任意的功率谱,可以计算出一个等效矩形滤波器,这个矩形带通滤波器的增益就是给定功率谱的最大值,而该矩形滤波器的功率谱的总和和给定功率谱的总和相同。在这个条件下,可以计算出矩形滤波器的带宽,这就是ERB。
 
  
 这很棒,因为对于一个给定的阶数n,ERB仅依赖于b,且关系是线性的。当n为4时,ERB = 0.98175b。我们也可以从一个给定的ERB求出b:
  
 
 我们稍后会看到,ERB和人耳的听觉特性有关联。上述转换关系的作用是,我们可以用它方便地针对人耳听觉特性设计出合适的GTF滤波器,这是十分有用的。
 
 
 2.3.2 GTF滤波器的3分贝带宽
 以信号幅度递减一半(相当于减弱3分贝)为标准,GTF滤波器的带宽近似于,
  
 
 n=4时相当于
  
 
 
 
 由于GTF频率响应的非对称性(见2.2),我们无法求出准确的3分贝带宽。
 2.4 FIR实现
 GTF滤波器的最简易实现方法是按照脉冲响应的定义,在时域生成离散的脉冲响应,作为FIR对输入信号滤波:
 
 
 
 g = @(t, f0, erb) t .^ 3 .* exp(- 2 * pi * 1.019 * erb * t) .* cos(2 * pi * f0 * t);
 h = g((0:1 / fs:signal_length / fs)', central_freq, band_width);
 y = filter(h, 1, x); % y = filter(B, A, x);
 y = conv(h, x); % 相当于和输入信号卷积
 
 
 这里省略了比例常数c,我们将稍后讨论增益如何控制的问题。
 由于脉冲响应的衰减很快,可以截取h,仅保留值较大的部分,可采用典型的窗函数法设计FIR滤波器。这样的好处是节省计算量,然而对于f0较低的情况,脉冲响应的衰减很慢,计算开销很难避免。对于GTF滤波器,FIR实现方式的计算开销平均比IIR实现慢了两个数量级,所以实际应用中FIR采用得较少。
 
  
 
  
 ERB频率计算的matlab实现(这里cf取20):
 
 function CF = make_erb_freqs(fs, n_channel)
 SF = 1 / n_channel * 9.26 * (log(fs + 228.7) - log(20 + 228.7));
 CF = - 228.7 + (fs + 228.7) ./ exp(0.108 * (1:n_channel)' * SF);
 end
 function ERB = erb_bandwidth(f0)
 B = 24.7 * (0.00437 * f0 + 1);
 end
 
 
 测试运行:
 octave:1 make_erb_freqs(8000, 10)'
 ans =
 Columns 1 through 7:
 5570.511 3858.317 2651.639 1801.227 1201.895 779.512 481.836
 Columns 8 through 10:
 272.047 124.198 20.000
 octave:2 erb_bandwidth(ans)
 ans =
 Columns 1 through 8:
 626.267 441.365 311.054 219.217 154.494 108.881 76.734 54.079
 Columns 9 and 10:
 38.112 26.860
 楼主 2015-10-10 13:06 回复 
 
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知