【问题标题】:Get FFT waveform in python to match Adobe Audition Frequency Analysis在 python 中获取 FFT 波形以匹配 Adob​​e Audition 频率分析
【发布时间】:2021-10-19 18:55:20
【问题描述】:

对于找到 here 的 wav 文件,我想匹配 Adob​​e Audition 中显示的频谱:

目前,使用我使用的代码:

import scipy.io.wavfile as wavfile
import scipy
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 ("Frequency sampling", fs_rate)
l_audio = len(signal.shape)
print ("Channels", l_audio)
if l_audio == 2:
    signal = signal.sum(axis=1) / 2
N = signal.shape[0]
print ("Complete Samplings N", N)
secs = N / float(fs_rate)
print ("secs", secs)
Ts = 1.0/fs_rate # sampling interval in time
print ("Timestep between samples Ts", Ts)
t = np.arange(0, secs, Ts) # time vector as scipy arange field / numpy.ndarray
FFT = scipy.fftpack.fft(signal)
FFT_side = FFT[range(N//2)] # one side FFT range
freqs = scipy.fftpack.fftfreq(signal.size, t[1]-t[0])
fft_freqs = np.array(freqs)
freqs_side = freqs[range(N//2)] # one side frequency range
fft_freqs_side = np.array(freqs_side)

plt.plot(freqs_side/1000, 2.0/N * abs(FFT_side))
plt.xlabel('Frequency (kHz)')
plt.ylabel('Count single-sided')

plt.show()

我明白了这个情节:

您能帮我得到与 Adob​​e Audition 频率分析窗口中显示的图一样的图吗?

任何帮助将不胜感激!

【问题讨论】:

  • 首先将绘图上的 x 轴更改为像 Audition 中的对数轴
  • @Woodford,谢谢,我添加了plt.semilogx(freqs_side/1000, 2.0/N * abs(FFT_side)) 这一行。情节有点变化......那么如何将其改为一条线?

标签: python fft frequency-analysis


【解决方案1】:

使用来自scipy.signal.welch的示例:

fs_rate, signal = wavfile.read(file1)
f, Pxx_den = scipy.signal.welch(signal, fs_rate, nperseg=512, window='blackmanharris')
plt.semilogy(f, Pxx_den)
plt.semilogx(f, Pxx_den)
plt.xlabel('frequency [Hz]')
plt.show()

y 轴单位已关闭,但这应该可以帮助您开始。

【讨论】:

  • 为此,我必须将 wav 文件转换为单声道吗?我收到错误ValueError: x and y must have same first dimension, but have shapes (2,) and (14004, 2)。谢谢!
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
相关资源
最近更新 更多