分享

声音信号的频谱分析(一)

 goandlove 2017-10-20

大家无论是学习信号与系统还是数字信号处理频谱都是一个常常提到的词。频谱到底是什么?

下面就借助matlab,给出一些声音信号的频谱,大家结合对应的时域波形图的模样,再听一听声音,就可以更直观地理解频谱的概念。

1、常用函数介绍

本节通过分析.wav格式的声音文件来进一步讨论数字信号处理中的信号分析方法。首先介绍几个常用函数:

[x,fs,bits]=waveread(‘filename’)

函数功能:读取wav文件的数据;

输入参数:filename——文件名;

输出参数:x——声音数据,一般是两列(立体声);

          fs——wav文件在采集时用的采样频率;

bits——进行A/D量化时的位数(一般是8bits16bits

 

sound(x,fs,bits)

函数功能:将序列x中存放的数据通过声卡转换为声音文件。

输入参数:同上。

2wav文件的频域分析

选择每个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文件的时域波形和频谱图

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多