我尝试在 C++ 中绘制频谱图并将其与 librosa 进行比较:
spectrum.at<float>(y-1, x) = 20.0 * std::log10(mag_val+1);
如果我将代码更改为:
spectrum.at<float>(y-1, x) = 20.0 * std::log10(mag_val+0.012207);
我得到的几乎和 librosa 变体一样。
附加信息。
图书馆:
Minimum absolute value of STFT: 0.0
Maximum absolute value of STFT: 109.00821685791016
librosa.amplitude_to_db(频谱图):
Minimum value log_spectro: -39.250816
Maximum value: log_spectro 40.749184
我的C++代码:
The minimum absolute value is: 0
The maximum absolute value is: 108.963
20*std::log10(mag_val+1);
Min log float val: 0
Max log float val: 39.6742
20*std::log10(mag_val+0.012207);
Min from CV_MAT val: -38.2678
Max from CV_MAT val: 39.5846
我不明白为什么在没有 +0.012207 偏移的情况下无法获得相同的频谱图?