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