题目:16k采样率音频数据下采样到8k采样率
求解方案分析:直接每隔一个取一个采样值,这样就可以得到8k采样率的数据。但是这样明显会有问题。按照采样率变换理论,首先应该通过一个低通滤波器,滤掉[pi/2,
pi]这个区间上的频率,以防止下采样造成的频率混叠。这个低通滤波器在很多书上都用FIR滤波去实现,并且可以用FIR滤波的多相结构去实现。这样滤波和下采样过程可以互换位置。即先下采样再进行多相FIR滤波。
在嵌入式设备上FIR滤波会占用较长的时间,为此,我们可以采用IIR滤波器来做。滤波器的设计采用MATLAB的FDATool工具。相关的参数如下:
采用最小P阶范数设计IIR滤波器的幅频特性较好。滤波器阶数设定为6阶,需要滤除4k到8k的频率段,才能保证无混叠失真。实际由于滤波器的特性没法做到理想的状态,选择滤波器截止频率为3800hz,3600到3800为过渡带宽。其它选项采用默认设置。设计的滤波器幅度响应如下图:
生成的滤波器系数文件如下:
/*
* Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
*
* Generated by MATLAB(R) 7.6 and the Signal Processing Toolbox 6.9.
*
* Generated on: 03-Dec-2010 10:41:03
*
*/
/*
* Discrete-Time IIR Filter (real)
* -------------------------------
* Filter Structure: Direct-Form II, Second-Order Sections
* Number of Sections: 3
* Stable: Yes
* Linear Phase: No
*/
/* General type conversion for MATLAB generated C-code*/
#include"tmwtypes.h"
/*
* Expected path to tmwtypes.h
* D:/MATLAB/R2008a/extern/include/tmwtypes.h
*/