matlab解析出声音文件的频率
因为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');