基于MATLAB的声音信号频谱分析仪设计 下载本文

内容发布更新时间 : 2024/6/16 22:16:22星期一 下面是文章的全部内容请认真阅读。

基于MATLAB的声音信号频谱分析仪设计

1 设计目的及要求

1.1 设计目的

基于MATLAB设计一个简易声音信号频谱分析仪。

1.2 设计要求

(1) 输入方式: ①利用电脑声卡录音;

②打开WAV文件;

(2) 时域分析:计算原始信号的幅值,频率,相位;

(3) 频域分析:利用快速傅里叶变换(FFT)得到信号的幅频特性和相频

特性。

2 设计原理分析

2.1 设计结构

设计的结构图如下: 输入模块 声卡录制 打开WAV文件

频谱分析仪 图像显示模块 幅频特性曲线 分析模块 相频特性曲线 时域分析 幅值 频域分析 原始波形 幅频 特性 频率 相频 相位 特性 2.2 声音输入方式

(1) 声卡输入:利用MATLAB中的函数wavrecord函数获取声卡录制的声

音,录制频率和时间可以设置。默认双声道录制。 (2) 打开WAV文件:通过MATLAB中的uigetfile函数获取声音文件。如果

获取的信号是单声道信号,则双声道分析不可选。

2.3 声道选择

设置一个变量handles.sd,如果选择的是左声道,handles.sd=1;如果是右声道,handles.sd=2;如果是双声道,handles.sd=0;在时域和频域分析的时候,通过handles.sd的值来判断声道。

2.4 时域分析

(1) 幅值检测:在一个周期内,求出信号最大值ymax与最小值ymin的差的

一半,即A?(ymax?ymin)/2,同样,也会求出多个A值,但第1个A值对应的ymax和ymin不是在一个周期内搜索得到的,故以除第1个以外的A值的平均作为幅值的估计值。

(2) 频率检测:对周期信号来说,可以用时域波形分析来确定信号的周

期,也就是计算相邻的两个信号波峰的时间差、或过零点的时间差。这里采用过零点ti的时间差T(周期)。频率即为f?1/T,由于能够求得多个T值(ti有多个),故采用它们的平均值作为周期的估计值。 (3) 相位检测:采用过零法检测,通过判断与同频零相位信号过零点时

刻,计算其时间差,然后换成相应的相位差。??2?(1?ti/T),同样,以?的平均值作为相位的估计值。

计算幅值,频率,相位的流程图如下:

2.5 频域分析

对于给定的时域信号y,可以通过Fourier变换得到频域信息Y。Y可按下式计算

Y(f)?[?yicos(2?fi?t)?j?yisin(2?fi?t)]?t

i?0i?0N?1N?1式中,N为样本容量,?t?1/Fs为采样间隔。

采样信号的频谱是一个连续的频谱,不可能计算出所有的点的值,故采用 离散Fourier变换?DFT?,即

Y(k?f)??yie?j2?ki/N?t,k?0,1,2,...,N?1

i?0N?1式中,?f?Fs/N。但上式的计算效率很低,因为有大量的指数(等价于三角函数)运算,故实际中多采用快速Fourier变换(FFT)。其原理即是将重复的三角函数算计的中间结果保存起来,以减少重复三角函数计算带来的时间浪费。由于三