• 音频信号的频谱分析实例


    在前面的文章 信号频谱分析与功率谱密度 中,我们初步探讨了信号频谱分析的概念,并介绍了其数学工具。本篇文章将结合实例,进一步探讨频谱分析在音频信号处理中的应用。

    音频信号的频谱分析是一种将时域中的音频信号转换为频域表示的过程,从而可以观察信号在不同频率上的能量分布。这种分析可以帮助我们理解音频信号的频率成分、谐波结构以及其他特征,对于音频处理、音乐分析、语音识别等应用具有重要意义。

    以下是进行音频信号频谱分析的基本步骤:

    1. 采样与预处理:从原始音频信号中进行采样,将连续的音频信号转换为离散的采样点。通常还需要对采样数据进行预处理,如去除直流分量、归一化等。

    2. 窗函数应用:为了在频谱分析中减少频谱泄露问题,通常会将信号分成一小段一小段,并在每一段上应用窗函数。常用的窗函数包括汉明窗、矩形窗等。

    3. 傅里叶变换:对每个窗口内的采样点进行傅里叶变换,将时域信号转换为频域信号。傅里叶变换可以得到信号在不同频率上的振幅和相位信息。

    4. 频谱表示:将得到的频谱数据以图形方式表示,通常使用频谱图显示信号在不同频率上的能量分布。横轴表示频率,纵轴表示振幅或能量。

    5. 谱线解释:分析频谱图中的峰值、谷值、频率分量,了解信号的频率特征,是否存在谐波结构,是否有噪音等。

    6. 功率谱密度计算:从频谱中计算出信号的功率谱密度,表示不同频率范围内的信号功率。功率谱密度图可以更清晰地表示信号在频域上的能量分布。

    7. 降噪与滤波:根据频谱分析的结果,可以进行降噪和滤波操作,去除不需要的频率分量或噪音,提升信号质量。

    8. 特征提取:从频谱图中提取有用的特征,用于后续的音频处理任务,如音乐分类、声音识别等。

    常用的工具包括Python中的NumPy、SciPy和Matplotlib库,以及专门用于音频信号处理的Librosa库,它们提供了丰富的函数和方法来进行音频信号的频谱分析和处理。

    AudioSet数据集

    AudioSet是由Google开发的一个大规模音频数据集,用于各种音频分析任务,如声音识别、音频分类、音频事件检测等。该数据集包含了数千小时的音频剪辑,涵盖了数千种不同的音频事件和环境。

    每个音频剪辑都与一个或多个标签相关联,这些标签描述了音频中出现的声音事件或环境。例如,一段音频剪辑可以被标记为"狗叫声"、“车辆行驶声”、"咖啡厅环境声"等。

    AudioSet数据集的特点包括:

    1. 大规模:包含数千小时的音频数据,涵盖了丰富多样的声音事件和环境。
    2. 标签丰富:每个音频剪辑都有一个或多个标签,用于描述其中出现的声音事件或环境。
    3. 数据多样性:包括了来自不同国家、地区和环境的音频数据,具有很强的多样性。
    4. 用途广泛:适用于声音识别、音频分类、音频事件检测等多种音频分析任务。

    如果想要访问和使用AudioSet数据集,可以前往其官方网站(https://research.google.com/audioset/)进行下载和了解更多信息。请注意,由于数据集的规模较大,可能需要一定的存储空间和计算资源来处理和分析这些数据。

    我从中选取了2个进行示例:

    1. WOP Race Truck Driving Off 7.3 Power Stroke Diesel

    WOP Race Truck Driving Off

    分析这段音频的频谱:

    import librosa
    import librosa.display
    import matplotlib.pyplot as plt
    import numpy as np
    
    # Load audio file
    audio_path = 'test.wav'
    y, sr = librosa.load(audio_path)
    
    # Plot original waveform
    plt.figure(figsize=(10, 6))
    librosa.display.waveshow(y, sr=sr)
    plt.title('Original Waveform')
    plt.xlabel('Time')
    plt.ylabel('Amplitude')
    plt.show()
    
    # Compute and plot spectrogram
    D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)
    plt.figure(figsize=(10, 6))
    librosa.display.specshow(D, sr=sr, x_axis='time', y_axis='log')
    plt.colorbar(format='%+2.0f dB')
    plt.title('Spectrogram')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    原始波形图:

    原始波形图

    频谱图:

    频谱图

    可以边听音频边对比频谱图,加油、刹车、再加油,还挺明显的吧。

    1. My first live steps with KORG esx-1 [7umb9yJpkKU]

    My first live [7umb9yJpkKU]

    与前面一样,分析这段音频的频谱:

    原始波形图

    频谱图

    能听出几种声音呢?

    公众号 | FunIO
    微信搜一搜 “funio”,发现更多精彩内容。
    个人博客 | blog.boringhex.top

  • 相关阅读:
    Spring中事务的几种失效场景
    iframe之间传递数据笔记
    一款pdf工具
    vue使用postcss-pxtorem实现自适应
    day11力扣打卡
    js 数组合并的方式
    壳聚糖-聚乙二醇-叠氮,叠氮-PEG-壳聚糖,Chitosan-PEG-N3
    一文能读懂车载与Android的关系
    C#中使用python(基于Process-C#自带库)
    NUUO摄像头远程命令执行漏洞复现 [附POC]
  • 原文地址:https://blog.csdn.net/PengWon/article/details/133939677