librosa
librosa中关于计算出来的不同量的shape解释
参考:链接: link
采样率为44.1kHZ,1s采样到了44100个样本,一共有44.1kHZ*30s=1323000个样本
窗间隔为512/44100 =11.6ms 这个signal对应的是 0 11.6ms 23.2ms ···的对应的信号的幅度值
其声波图如下所示,duration=30 是因为有的可能有30.0001s, 为了数据长度计算,忽略后面的。
采用两个看似不同的但是其实一样的运算步骤的包装好的函数来计算,还学到了
power=1 是能量 power=2是功率
都是 load->stft->abs->power->log的运算步骤
得到的功率谱的shape
第一个位置与fft的窗函数的参数n_fft有关,第二个位置与窗口滑动的长度hop_length有关
可以看到谱的shape为(1025, 2584),
第一个位置参数计算
librosa中stft默认的窗口长度n_fft=2048,所以第一个位置取一半,得到了这个1024,
第二个位置参数计算
hop_length=512 1323000/512=2583.984375 需要向上取整,得到了2584
再看看修改hop_length=256
也就意味着窗口滑动的步长变小了,1323000/256=5167.96875,因此帧数从2584增加到了5168
再看看修改n_fft=512
在画线性功率谱和对数功率谱时传入的数据参数是一样的,只需修改y_axis的参数值
画线性频谱图
画对数频谱图
mel_spectrogram
melspectrogram = _spectrogram + Mel filters [np.dot]
_spectrogram = stft + abs + power (librosa melspectrogram 中default 2)
输出:np.ndarray [shape=(n_mels, t)] 这个t这里代表的是2584帧
如果修改hop_length=441
441/44100=10ms, 窗间隔为10ms,也就意味着1s的数据被分成了100帧
MFCC (Mel-Frequency cepstral coefficients)梅尔频率倒谱系数
预加重-> 分帧
然后对每一帧进行:fft -> 功率谱 -> mel滤波器组-> 对数功率 -> DCT -> mfccs
输出:np.ndarray [shape=(n_mfcc, t)] 这个t这里代表的是2584帧
指定要返回的MFCC数量:n_mfcc=10
默认是n_mfcc=20