大家无论是学习“信号与系统”还是“数字信号处理”,“频谱”都是一个常常提到的词。频谱到底是什么? 下面就借助matlab,给出一些声音信号的频谱,大家结合对应的时域波形图的模样,再听一听声音,就可以更直观地理解频谱的概念。 1、常用函数介绍本节通过分析.wav格式的声音文件来进一步讨论数字信号处理中的信号分析方法。首先介绍几个常用函数: [x,fs,bits]=waveread(‘filename’) 函数功能:读取wav文件的数据; 输入参数:filename——文件名; 输出参数:x——声音数据,一般是两列(立体声); fs——该wav文件在采集时用的采样频率; bits——进行A/D量化时的位数(一般是8bits或16bits)
sound(x,fs,bits) 函数功能:将序列x中存放的数据通过声卡转换为声音文件。 输入参数:同上。 2、wav文件的频域分析选择每个Matlab都有的wav文件ding.wav(在C:\MATLAB701\toolbox\vr\vrealm\program\sounds目录下)作为分析对象,这是一个比较单纯的声音“叮……”。首先用wavread函数读出文件中的数据,并用sound函数播放。然后对声音数据做FFT,显示幅度谱,并判断波峰所在位置。程序如下: 示例程序: close all;clearall;clc;figure; [w,fs,bits]=wavread('C:\MATLAB701\toolbox\vr\vrealm\program\sounds\ding.wav'); sound(w,fs,bits); %听一下原始声音 y=w(:,1); %取其中一列 display('声音文件的大小为:');size(w) subplot(211);plot(y);title('时域波形'); N=pow2(nextpow2(length(y)));%fft点数:最接近文件大小的2的整数幂 Y=fft(y,N); subplot(212);plot(fs*[1:N]/N,abs(Y));title('幅度谱');grid; 运行结果如下图。显然,幅度谱是以fs/2为中心对称的,这是所有实信号的幅度谱的共性。有一个比较明显的主峰,频率分布非常集中。若把频谱图放大显示局部可以看到,频率集中在1040~1050Hz范围内,并且呈现非常尖锐的特点。这与声音听起来音调比较单调的特点是相吻合的。 图1 ding.wav文件的时域波形和频谱图及频谱的局部放大图
大家可以自行替换文件名,得到其他声音文件的时域波形和频谱图。如下图2-6所示。 图2 chimes.wav文件的时域波形和频谱图 图3 bird.wav文件的时域波形和频谱图 图4 explo.wav文件的时域波形和频谱图 图5 splwater.wav文件的时域波形和频谱图 |
|