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

使用Python生成FFT波形匹配Adobe Audition频率分析结果求助

频谱匹配调整方案

你当前代码与Adobe Audition频谱结果不一致的核心原因是四个配置差异,按以下步骤调整即可:

核心调整点

  • 增加窗函数:Audition默认使用汉宁窗抑制频谱泄露,直接对原始信号做FFT会出现能量分布偏差
  • 幅度单位转换为dB:Audition频谱纵坐标为对数分贝单位(通常为dBFS),你当前使用的是线性幅度刻度
  • 归一化逻辑对齐:需要结合音频位深做满量程归一化,匹配Audition的0dBFS满量程参考标准
  • 可选:频率轴改为对数刻度:如果Audition频谱使用对数频率轴,可新增x轴刻度配置

完整可运行调整后代码

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

file1 = r'G:/file1.wav'

fs_rate, signal = wavfile.read(file1)
print("采样频率", fs_rate)
l_audio = len(signal.shape)
print("声道数", l_audio)
if l_audio == 2:
    signal = signal.sum(axis=1) / 2
N = signal.shape[0]
print("总采样点数 N", N)
secs = N / float(fs_rate)
print("音频时长", secs)
Ts = 1.0/fs_rate
print("采样间隔 Ts", Ts)
t = np.arange(0, secs, Ts)

# 1. 新增汉宁窗,匹配Audition默认窗函数配置
window = np.hanning(N)
signal_windowed = signal * window

# 2. FFT计算
FFT = scipy.fftpack.fft(signal_windowed)
FFT_side = FFT[:N//2]
freqs = scipy.fftpack.fftfreq(signal.size, Ts)
freqs_side = freqs[:N//2]

# 3. 幅度转dBFS,对齐Audition刻度
# 16位音频最大幅值为32767,若为24位可替换为8388607
max_amp = 32767
amplitude = 2.0/N * np.abs(FFT_side)
amplitude_dB = 20 * np.log10(amplitude / max_amp)

plt.plot(freqs_side/1000, amplitude_dB)
plt.xlabel('频率 (kHz)')
plt.ylabel('幅度 (dBFS)')
# 可选:如果Audition用对数频率轴,取消下面一行注释
# plt.xscale('log')
# 匹配Audition常用纵坐标范围
plt.ylim(-120, 0)
plt.grid(True, alpha=0.3)
plt.show()

额外参数校准说明

如果仍有细微差异,可调整两个参数匹配Audition的设置:

  • FFT长度:Audition频率分析窗口可设置FFT大小(1024/2048/4096等),如果不是对全量音频做FFT,可截取对应长度的音频片段再计算
  • 窗函数类型:如果Audition设置了汉明窗、矩形窗等其他窗函数,把np.hanning替换为对应窗函数即可

内容的提问来源于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:15:03