因為matlab工具集成了很多算法。記錄學習了用matlab來解析聲音頻率。
ff.wav 是一段頻率為17640HZ的已知聲音文件
貼上代碼:
1 %1、%[X,Fs,Bit]=wavread('d:\\ff.wav'); 2 %2、然后進行特征提取 3 %3、然后分類器識別 4 %4、輸出識別結果 5 %close all; 6 %clear all; 7 [X,Fs]=audioread('d:\\ff.wav'); 8 N=2048; 9 n=0:N-1; 10 Xk=fft(X,N); %對信號進行快速Fourier變換 11 nUniquePts = ceil((N+1)/2); 12 Xk = Xk(1:nUniquePts); % 選擇前半部,因為后半部是前半部的一個鏡像 13 magX=abs(Xk);%求得Fourier變換后的振幅 14 %作完傅氏變換后要加絕對值abs(Xk);dB值:20*log(abs(Xk)/max(abs(Xk)))。 15 ddd=20*log(magX/max(magX)) 16 iPoint = -1 ; 17 for i=1:N 18 if magX(i) == max(magX) 19 iPoint = i; 20 i 21 break ; 22 end 23 end 24 % 創建頻率數組begin 25 TXBB_THRESHOLD = 20 ;%誤差范圍 26 TXBB_CHARACTERS_NUM = 64 ;%假設一共64個頻率 27 TXBB_BASEFREQUENCY_H = 17000; %起始頻率 28 g_fFrequencies = TXBB_CHARACTERS_NUM*(0:TXBB_CHARACTERS_NUM-1) + TXBB_BASEFREQUENCY_H; 29 % 創建頻率數組end 30 31 % 查找碼表 begin 32 k = 1 ; 33 for i=1:TXBB_CHARACTERS_NUM 34 if g_fFrequencies(i)-20 < Fs/N*iPoint && g_fFrequencies(i)+20 > Fs/N*iPoint 35 k = i ; 36 break ; 37 end 38 end 39 % 查找碼表 end 40 41 %打印結果 42 g_fFrequencies(k) 43 fprintf('k:%d.\n',k); 44 disp('k:.\n');