【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】3.20 用NumPy进行音频特征提取

在这里插入图片描述

3.20 用NumPy进行音频特征提取

目录
Syntax error in textmermaid version 10.9.0
3.20.1 音频特征提取的基本概念

音频特征提取是从音频信号中提取有用信息的过程。这些特征可以用于各种任务,如音频分类、语音识别、音乐推荐等。音频特征可以分为时域特征和频域特征两大类。

  • 时域特征:直接从时域信号中提取,常见的时域特征包括:

    • 零交叉率(Zero Crossing Rate):信号在一段时间内穿过零点的次数。
    • 能量和过零率(Energy and Zero Crossing Rate):信号的能量和过零率。
    • 峰值检测(Peak Detection):信号的峰值位置。
  • 频域特征:通过对信号进行频域转换(如傅里叶变换)后提取,常见的频域特征包括:

    • 频谱图(Spectrogram):信号在不同时间段的频率分布。
    • 梅尔频率倒谱系数(Mel Frequency Cepstral Coefficients, MFCC):反映信号在梅尔频率尺度上的倒谱特征。
    • 基频(Fundamental Frequency):信号的主频率。
3.20.2 使用NumPy进行音频特征提取的方法

NumPy 是一个强大的科学计算库,可以用于处理和分析音频信号。以下是一些使用 NumPy 进行音频特征提取的方法:

  1. 频谱图提取

    频谱图是通过短时傅里叶变换(Short-Time Fourier Transform, STFT)生成的,可以显示信号在不同时间段的频率分布。

    • 原理介绍:STFT 将音频信号分成多个短时窗口,对每个窗口进行傅里叶变换,生成频谱图。
    • 代码实现
      import numpy as np
      import matplotlib.pyplot as plt
      from scipy.io import wavfile
      
      # 读取音频文件
      fs, x = wavfile.read('audio.wav')  # 读取音频文件,fs 为采样频率,x 为音频数据
      
      # 定义短时窗口长度和重叠率
      window_size = 1024  # 窗口长度
      overlap = 512  # 重叠长度
      
      # 计算短时傅里叶变换
      def stft(x, window_size, overlap):
          hop_size = window_size - overlap
          num_frames = 1 + int((len(x) - window_size) / hop_size)  # 计算帧数
          frames = [x[i * hop_size:i * hop_size + window_size] for i in range(num_frames)]  # 提取帧
          frames = np.array(frames)
          frames = np.fft.fft(frames)  # 对每个帧进行傅里叶变换
          return frames
      
      # 生成频谱图
      X = stft(x, window_size, overlap)
      
      # 绘制频谱图
      plt.figure(figsize=(15,<
posted @   爱上编程技术  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示