python中从语音信号得到基频并显示的代码
时间: 2024-05-08 20:21:32 浏览: 273
要从语音信号中获取基频,您可以使用自相关函数和自适应阈值来找到基频周期。下面是一个示例代码,用于从语音信号中提取基频并显示:
```python
import numpy as np
import librosa
# 加载语音信号
signal, sr = librosa.load('audio_file.wav', sr=None)
# 计算自相关函数
corr = librosa.autocorrelate(signal, max_size=5000)
corr = corr[len(corr)//2:]
# 自适应阈值
threshold = np.mean(corr)
# 找到基频周期
periods = np.where(corr > threshold)[0]
period = periods[0] if len(periods) > 0 else 0
# 计算基频并显示
pitch = sr / period if period > 0 else 0
print('Pitch:', pitch)
```
请注意,这只是一个简单的示例代码,可能需要进行适当的调整和优化来适应您的特定应用场景。
相关问题
python中从语音信号获取基频的代码
获取基频(即音高)的常见方法是自相关。自相关是一种信号处理技术,可用于确定信号中的周期性。以下是使用Python中的自相关来获取基频的示例代码:
首先,使用Python的`librosa`库加载音频文件并提取基频:
```python
import librosa
# load audio file
audio_data, sr = librosa.load('audio.wav')
# extract fundamental frequency
f0, voiced_flag, voiced_probs = librosa.pyin(audio_data, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'))
```
然后,您可以将基频(即f0)作为输出进行进一步的分析或处理。
请注意,这是一种基本的方法,可能需要进行一些调整以适应您的特定应用程序。
python代码,输入一段语音信号分析基音频率,绘制基频曲线
下面是Python代码,使用自相关函数(ACF)方法分析基频频率,并绘制基频曲线:
```python
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal
import scipy.io.wavfile as wav
# 读取wav文件
fs, data = wav.read('test.wav')
# 取其中一路声道
signal = data[:, 0]
# 设置自相关函数的最大延迟
max_delay = int(fs / 50) # 最大延迟为20ms
# 计算自相关函数
acf = signal.correlate(signal, signal, mode='full')[-max_delay:]
# 取自相关函数的前半部分
acf_half = acf[:len(acf) // 2]
# 寻找基音周期
period = np.argmax(acf_half) + 1
# 计算基音频率
fund_freq = fs / period
# 绘制基频曲线
plt.plot(acf_half)
plt.xlabel('Delay (samples)')
plt.ylabel('Autocorrelation')
plt.title('Fundamental Frequency = %.2f Hz' % fund_freq)
plt.show()
```
需要注意的是,这段代码假设输入的语音信号是单声道的,如果是双声道的则需要对两路信号分别进行分析。另外,自相关函数方法只适用于基频比较稳定的语音信号,对于噪声比较大或者基频变化比较快的信号可能会有较大误差。
阅读全文