当前位置: 首页 > article >正文

基于Python walch算法的音频数据频谱分析实例解析

一 概念

Welch算法是由P.D. Welch于1967年提出的一种改进的周期图法。其核心思想是将信号分成多个重叠的段,对每段信号进行加窗处理,然后计算每段的周期图,最后取平均以减少估计的方差。具体步骤如下:

  1. 分段:将原始信号分成N段,每段长度为L,段与段之间可以有重叠。
  2. 加窗:对每段信号应用窗函数,以减少边界效应。
  3. 计算周期图:对每段加窗后的信号进行快速傅里叶变换(FFT),计算其功率谱。
  4. 平均:将所有段的功率谱取平均,得到最终的功率谱密度估计。

在python的库里面集成了这个算法。充分利用这个算法来进行频谱分析,使用起来非常的便捷。

二 实例解析

1.在Python中,我们可以使用numpyscipy库来实现Welch算法。以下是一个详细的实现示例:

import numpy as np
from scipy.signal import welch
import matplotlib.pyplot as plt

# 生成示例信号
fs = 1000  # 采样频率
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 50 * t) + 0.5 * np.sin(2 * np.pi * 80 * t) + np.random.normal(0, 0.1, fs)

# 应用Welch算法
f, Pxx = welch(signal, fs, nperseg=256, noverlap=128)

2.以下是一个把音频数据解析频域图的代码实例:

import scipy.signal as signal
import matplotlib.pyplot as plt
from scipy.io import wavfile

file_path = '18_21_51.wav'
fs,data = wavfile.read(file_path)

print(fs)

f,Pxx = signal.welch(data,fs,nperseg=1024,noverlap=512)


#plat audio data power
plt.figure(figsize=(10,6))
plt.semilogy(f,Pxx)
plt.title('Audio Signal Power Sperctral Density')
plt.xlabel('Frequency(Hz)')
plt.ylabel('PSD(db/Hz)')
plt.grid(True)
plt.show()

3.下面是结果展示:


http://www.kler.cn/a/457998.html

相关文章:

  • Niushop商城商业插件_cps联盟_包装转换_视频购物_同城配送_上门预约等插件的安装方法
  • 《Vue进阶教程》第三十四课:toRefs的使用
  • 从摩托罗拉手机打印短信的简单方法
  • Redis面试相关
  • golang 编程规范 - 项目目录结构
  • Flash Attention V3使用
  • Go函数中为什么会发⽣内存泄露
  • 单片机库函数-io输出操作
  • PostgreSQL synchronous_commit 参数
  • 大模型训练(1):流水线并行
  • 【运维】Win跨局域网远程链接
  • 基本算法——分类
  • 数字图像处理
  • 学系C++:循环练习案例
  • 【bluedroid】A2dp Source播放流程源码分析(4)
  • Microsoft SQL Serve的下载与安装
  • Android笔试面试题AI答之非技术问题(3)
  • 区块链web3 基础知识,包括ABI、EIP、ERC等
  • 2011-2019年各省总抚养比数据
  • 【Nginx系列】---Nginx配置tcp转发
  • 一般方法求任意次方的近似值递推式
  • C++笔记之格式化字符串
  • python+panddleocr+文本识别训练导出测试
  • GSM长短信的消息头解析及短信体解析(包含UDHI指示语)
  • Redis是如何处理过期键的
  • 前缀树介绍