音乐信号处理的方式有很多种,本文分别利用直接型多速率信号处理以及多相分解型多速率信号处理的方式完成了音乐信号的抽样频率转换。并对不同滤波器频率指标、阶数、衰减指标和滤波效果的关系,以及直接型与多相分解性的优劣进行了比较与分析。
一、研究背景
二、直接型多速率信号处理
1.基本原理和实现方法
(1)内插
(2)抽取
2.FIR系统实现与运行结果
(1)系统实现
(2)运行结果
3.IIR系统实现与运行结果
(1)系统实现
(2)运行结果
4.MATLAB仿真程序
二、多相分解型多速率信号处理
1.基本原理和实现方法
(1)子滤波器表达式理论推导
(2)内插的多相分解实现
(3)抽取的多相分解实现
2.FIR系统实现与运行结果
(1)系统实现
(2)运行结果
3.IIR系统设计的问题
4.MATLAB仿真程序
三、比较与分析
1.滤波器频率指标与滤波器阶数
2.滤波器衰减指标对滤波效果的影响
3.直接型与多相分解型多速率系统的速度比较
4.不同采样频率时域频域的变换和解释
5.两种方法的优劣
6.需要注意的小问题
现有一音频信号kdqg24k.wav抽样频率为24kHz,在matlab中用
y=audioread('kdqg24k.wav');
sound(y,16000);
播放该信号,设计一数字系统 ,使得sound(y,16000)可播放出正常的音频信号;讨论滤波器的频率指标(Ws,Wp)、滤波器的衰减指标(As,Ap)、滤波器的的类型(IIR,FIR)等因数对系统的影响。
输入信号的频率由用户决定。由于FPGA硬件资源的限制,我们需要把采样频率改变后再进行处理。多速率信号处理的方法就是上采样和下采样,即抽取和内插。
所谓上采样就是增大采样频率的处理。若输入信号频率为fs,经过上采样后得到L1fs的采样频率。上采样的基本方法是内插。可用以下框图表示:
设原信号为x[k],我们在x[k]每相邻两个点之间补L1-1个0,得到内插后序列v[k]如下:
如图,经过内插以后,在时域上相当于“拉宽”了信号,使信号的点数增多了L1倍。也就是单位时间的输入点数(频率)提高了L1倍。
令x[k],v[k]的DTFT分别为和,则
即,令,则
如图,时域上的展宽对应频域上的压缩,若的周期为2π,则的周期就被压缩为,在内相当于。在原的一个周期内,出现了L1个图像,其中多余的L1-1个图像称为镜像频谱,需要经过一个截频大于的低通滤波器除器,称为内插滤波器。
以下进行内插滤波器的设计,令:
经过如下过程输出上采样后的信号y[k]:
因为
为了保证x[0]=y[0],取C=L,就完成了内插。
有时候输入频率fs太高,我们需要把它的频率降低为。这就是下采样。下采样的基本方法为抽取。基本框图如下:
设原信号为x[k],我们在x[k]每L2-1个点抽取一个作为内插后序列v[k]的样值点,得到v[k]如下:
如图,抽取相当于在时域“压缩”了L2倍。一部分点被删除。
通过教材上的理论推导,记原序列的频谱为,可以得知抽取后序列的频谱为:
即时域上的压缩对应频域上的展宽,很容易得知,频谱的展宽会带来混叠的问题,为了解决这一问题,原序列的频谱为则需要在在区间上满足:
称为倍抽取不混叠的Nyquist条件。为了满足这一条件,需要在抽取之前将原序列通过一个截频为的低通滤波器,称为抽取滤波器。
所以该理想抽取滤波器为:
要注意和上采样不一样,滤波器可能滤去部分频谱而导致失真。不可能通过这个式子还原x[k]。通过滤波器再抽取,就得到了y[k]。
音频信号kdqg24k.wav抽样频率为24kHz,通过对音频信号进行合适的的内插与抽取,使得sound(y,16000)可播放出正常的音频信号。
对于L倍的内插和M倍的抽取,有:
即2倍内插和3倍的抽取,同时以一个滤波器同时起到抽取滤波器和内插滤波器的作用。
音频信号kdqg24k.wav抽样频率为24kHz,通过对音频信号进行合适的的内插与抽取,使得sound(y,16000)可播放出正常的音频信号。
对于L倍的内插和M倍的抽取,有:
即2倍内插和3倍的抽取,同时以一个滤波器同时起到抽取滤波器和内插滤波器的作用。
滤波器的选取上,我们可以选取BW型、CBI型、CBII型、椭圆滤波器。
对于不同的滤波器,我们还可以选取脉冲响应不变法以及双线性变换法以及PM优化算法等。关于IIR的相关比较与实现,在后续实验有较为细致的说明,在本次就不一一列出了。
本实验重点研究FIR中直接型与多相分解型的优劣之处。 FIR实现的仿真代码如下:(源代码缺失了,只剩下了图片=—=)
直接型多速率信号处理在进行内插、抽取时。一会造成很大的资源浪费,二会提高系统计算的复杂度,从而提高对硬件的要求。因此,引出多相分解这种方法来进行系统滤波器组的设计。从而能够更有效的实现系统结构,降低系统的计算复杂度,提高系统的计算效率。
低通滤波的多相分解:
实际上就是将阶数较高、较难实现的滤波器拆分为若干个低阶滤波器组。
设M阶IIR滤波器为
STEP1:令
则
STEP2:令
那么我们得到:
如此则把H(z)分解为一组M个滤波器,构成了滤波器组。
事实上,这里的滤波器组就是原数字滤波器每间隔M个点抽取出来的。例如九阶滤波器h[k]={h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8]},若M=3,则拆分的滤波器为:
h0[k]={ h[0], h[3], h[6] }, h1[k]={ h[1], h[4] ,h[7] },h2[k]={ h[2], h[5], h[8] }。
回到直接型滤波器的实现,如下图
设单位时钟输入一个x[k]数据,频率为fs。经过上采样后样本点变为L1点。则为了稳定输出y[k],单位时间需要完成L1次乘法计算,这需要滤波器单元内的时钟频率为Lfs。并且因为每次运算有L-1个寄存器的数据都为0,只有一个乘法器实际上在工作,造成很大的资源浪费。而多相滤波减少滤波器阶数,恰好可以解决此问题。
采用多相滤波器,先滤波,再内插。结构如图
图示结构为多相滤波的内插实现。每一点原信号输入后分别通过L1个子滤波器(点数为原滤波器的1/L1),再插值后通过L1个点数的寄存器,延时0~L1个时钟后全部输出到 y[k]。这样y[k]在每个时钟的输出为L1点数据,是前面L个时钟的输入的延时叠加。这样滤波器的频率和输入相同,计算速度为fs而且每个运算器都在有效工作,降低运算速度要求。通过滤波器组后的几个输出序列分别为v1,v2,v3,v4,则数据按照如下顺序输出:
L=4时,输出依次进行相加变为y[k]。第一个时钟输出y[k]=v1(0),则第二个时钟y[k]=v1(1)+v2(0),以此类推,第四次输出y[k]=v1(3)+v2(2)+v3(1)+v4(0)。
在实际中,实现的时候需设置L个寄存器,每个时钟高位寄存器把数据传给低一位,然后再和每一个滤波器输出的数据相加存储。最低位寄存器的数据输出到y[k]。
如图所示,采用直接型滤波,输入端输入L2个点,用时L2个输入时钟,才输出一个点。其中L2-1次滤波的结果都倍抽取舍去,白白浪费乘法器资源。我们把上图改成如下等效结构。采用多相滤波器,先抽取,再滤波。
如图,先抽取再滤波,免去了对要舍去的点卷积的无效运算。输入后进入寄存器,延时0~L2个时钟后再抽取。因此这L2个抽取单元实际上处理的数据是输入延时若干个时间后的输入,每个时钟下,都有且仅有一个抽取单元获得了有效值,因此每个时钟都能输入1个点到滤波器。每个滤波器间隔L2个输入时钟才输入一个点,这就让子滤波器的工作频率下降到1/L2。这就节省了乘法器数量和降低工作频率。
我们已知原音频采样频率为24khz,则我们先对信号进行2倍的内插,再进行3倍抽取,就还原了信号。我们利用窗函数设计FIR滤波器。
L=2内插,理想滤波器的指标为:
M=3内插,理想滤波器的指标为:
因此得到的理想滤波器:
和
窗函数可选取汉明窗、布莱克曼窗和凯泽窗。
如选择汉明窗,,。如选择布莱克曼窗,,
凯泽窗选β=2,,基本都可满足需要。按照经验,这里滤波器阶数=10倍的M或L就可以满足要求。但在实验的过程中,发现M=8时的效果会更好。
首先是音乐片段通过滤波组系统的输入输出:
再是信号同样16khz采样率通过系统前后的频谱显示,可以明显看到混叠的消除,具体分析放在最后部分。
分解的前提是将滤波器的阶数分解为抽取、内插的整数倍。而在设计IIR系统设计中,首先滤波器的阶数通常与FIR相比较低。此外,IIR滤波器的阶数是由阻带和通带指标而确定的,很难将由通带、阻带确定下来的滤波器阶数正确分解成抽取、内插的整数倍,所以我们目前没有找到好的解决方法将其拆为一个个子滤波器。故在本次不进行展示,并作为后续的研究。
多相位分解实现滤波系统的MATLAB代码如下:
窗函数可选取汉明窗、布莱克曼窗和凯泽窗。
如选择汉明窗,,。如选择布莱克曼窗,,。采用凯泽窗,取,则算出的β≈5。矩形窗阻带衰减太低,故不采用。几种指标的滤波效果大致相同。滤波器阶数越高,一般滤波效果越好,但阶数太高则难以实现。根据我大量实验经验,对这个实验来说,令内插滤波/抽取滤波的阶数等于8倍的内插/抽取倍数时,效果很好。再增加阶数则效果变化不明显。
对于FIR,三种窗函数的滤波效果如下:
如图,由于加窗截短,处理后的频谱都出现了不同程度的频谱泄漏。其中凯泽窗的阻带波动最小,低频信号增益较大,声音均匀。而布莱克曼窗由于过渡带太大,能听到一定高频噪声。
综合分析选用凯泽窗最好。
处理看起来是直接型更快,但在并行处理中存在大量的循环,软件处理时是串行计算的,而在实际硬件中这些处理是并行的,使用虽然软件测量实际是直接型更为迅速。但在实际应用中并行的效率会更高,速度会更快。
如图,对抽样频率为24KHz的原信号进行不同频率抽样,得到如下几个频谱。
如果抽样频率大于24KHz,则一个周期内出现原信号的镜像高频分量,听得出高频噪声。需要低通滤波才能得到正常的0.5倍播放。
抽样频率小于24KHz,由于频谱变宽,可能产生混叠。
下面给出MATLAB代码:
直接型滤波器结构简单,但上述的分析说明了它浪费硬件资源,对运算处理的速率要求高。处理效果大致相同。
经过评估,故认为多相分解滤波器处理此类资源更优越。
如果顺序改为先抽取再内插,则声音质量有损。因为最后得到的是1.5fs的采样率,小于输入信号的两倍。如果先抽取再内插,频谱会发生混叠。为了防止混叠,信号通过低通滤波器会产生截止失真。而先内插再抽取,先降低了采样率,才能无失真输出。