音频特征提取

时间:2021-04-10 08:56:02

特征提取(Feature Exaction)

对于音频信号,按时间分辨率、按局部or全局的观念、持续时间长短,或者爱怎么讲怎么讲,特征可分为长期(long-term)、中期(mid-term)、短期(short-term),也可以叫短时特征。

短时能量、功率是有点瞬时功率的概念,但又没有那么“瞬时”。大概是按帧在做计算。

短时功率在计算的时候,把每一帧的能量还要处理该帧的长度,量纲上等于[Watt]。

短时过零率(short-term zero corss rate,st-ZCR),大概是从时域上描述信号频率吧,也是按帧计算。
短时能量:
  1. function E = get_st_energy( x,fs,wlen_time,step_time,win_type,energy_unit )  
  2. %function zcr = get_st_energy( x,fs,wlen_time,step_time,win_type,energy_unit )  
  3. %   获取短时能量(没有除以帧长,所以不是计算的功率)。  
  4. %   输入参数  
  5. %           x:语音信号 --> 单声道  
  6. %           fs:采样速率  
  7. %           wlen_time:窗口时间(s)  
  8. %           step_time:步进时间(s)  
  9. %           win_type:'hamming','hanning',...,默认'hamming'  
  10. %           energy_unit:'dB',以归一化的能量显示 (单位:dB)。否则是线性刻度。  
  11. %   返回参数  
  12. %           E:短时能量(横坐标是帧序号)  
  13. % 版本说明:计算短时能量。  
  14. % 如果分帧时,不能整除,则抛弃最后一帧,不予以计算  
  15. % 时间:2016年10月31日21:21:23  
  16.   
  17. wlen = round(wlen_time * fs);  
  18. nstep = round(step_time * fs);  
  19.   
  20. if nargin < 5  
  21.     win = hamming(wlen);  
  22. elseif nargin == 5  
  23.     if strcmp(win_type, 'hamming')  
  24.         win = hamming(wlen);  
  25.     elseif strcmp(win_type, 'hanning')  
  26.         win = hanning(wlen);  
  27.     else  
  28.         win = hamming(wlen);  
  29.     end  
  30. else  
  31.     win = hamming(wlen);  
  32. end    
  33. nFrames = floor((length(x) - wlen)/nstep) + 1; % 总帧数  
  34. E = [];  
  35.   
  36. for k = 1:nFrames  
  37.     idx = (k-1) * nstep + (1:wlen);  
  38.     x_sub = x(idx) .* win;  
  39.     E(k) = sum(x_sub.^2);   
  40. end  
  41.   
  42. % 是否需要化成dB  
  43. if nargin == 6  
  44.     if strcmp(energy_unit, 'dB')   
  45.         E = 10*log10(E/max(E)+eps);  
  46.     end  
  47. end  
  48. end  
  49. 短时过零率:
    1. function zcr = get_st_zcr( x,fs,wlen_time,step_time,win_type )  
    2. %function zcr = get_st_zcr(x,fs,wlen_time,step_time,win_type )  
    3. %   获取短时过零率。  
    4. %   输入参数  
    5. %           x:语音信号 --> 单声道  
    6. %           fs:采样速率  
    7. %           wlen_time:窗口时间(s)  
    8. %           step_time:步进时间(s)  
    9. %           win_type:'hamming','hanning',...,默认'hamming'  
    10. %   返回参数  
    11. %           zcr:短时过零率(横坐标是帧序号)  
    12. % 版本说明:计算短时过零率。  
    13. % 如果分帧时,不能整除,则抛弃最后一帧,不予以计算  
    14. % 时间:2016年10月31日21:08:22  
    15.   
    16. if(min(size(x))>1) % 如果不是单声道  
    17.     % ...  
    18. end  
    19.   
    20. wlen = round(wlen_time * fs);  
    21. nstep = round(step_time * fs);  
    22.   
    23. if nargin < 5  
    24.     win = hamming(wlen);  
    25. elseif narmin == 5  
    26.     if strcmp(win_type, 'hamming')  
    27.         win = hamming(wlen);  
    28.     elseif strcmp(win_type, 'hanning')  
    29.         win = hanning(wlen);  
    30.     else  
    31.         win = hamming(wlen);  
    32.     end  
    33. else  
    34.     win = hamming(wlen);  
    35. end  
    36.   
    37.   
    38. nFrames = floor((length(x) - wlen)/nstep) + 1; % 总帧数  
    39. zcr = [];  
    40.   
    41. for k = 1:nFrames  
    42.     idx = (k-1) * nstep + (1:wlen);  
    43.     x_sub = x(idx) .* win;  
    44.     x_sub1 = x_sub(1:end-1);  
    45.     x_sub2 = x_sub(2:end);  
    46.     zcr(k) = sum(abs(sign(x_sub1) - sign(x_sub2))) / 2 / length(x_sub1);   
    47. end  
    48.   
    49. end  
    50. 音频特征提取