频谱图 fft c++ Librosa

问题描述 投票:0回答:0

我尝试在 C++ 中绘制频谱图并将其与 librosa 进行比较:

spectrum.at<float>(y-1, x) = 20.0 * std::log10(mag_val+1);

My C++ spectrogram

Librosa spectrogram

如果我将代码更改为:

spectrum.at<float>(y-1, x) = 20.0 * std::log10(mag_val+0.012207);

我得到的几乎和 librosa 变体一样。

My C++ spectrogram with offset 0.012207

附加信息。

图书馆:

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 偏移的情况下无法获得相同的频谱图?

c++ fft voice-recognition librosa spectrogram
© www.soinside.com 2019 - 2024. All rights reserved.