失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 音频信号处理库librosa

音频信号处理库librosa

时间:2023-08-10 08:03:40

相关推荐

音频信号处理库librosa

参考:

1. librosa官网

2. librosa语音信号处理

3. 语音信号处理库 ——Librosa

4. librosa音频处理教程

5. Python音频信号处理库函数librosa介绍

0 谱分析函数

1. librosa 读取信号

librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)

读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。

参数:

path :音频文件的路径。

sr :采样率,如果为“None”使用音频自身的采样率

mono :bool,是否将信号转换为单声道

offset :float,在此时间之后开始阅读(以秒为单位)

duration:float,仅加载这么多的音频(以秒为单位)

返回:

y :音频时间序列

sr :音频的采样率

1. 加载数据

librosa.load(path, *, sr=22050, mono=True, offset=0.0, duration=None, dtype=<class 'numpy.float32'>, res_type='soxr_hq')

** 读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。默认单通道,如果要保留原始通道数,使用mono=False**

参数:

path:音频文件的路径。sr:采样率,如果为“None”使用音频自身的采样率mono:bool,是否将信号转换为单声道offset:float,在此时间之后开始阅读(以秒为单位)duration:float,仅加载这么多的音频(以秒为单位)

返回:

y:音频时间序列sr:音频的采样率

2. STFT 短时傅里叶变换

librosa.stft(y, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')

短时傅立叶变换(STFT),返回一个复数矩阵使得D(f,t)

复数的实部:np.abs(D(f,t))频率的振幅复数的虚部:np.angle(D(f,t))频率的相位

参数:

y:音频时间序列

n_fft:FFT窗口大小,n_fft=hop_length+overlapping

hop_length:帧移,如果未指定,则默认win_length / 4。

win_length:每一帧音频都由window()加窗。窗长win_length,然后用零填充以匹配N_FFT。默认win_length=n_fft。

window

:字符串,元组,数字,函数 shape =(n_fft, )

窗口(字符串,元组或数字);窗函数,例如scipy.signal.hanning长度为n_fft的向量或数组

center

:bool

如果为True,则填充信号y,以使帧 D [:, t]以y [t * hop_length]为中心。如果为False,则D [:, t]从y [t * hop_length]开始

dtype:D的复数值类型。默认值为64-bit complex复数

pad_mode:如果center = True,则在信号的边缘使用填充模式。默认情况下,STFT使用reflection padding。

返回:

STFT矩阵,shape =

import librosaimport numpy as npimport matplotlib.pyplot as pltsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseSSTFT = librosa.stft(signal, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')S = np.abs(SSTFT)fig,ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(S,ref=np.max),y_axis='log', x_axis='time',ax=ax)ax.set_title('Power spectrogram')fig.colorbar(img, ax=ax, format="%+2.0f dB")plt.show()

fs: 48000

signal:(583680)

3.istft 短时傅里叶逆变换

librosa.istft(stft_matrix, hop_length=None, win_length=None, window='hann', center=True, length=None)

短时傅立叶逆变换(ISTFT),将复数值D(f,t)频谱矩阵转换为时间序列y,窗函数、帧移等参数应与stft相同

参数:

stft_matrix:经过STFT之后的矩阵

hop_length:帧移,默认为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRHd0a0d-1683873363702)(/math?formula=%5Cfrac%7B%F0%9D%91%A4%F0%9D%91%96%F0%9D%91%9B%F0%9D%91%99%F0%9D%91%92%F0%9D%91%9B%F0%9D%91%94%F0%9D%91%A1%E2%84%8E%7D%7B4%7D)]

win_length:窗长,默认为n_fft

window

:字符串,元组,数字,函数或shape = (n_fft, )

窗口(字符串,元组或数字)窗函数,例如scipy.signal.hanning长度为n_fft的向量或数组

center

:bool

如果为True,则假定D具有居中的帧如果False,则假定D具有左对齐的帧

length:如果提供,则输出y为零填充或剪裁为精确长度音频

返回:

y:时域信号

