大家無論是學(xué)習(xí)“信號(hào)與系統(tǒng)”還是“數(shù)字信號(hào)處理”,“頻譜”都是一個(gè)常常提到的詞。頻譜到底是什么?
下面就借助matlab,給出一些聲音信號(hào)的頻譜,大家結(jié)合對(duì)應(yīng)的時(shí)域波形圖的模樣,再聽一聽聲音,就可以更直觀地理解頻譜的概念。
本節(jié)通過分析.wav格式的聲音文件來進(jìn)一步討論數(shù)字信號(hào)處理中的信號(hào)分析方法。首先介紹幾個(gè)常用函數(shù):
[x,fs,bits]=waveread(‘filename’)
函數(shù)功能:讀取wav文件的數(shù)據(jù);
輸入?yún)?shù):filename——文件名;
輸出參數(shù):x——聲音數(shù)據(jù),一般是兩列(立體聲);
fs——該wav文件在采集時(shí)用的采樣頻率;
bits——進(jìn)行A/D量化時(shí)的位數(shù)(一般是8bits或16bits)
sound(x,fs,bits)
函數(shù)功能:將序列x中存放的數(shù)據(jù)通過聲卡轉(zhuǎn)換為聲音文件。
輸入?yún)?shù):同上。
選擇每個(gè)Matlab都有的wav文件ding.wav(在C:\MATLAB701\toolbox\vr\vrealm\program\sounds目錄下)作為分析對(duì)象,這是一個(gè)比較單純的聲音“叮……”。首先用wavread函數(shù)讀出文件中的數(shù)據(jù),并用sound函數(shù)播放。然后對(duì)聲音數(shù)據(jù)做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('時(shí)域波形');
N=pow2(nextpow2(length(y)));%fft點(diǎn)數(shù):最接近文件大小的2的整數(shù)冪
Y=fft(y,N);
subplot(212);plot(fs*[1:N]/N,abs(Y));title('幅度譜');grid;
運(yùn)行結(jié)果如下圖。顯然,幅度譜是以fs/2為中心對(duì)稱的,這是所有實(shí)信號(hào)的幅度譜的共性。有一個(gè)比較明顯的主峰,頻率分布非常集中。若把頻譜圖放大顯示局部可以看到,頻率集中在1040~1050Hz范圍內(nèi),并且呈現(xiàn)非常尖銳的特點(diǎn)。這與聲音聽起來音調(diào)比較單調(diào)的特點(diǎn)是相吻合的。
圖1 ding.wav文件的時(shí)域波形和頻譜圖及頻譜的局部放大圖
大家可以自行替換文件名,得到其他聲音文件的時(shí)域波形和頻譜圖。如下圖2-6所示。
圖2 chimes.wav文件的時(shí)域波形和頻譜圖
圖3 bird.wav文件的時(shí)域波形和頻譜圖
圖4 explo.wav文件的時(shí)域波形和頻譜圖
圖5 splwater.wav文件的時(shí)域波形和頻譜圖
聯(lián)系客服