用librosa提取音频频率
时间: 2024-03-02 11:49:56 浏览: 25
使用Librosa库提取音频频率需要进行以下步骤:
1. 载入音频文件
使用Librosa库中的load函数可以载入音频文件,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
```
2. 提取音频信号的频谱
使用Librosa库中的stft函数可以将音频信号转化为频域信号,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
```
3. 提取频域信号的频率
使用Librosa库中的fft_frequencies函数可以提取频域信号的频率,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
# 提取频域信号的频率
freqs = librosa.fft_frequencies(sr=sr, n_fft=len(D))
```
这样就可以提取音频信号的频率了。需要注意的是,这里提取的是整个音频信号的频率,如果需要提取某一段时间内的频率,需要先使用Librosa库中的time_to_samples函数将时间转化为样本索引,再提取相应时间段内的频率。
相关问题
用librosa提取音频频率,以时间为维度
使用Librosa库提取音频频率,以时间为维度需要进行以下步骤:
1. 载入音频文件
使用Librosa库中的load函数可以载入音频文件,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
```
2. 提取音频信号的频谱
使用Librosa库中的stft函数可以将音频信号转化为频域信号,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
```
3. 提取频域信号的频率和时间
使用Librosa库中的fft_frequencies函数可以提取频域信号的频率,使用Librosa库中的frames_to_time函数可以将频域信号的帧数转化为时间,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
# 提取频域信号的频率
freqs = librosa.fft_frequencies(sr=sr, n_fft=len(D))
# 将频域信号的帧数转化为时间
times = librosa.frames_to_time(range(len(D[0])), sr=sr, hop_length=hop_length)
```
其中,hop_length是指每个帧的长度,可以根据需要进行调整。
4. 提取不同时间段内的频率
根据需要,可以使用numpy库中的切片操作,提取不同时间段内的频率,例如:
```python
import librosa
import numpy as np
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
# 提取频域信号的频率
freqs = librosa.fft_frequencies(sr=sr, n_fft=len(D))
# 将频域信号的帧数转化为时间
hop_length = 512
times = librosa.frames_to_time(range(len(D[0])), sr=sr, hop_length=hop_length)
# 提取不同时间段内的频率
start_time = 0.0 # 起始时间
end_time = 1.0 # 结束时间
start_frame = int(start_time * sr / hop_length)
end_frame = int(end_time * sr / hop_length)
freqs_in_time_range = D[:, start_frame:end_frame]
```
这样就可以提取不同时间段内的频率了。需要注意的是,每个帧的长度(即hop_length)要根据需要进行调整,以保证提取出来的频率数据精度和准确度。
python使用librosa提取音频频率4000k以上的fft特征
可以使用Librosa库中的stft函数来计算音频的短时傅里叶变换(short-time Fourier transform,STFT),然后取得频率大于等于4000Hz的FFT系数。
以下是一个示例代码:
```python
import librosa
# 读取音频文件
y, sr = librosa.load('audio.wav')
# 计算短时傅里叶变换
stft = librosa.stft(y)
# 取得频率大于等于4000Hz的FFT系数
freqs = librosa.fft_frequencies(sr=sr, n_fft=stft.shape[0])
idx = freqs >= 4000
fft = stft[idx, :]
# 将FFT系数转化为能量谱
power = librosa.power_to_db(np.abs(fft)**2)
# 可视化能量谱
librosa.display.specshow(power, sr=sr, y_axis='linear', x_axis='time')
```
在上述代码中,`librosa.load`函数用于读取音频文件,返回音频的时域信号`y`和采样率`sr`。`librosa.stft`函数用于计算短时傅里叶变换,返回STFT系数`stft`。`librosa.fft_frequencies`函数用于计算FFT变换的频率,`idx`变量用于取得大于等于4000Hz的频率对应的FFT系数。最后,将FFT系数转化为能量谱,并用`librosa.display.specshow`函数进行可视化。
希望对你有所帮助!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)