librosa.cqt(y=None, sr=22050, hop_length=512, fmin=None, n_bins=84, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='reflect', res_type=None)
时间: 2023-10-03 12:09:26 浏览: 259
librosa.cqt函数是用于计算音频信号的常数Q变换(CQT)的函数。CQT是一种将音频信号转换为频谱表示的方法,它与傅里叶变换和短时傅里叶变换不同,它可以更好地捕捉音乐信号中的音高和音调信息。
该函数的参数含义如下:
- y:音频信号,可以是一维数组或二维数组。如果是二维数组,则会对每个通道进行CQT计算。
- sr:采样率,即每秒钟采集的样本数。
- hop_length:每次计算CQT时移动的时间步长,以采样点数表示。
- fmin:计算CQT的最低频率。
- n_bins:CQT频率轴的频率数量。
- bins_per_octave:每个八度音阶中的频率数量。
- tuning:调音,以半音为单位的偏移量。
- filter_scale:滤波器尺度。默认为1。
- norm:是否对CQT进行归一化。默认为1,表示L2范数归一化。
- sparsity:CQT系数的稀疏度。默认为0.01。
- window:窗函数类型。默认为汉宁窗。
- scale:是否对CQT进行缩放。默认为True,表示将CQT除以窗函数的L2范数。
- pad_mode:填充模式,用于在计算CQT时向信号两端添加零值。默认为反射填充。
- res_type:重采样类型。默认为None,表示不进行重采样。
该函数的返回值为一个二维数组,表示计算得到的CQT系数。其中,第一维表示时间轴,第二维表示频率轴。
相关问题
UserWarning: amplitude_to_db was called on complex input so phase information will be discarded. To suppress this warning, call amplitude_to_db(np.abs(S)) instead. CQT = librosa.amplitude_to_db(librosa.cqt(y, sr = 16000 ), ref = np. max )
这个警告表示amplitude_to_db函数被用在了复杂输入上,因此相位信息将被丢弃。为了避免这个警告,可以将输入转换成绝对值后再调用amplitude_to_db函数,即使用amplitude_to_db(np.abs(S))代替amplitude_to_db(S)。这样可以保留能量信息并且避免丢失相位信息。因此,可以将第6行修改为以下代码:
```
CQT = librosa.amplitude_to_db(np.abs(librosa.cqt(y, sr=16000)), ref=np.max)
```
这样就可以避免UserWarning了。
import librosa filepath = 'D:\\360se6\\bishe\\古筝\\' filename = filepath + 'gz1.wav' y, sr = librosa.load(filename,sr = None ) CQT = librosa.amplitude_to_db(librosa.cqt(y, sr = 16000 ), ref = np. max ) plt.subplot( 4 , 2 , 3 ) librosa.display.specshow(CQT, y_axis = 'cqt_note' ) plt.colorbar( format = '%+2.0f dB' ) plt.title( 'Constant-Q power spectrogram (note)' )
这段代码使用了Python的librosa库对一个音频文件进行了处理,具体来说:
- 第1行导入了librosa库;
- 第2行指定了音频文件路径;
- 第3行将文件路径和文件名连接起来,得到完整的文件名;
- 第4行使用librosa库中的load函数读取音频文件,并返回音频信号y和采样率sr;
- 第5行使用librosa库中的cqt函数计算音频信号的CQT(Constant-Q Transform)表示;
- 第6行使用librosa库中的amplitude_to_db函数将CQT表示转换成分贝(dB)表示;
- 第7-9行使用matplotlib库绘制CQT表示的音频频谱图。
需要注意的是,这段代码中使用了plt.subplot函数和plt.title函数,但是没有导入matplotlib库。因此,需要在代码开头添加import matplotlib.pyplot as plt语句,以便正确运行。
阅读全文