大家无论是学习“信号与系统”还是“数字信号处理”,“频谱”都是一个常常提到的词。频谱到底是什么?
下面就借助matlab,给出一些声音信号的频谱,大家结合对应的时域波形图的模样,再听一听声音,就可以更直观地理解频谱的概念。
本节通过分析.wav格式的声音文件来进一步讨论数字信号处理中的信号分析方法。首先介绍几个常用函数:
[x,fs,bits]=waveread(‘filename’)
函数功能:读取wav文件的数据;
输入参数:filename——文件名;
输出参数:x——声音数据,一般是两列(立体声);
fs——该wav文件在采集时用的采样频率;
bits——进行A/D量化时的位数(一般是8bits或16bits)
sound(x,fs,bits)
函数功能:将序列x中存放的数据通过声卡转换为声音文件。
输入参数:同上。
选择每个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文件的时域波形和频谱图
联系客服