基于MATLAB的简易声音信号频谱分析仪设计
摘 要
语音信号处理技术是语音处理领域中新近发展起来的一个学科分支,而频谱分析技术是进行语音信号处理的基础。DFT及FFT变换是进行数字信号频谱分析的重要方法。DFT是FFT的基础, FFT是DFT的快速算法。MATLAB是一个数据分析和处理功能十分强大的工程实用软件,运用它来进行语音信号的采集、分析和处理相当方便。本文介绍了在MATLAB环境中如何采集声音信号和采集后的频谱分析方法,并使用MATLAB软件的GUI模块,设计了一个简易的声音信号频谱分析仪。
关键字:MATLAB,FFT,声音信号,频谱分析
1 概述
随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信
号的频谱就等于研究信号本身。通常从频域角度对信号进行分析与处理,容易对信号的特性获得深入的了解。因此,信号的频谱分析是数字信号处理技术中的一种较为重要的工具【2】。
声卡是计算机最基本的配置硬件之一,价格便宜,使用方便。MATLAB工具箱集成了一些语音处理功能函数。本文将给出基于声卡与MATLAB的声音信号频谱分析仪的设计原理与实现方法。
2 设计原理
频谱分析用傅立叶变换将波形x(t)变换为频谱X(f),从另一角度来了解信号特征。常见傅里叶变换有DFT和FFT。DFT是FFT的基础, FFT是DFT的快速算法,在MATLAB中可以利用函数fft来计算序列的离散傅里叶变换DFT。FFT是时域和频域转换的基本运算。 2.1 离散傅里叶级数
如果x(n)表示周期为N的周期序列,即:
x(n)?x(n?kN)
k为任意整数 (2-1)
周期序列用离散的傅里叶级数来表达,其表达式如下:
x(n)?1NN?1?X(k)ek?0j(2?/N)kn (2-2)
式(2-2)称为周期序列的离散傅里叶变换的级数表示。 对上式进行离散傅里叶逆变换,得:
N?1X(k)??x(n)en?0?j(2?/N)kn
(2-3)
式(2-3)称为周期序列的离散傅里叶逆变换的级数表示。记:
WN?e?j(2?/N)
(2-4)
这样,结合式(2-2)和式(2-3)周期序列的离散傅里叶级数对可表示为:
N?1?kn?X(k)??x(n)WN?n?0?N?1?kn?x(n)?1X(k)WN??Nk?0?
(2-5)
2.2 DFT和FFT变换
对于给定的一段时域信号,可以通过傅里叶变换得到相应的频域信号。计算公式如下:
N?1?N?1?X(f)???x(n)cos(2?fn?t)?j?x(n)sin(2?fn?t)??tn?0?n?0?
(2-6)
上式中,N为样本点数,?t?1/Fs为采样时间间隔。
采样信号的频谱是一个连续的频谱,故采用离散傅里叶变换(即DFT),计算公式如下:
N?1X(k?f)??x(n)en?0?j(2?/N)kn?t,k?0,1,2,???,N?1
(2-7)
?Fs/N上式中,N为样本点数,?t?1/Fs为采样时间间隔,?f。
由于采用式(2-7)进行计算时,有大量的指数(等价于三角函数)运算,效率很低,因此实际中多采用快速傅里叶变换(即FFT)。其原理是通过选择和重新排列,将重复的三角函数计算得到的中间结果保存起来,以减少重复计算带来的时间浪费。由于三角函数计算的重复量相当大,故FFT能极大地提高运算效率。