Я пробовал Librosa и тестировал функцию cqt для проекта, связанного с (musi c). Чтобы убедиться, что я правильно его использую, я ввел сумму двух синусоид, соответствующих двум нотам: A3 и C5. Результат оказался не совсем таким, как я ожидал. Две корзины для A3 и C5 имеют самую сильную энергию, но корзины вокруг них совсем не симметричны c .
Это нормальный результат или я что-то делаю не так ? Я проверил и частоты cqt идеально совпадают с примечаниями. Кроме того, когда я попробовал chroma_cqt, результат был почти идеально симметричен c.
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
sr = 44100
s = np.linspace(0,5,5*sr)
f1 = librosa.midi_to_hz(69) # A, 440 Hz
f2 = librosa.midi_to_hz(84) # C, 1047 Hz
y = np.sin(2*np.pi*f1*s)+np.sin(2*np.pi*f2*s)
fmin = librosa.midi_to_hz(36) # C2, 65.4 Hz
n_octaves = 6
n_bins = 12*n_octaves
n_fft = 8192
hop_length = n_fft//4
## CQT implementation
# chromogram
Cr = librosa.feature.chroma_cqt(y=y, sr=44100, hop_length=hop_length, norm=None, n_octaves=7)
plt.figure(figsize=(10, 4))
librosa.display.specshow(Cr, hop_length=hop_length,
x_axis='time',
y_axis='chroma', sr=sr,
cmap="Greys")
plt.colorbar(format='%+2.0f dB')
plt.title('spectrogram')
plt.tight_layout()
plt.show()
# spectrogram
C =librosa.core.cqt(y, sr=44100,
hop_length=hop_length,
filter_scale=2, fmin=fmin,
n_bins=n_bins)
C_dB = librosa.amplitude_to_db(np.abs(C))
plt.figure(figsize=(10, 4))
librosa.display.specshow(C_dB, x_axis='time',
hop_length=hop_length,
y_axis='cqt_note', sr=sr,
cmap="Greys")
plt.colorbar(format='%+2.0f dB')
plt.title('spectrogram')
plt.tight_layout()
plt.show()