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

 

你可能感兴趣的:(matlab)