【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】3.20 用NumPy进行音频特征提取
3.20 用NumPy进行音频特征提取
目录
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 进行音频特征提取的方法:
-
频谱图提取
频谱图是通过短时傅里叶变换(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,<
代码学习,前言技术分享,深度分析编程技术,普及科普编程技术,天天都要敲代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)