Python语音信号时域波形可视化:如何让两个波形横坐标位置一致
Python语音信号时域波形可视化:如何让两个波形横坐标位置一致
本文介绍了如何使用Python库librosa和matplotlib将两个语音信号的时域波形可视化,并重点讲解了如何通过调整时间轴使两个波形横坐标位置完全一致。
问题:
在使用librosa库加载音频文件并绘制时域波形时,两个波形的时间轴可能不一致,导致横坐标位置不匹配。这会影响对两个波形进行比较和分析。
解决方案:
可以通过调整两个波形的时间轴来实现横坐标位置的完全一致,具体方法为:找到两个波形中时间轴长度较短的一个,将较长的时间轴按照较短的时间轴进行截取,使得两个时间轴的长度完全一致。
代码示例:
def displayWaveform(sample1, sample2): # 显示语音时域波形
'''
display waveform of a given speech sample
:param sample_name: speech sample name
:param fs: sample frequency
:return:
'''
samples1, sr1 = librosa.load(sample1, sr=16000)
samples2, sr2 = librosa.load(sample2, sr=16000)
min_len = min(len(samples1), len(samples2))
samples1 = samples1[:min_len]
samples2 = samples2[:min_len]
print(len(samples1), sr1)
print(len(samples2), sr2)
time = np.arange(0, min_len) * (1.0 / sr1)
plt.figure(figsize=(18, 8))
plt.subplot(211)
plt.plot(time, samples1)
plt.title('原音频时域波形')
plt.xlabel('时长(秒)')
plt.ylabel('振幅')
plt.subplot(212)
plt.plot(time, samples2)
plt.title('降噪后音频时域波形')
plt.xlabel('时长(秒)')
plt.ylabel('振幅')
plt.subplots_adjust(hspace=0.5) # 调整子图间距
# plt.savefig('your dir\语音信号时域波形图', dpi=600)
plt.show()
代码解释:
- 使用
librosa.load()函数加载两个音频文件,并获取音频信号和采样率。 - 使用
min()函数找到两个波形中时间轴长度较短的长度。 - 使用切片操作将较长的时间轴截取至与较短的时间轴长度相同。
- 使用
np.arange()函数生成时间轴,并根据采样率计算时间。 - 使用
plt.plot()函数绘制两个波形,并设置标题、横纵坐标标签。 - 使用
plt.subplots_adjust()函数调整子图间距。
最终效果:
通过以上代码,两个波形的横坐标位置将完全一致,方便进行比较和分析。
其他优化:
- 可以使用
matplotlib.pyplot库的其他功能来调整图形外观,例如设置颜色、线型、字体等。 - 可以使用
plt.savefig()函数将图形保存到文件。
总结:
本文介绍了如何使用Python库librosa和matplotlib将两个语音信号的时域波形可视化,并重点讲解了如何通过调整时间轴使两个波形横坐标位置完全一致。希望本文能够帮助您更好地使用Python进行语音信号处理和可视化。
原文地址: https://www.cveoy.top/t/topic/n7MH 著作权归作者所有。请勿转载和采集!