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

发布于:2025-02-11 ⋅ 阅读:(112) ⋅ 点赞:(0)

一 概念

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.下面是结果展示:


网站公告

今日签到

点亮在社区的每一天
去签到