You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python复现Adobe Audition的频率分析频谱图

复现Adobe Audition频谱图的修改方案

你当前的结果和Audition不一致核心是三个参数没对齐:音频未做满量程归一化、Welch默认输出功率谱密度而非功率谱、轴范围未匹配。按照以下步骤修改即可:

  • 第一步:读取WAV后先把音频数据归一化到[-1, 1]区间。如果是16位WAV除以32768,24位除以8388608,通用做法是除以对应位深的最大正值,这样得到的满量程信号0dBFS对应振幅1,和Audition的计算基准一致。
  • 第二步:修改scipy.signal.welch的scaling参数为spectrum,默认的density输出的是每Hz的功率密度,和Audition展示的单FFT bin总功率数值逻辑不同。
  • 第三步:显式设置窗口重叠率为50%,和Audition默认的重叠参数对齐,保证平均逻辑一致。
  • 第四步:绘图时匹配Audition的默认轴范围:X轴设为20Hz采样率/2,Y轴设为-120dB0dB,用dBFS作为单位。

修改后的代码如下:

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

file2 = r'G:/200460-6-5-0_Mono.wav'
file3 = r'G:/205013-6-0-0_Mono.wav'

def get_audition_style_spectrum(file_path, fft_size=512):
    fs, sig = wavfile.read(file_path)
    # 归一化到[-1,1],适配16位WAV,其他位深修改对应除数即可
    sig = sig.astype(np.float32) / 32768.0
    # 对齐Audition参数:blackmanharris窗,50%重叠,输出功率谱而非密度
    f, Pxx = signal.welch(
        sig, fs, 
        nperseg=fft_size, 
        window='blackmanharris',
        noverlap=fft_size//2,
        scaling='spectrum'
    )
    # 转dBFS,加极小值避免log10(0)报错
    pxx_db = 10 * np.log10(Pxx + 1e-12)
    return f, pxx_db

# 计算两个文件的频谱
f1, pxx1 = get_audition_style_spectrum(file2)
f2, pxx2 = get_audition_style_spectrum(file3)

# 绘图对齐Audition样式
plt.semilogx(f1, pxx1)
plt.semilogx(f2, pxx2)
plt.xlabel('频率 [Hz]')
plt.ylabel('振幅 [dBFS]')
# 匹配Audition默认轴范围,可根据需求调整
plt.xlim([20, 20000])
plt.ylim([-120, 0])
plt.grid(which='both', linestyle='-', alpha=0.3)
plt.show()

如果需要复现Audition默认的「中心点频率数据」而非全选平均,只需要把Welch方法替换为取信号中间长度为fft_size的片段,加窗后做单次FFT再取模平方转dBFS即可,无需分帧平均。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:30:00