張土前
數(shù)字信號處理在wav信號分析方面的應(yīng)用
張土前
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展應(yīng)用,聲音信號逐漸實(shí)現(xiàn)了數(shù)字化,采用傅里葉變化,信號可以轉(zhuǎn)化為振幅函數(shù)和頻率函數(shù),本文先簡單分析傅里葉變換原理,進(jìn)而分析數(shù)字信號處理在wav信號分析中的應(yīng)用,希望能為信號分析處理提供參考。
MATLAB是一種商業(yè)數(shù)學(xué)軟件,常使用在算法開發(fā)、數(shù)字化可視化中,具有高效的數(shù)值計(jì)算及符號計(jì)算能力,具有完備的圖形處理功能,應(yīng)用工具箱功能豐富,是實(shí)現(xiàn)wav信號數(shù)字化處理的有效軟件,本文主要分析基于MATLAB的wav信號分析。
聲音是由分子的振動生成,自然界的聲音會隨著各種因素的變化而出現(xiàn)變化,聲波的強(qiáng)弱程度采用振幅來表示,音調(diào)采用頻率表示,高頻信號代表聲音非常尖銳,低頻信號則意味著聲音低沉。在日常生活中,人們聽到的聲音并不是一種單頻率的聲音,很多都是不同的頻率和振幅組合而成。頻率低于20Hz的信號為亞音,人們能夠聽到的聲音頻率在20Hz~20kHz。
Wav信號在采用數(shù)字信號處理中必須經(jīng)過傅里葉變化,應(yīng)用傅里葉變換目前有兩個問題需要解決,數(shù)學(xué)中傅里葉變化的信號為連續(xù)信號,但是計(jì)算機(jī)職能處理數(shù)字信號,另外在數(shù)學(xué)處理中常采用無窮大概念,在實(shí)際的計(jì)算中,無窮大計(jì)算難以在計(jì)算機(jī)中實(shí)現(xiàn)。假設(shè)在Δt間隔時間內(nèi),連續(xù)均勻采樣,變換為F(k)=Σf(n)e-j2πkm/N/N,f(n)=Σf(k)e-j2πkm/N/N,這個公式表示在計(jì)算機(jī)處理中,信號被看做周期信號來處理,信號周期相同,因此對音頻文件采用中,經(jīng)過傅里葉變換后,采樣點(diǎn)不變。聲音文件持續(xù)時間t=NΔt,采樣頻率f=1/Δt,在傅里葉變換中,k分別對應(yīng)抽樣值,Δf=1/(N Δt),其中Δf代表頻率。
利用MATLAB熟悉處理軟件,MATLAB集成了fft等函數(shù),應(yīng)用方面,數(shù)學(xué)運(yùn)算能力強(qiáng)大。主要包括聲音的采集、持續(xù)音的頻譜分析和時變音短視頻普分析,MATLAB提供了快速傅里葉變換的含糊,在windows系統(tǒng)中讀入文件,采用fft求幅度值,觀察正弦分量,求取頻譜的反傅里葉反變換,分析波形變化,構(gòu)造正弦信號。在應(yīng)用MATLAB之前,需要明白聲音信號屬于一維信號,輸入輸出函數(shù)需要可以控制頻率,fft()代表以微信號的變換,ifft()代表一維信號逆向傅里葉變換。
信號采取對應(yīng)MATLAB代碼(部分):[y,fs]=wavread(‘ding.wav’);yr= yr (1:1024);figure(‘numbertitle’,’off’,1024μ?FFT');plot(linspace(-pi,pi,1024);yr1024=real(ifft(YR1024))。Wav文件的一次性傅里葉變換中選擇一個wav文件作為分析的對象,選擇每個windows系統(tǒng)為對象,在分析聲波主要頻率中先執(zhí)行(部分)sound(w,fs,bits);size(y);plot(w(:,1)); Figure= fft(y, 32768);grid;[m.k]=max(abs(y)) ,將信號size(y)語句轉(zhuǎn)變,此時需要處理大量的數(shù)據(jù),求出頻譜的最大值和對應(yīng)的位置,得到兩個峰值代表的頻率,然后執(zhí)行語句(部分):[m2,k2]=max(abs(Y(4000:5000)));f2=(4000+k2)*fs/N ,得到頻率,完成聲波主要頻率的分析。
在得到聲波的頻譜后,需要得到相應(yīng)的時域值,在這里采用傅里葉反變換,重構(gòu)正弦信號主要是找到幅度最大的正弦分量,用作后期與原始信號相比較之用,對應(yīng)MATLAB代碼(部分):[y,fs]=wavread(‘ding.wav’);yr=yr(1:1024);yr1024= real (ifft(YR1024));MAXSIN=zeros(1,1024);MAXSIN(1026-peaki)=maxpeak;subplot(2,1,1)plot(maxsin);wavplay(yr1024);wavplay(maxsin)。分析時變音短時頻譜,利用“l(fā)oad chirp”載入matlab自帶時變音,從信號中截取一個點(diǎn),對應(yīng)MATLAB代碼(部分):loadchirp %y,F(xiàn)slen= length(y);seg=y((i-1)*1024+1:i*1024);plot(linspace(-pi,pi,1024),fftshift(abs(fft(seg))))。
在對wav信號分析中采取一次性傅里葉變化存在點(diǎn)數(shù)過大的問題,由于語音是分音節(jié)的,因此需要采取分段分析,執(zhí)行[w,fs,bits]=wavread(‘c:windows mediading.wav’)得到文件的時域波形,執(zhí)行(部分):u=w(:,1);length(u)/1024 z(i,:)=(fft(u(1024*(i-1)+ 1:1024*i),1024))’;figure;mesh(abs(z(:,1:200))’),實(shí)現(xiàn)分段分析。
在MATLAB中采用wavread函數(shù)讀入ding.wav,采用wavrecord錄制聲音,采用wavplay播放聲音,實(shí)現(xiàn)聲音的采集。讀入聲音文件后將聲音信號進(jìn)行fft變化,將圖形畸形對稱轉(zhuǎn)換,顯示頻譜,比較頻譜圖,發(fā)現(xiàn)fft變換圖形形狀類似,與原始信號圖形基本保持一致,僅僅是在幅度上存在差別,驗(yàn)證結(jié)果正確,表示變換后的精度明顯提高。
在利用頻譜中最大幅度對應(yīng)的頻率重構(gòu)正弦信號中,[maxpeak,peaki]函數(shù)用來確定最大幅度值和響應(yīng)的位置,MAXSIN函數(shù)則是求取另外一個最大幅度值的函數(shù),在取樣點(diǎn)有限情況下產(chǎn)生鏡像,取鏡像中通過代碼MAXSIN(1026-peaki)實(shí)現(xiàn)。通過載入時變音得到幅度譜,經(jīng)過fft進(jìn)行對稱轉(zhuǎn)換,每幅圖都能夠得到鏡像。
綜上所述,本文主要分析數(shù)字信號處理在wav信號分析中的應(yīng)用,MATLAB中有限點(diǎn)的fft變換會產(chǎn)生鏡像,想要構(gòu)造信號頻譜的鏡像,還需要考慮到直流分量問題,隨著計(jì)算機(jī)技術(shù)的不斷應(yīng)用,數(shù)字信號處理技術(shù)將會得到更廣泛的使用。
10.3969/j.issn.1001-8972.2015.09.016