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');

 

posted @ 2015-04-15 10:45  Lalaland  阅读(4504)  评论(0编辑  收藏  举报