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()

代码解释:

  1. 使用librosa.load()函数加载两个音频文件,并获取音频信号和采样率。
  2. 使用min()函数找到两个波形中时间轴长度较短的长度。
  3. 使用切片操作将较长的时间轴截取至与较短的时间轴长度相同。
  4. 使用np.arange()函数生成时间轴,并根据采样率计算时间。
  5. 使用plt.plot()函数绘制两个波形,并设置标题、横纵坐标标签。
  6. 使用plt.subplots_adjust()函数调整子图间距。

最终效果:

通过以上代码,两个波形的横坐标位置将完全一致,方便进行比较和分析。

其他优化:

  • 可以使用matplotlib.pyplot库的其他功能来调整图形外观,例如设置颜色、线型、字体等。
  • 可以使用plt.savefig()函数将图形保存到文件。

总结:

本文介绍了如何使用Python库librosa和matplotlib将两个语音信号的时域波形可视化,并重点讲解了如何通过调整时间轴使两个波形横坐标位置完全一致。希望本文能够帮助您更好地使用Python进行语音信号处理和可视化。

Python语音信号时域波形可视化:如何让两个波形横坐标位置一致

原文地址: https://www.cveoy.top/t/topic/n7MH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录