import librosaimport numpy as npimport matplotlib.pyplot as pltsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseSSTFT = librosa.stft(signal, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')Y = librosa.istft(SSTFT)print(np.max(np.abs(Y-signal)))plt.plot(Y)

out: 1.1920929e-07

4. ifgram(已取消)

librosa.core.ifgram(y, sr=22050, n_fft=2048, hop_length=None, win_length=None, window=’hann’, norm=False, center=True, ref_power=1e-06, clip=True, dtype=<class ‘plex64’>, pad_mode=’reflect’)

计算瞬时功率,

librosa 0.8 版本之后,该函数取消了

5. cqt-常数Q变换

librosa.cqt(y, *, 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='constant', res_type='soxr_hq', dtype=None)

恒Q变换,指中心频率按指数规律分布,滤波带宽不同、但中心频率与带宽比为常量Q的滤波器组。它与傅立叶变换不同的是,它频谱的横轴频率不是线性的,而是基于log2为底的,并且可以根据谱线频率的不同该改变滤波窗长度,以获得更好的性能。

参数:

y:音频时间序列sr:采样率,如果为“None”使用音频自身的采样率hop_length:帧移,默认为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来fmin: 最小频率,默认C1=32.7Hzn_bins:频率箱数bins_per_octave:每个八度的箱数tuning:以箱的分数单位调整偏移量, None:调谐将从信号中自动估计;生成的 CQT 的最小频率将修改为 。fmin * 2**(tuning / bins_per_octave)

返回:

每个频率在每个时刻的恒常Q值

import matplotlib.pyplot as pltimport librosaimport numpy as np# 1. Generate and plot a constant-Q power spectrumsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseC1 = np.abs(librosa.cqt(signal, sr=fs))fig, ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)ax.set_title('Constant-Q power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")#plt.show()# 2. Limit the frequency rangeC2 = np.abs(librosa.cqt(signal, sr=fs, fmin=librosa.note_to_hz('C2'),n_bins=60))fig, ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(C2, ref=np.max),sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)ax.set_title('Constant-Q Limit the frequency range power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")#plt.show()# 3. Using a higher frequency resolutionC3 = np.abs(librosa.cqt(signal, sr=fs, fmin=librosa.note_to_hz('C2'),n_bins=80, bins_per_octave=12 * 2))fig, ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(C3, ref=np.max),sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)ax.set_title('Constant-Q higher frequency resolution power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")plt.show()

6. ICQT-常数Q逆变换

librosa.icqt(C, *, sr=22050, hop_length=512, fmin=None, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, length=None, res_type='soxr_hq', dtype=None)

import librosaimport numpy as npimport matplotlib.pyplot as pltsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseC = np.abs(librosa.cqt(signal, sr=fs))Y= librosa.icqt(C=C, sr=fs)print(np.max(np.abs(Y-signal)))plt.plot(Y)plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDqh0ccT-1683873363704)(librosa 使用初探.assets/image-0512105734836.png)]

7. hybrid_cqt

混合CQT变换

librosa.hybrid_cqt(y, *, 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='constant', res_type='soxr_hq', dtype=None)

import matplotlib.pyplot as pltimport librosaimport numpy as np# 1. Generate and plot a constant-Q power spectrumsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseC1 = np.abs(librosa.hybrid_cqt(signal, sr=fs))fig, ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)ax.set_title('hybrid_cqt power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JH7buvY7-1683873363704)(librosa 使用初探.assets/image-0512113619081.png)]

8. pseudo_cqt

librosa.pseudo_cqt(y, *, 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='constant', dtype=None)

import matplotlib.pyplot as pltimport librosaimport numpy as np# 1. Generate and plot a constant-Q power spectrumsignal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True) # sr=none 获取信号的采样频率 否则默认为22050; mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= FalseC1 = np.abs(librosa.pseudo_cqt(signal, sr=fs))fig, ax = plt.subplots()img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)ax.set_title('pseudo_cqt power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JymJvce-1683873363704)(librosa 使用初探.assets/image-0512133843022.png)]

9. vqt

librosa.vqt(y, *, sr=22050, hop_length=512, fmin=None, n_bins=84, intervals='equal', gamma=None, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='constant', res_type='soxr_hq', dtype=None)

import librosaimport numpy as npimport matplotlib.pyplot as plty, sr = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)C = np.abs(librosa.cqt(y, sr=sr))V = np.abs(librosa.vqt(y, sr=sr))fig, ax = plt.subplots(nrows=2, sharex=True, sharey=True)librosa.display.specshow(librosa.amplitude_to_db(C, ref=np.max),sr=sr, x_axis='time', y_axis='cqt_note', ax=ax[0])ax[0].set(title='Constant-Q power spectrum', xlabel=None)ax[0].label_outer()img = librosa.display.specshow(librosa.amplitude_to_db(V, ref=np.max),sr=sr, x_axis='time', y_axis='cqt_note', ax=ax[1])ax[1].set_title('Variable-Q power spectrum')fig.colorbar(img, ax=ax, format="%+2.0f dB")plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VjDgfG4-1683873363705)(librosa 使用初探.assets/image-0512135056199.png)]

如果觉得《音频信号处理库librosa》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。