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

请求验证萨克斯与单簧管声波离散傅里叶变换绘图正确性

声波离散傅里叶变换(DFT)绘图正确性确认

我正在对萨克斯和单簧管的声波文件执行离散傅里叶变换(DFT),但生成的变换绘图与预期不符——原本预期FFT频谱会更分散,实际结果却集中在很小的区域内。我已确认使用了正确的rfft函数,采样率为44100Hz,时间步长tau设置为1/44100或时间数组的首个非零点,代码逻辑看似无误,但仍对绘图结果存疑,希望确认这些绘图是否正确。

相关文件

  • 萨克斯声波文件(saxophone.txt)
  • 单簧管声波文件(clarinet.txt)

绘图及对应代码

绘图1(由Part B代码生成)

萨克斯与单簧管DFT时域绘图

Part B代码

import numpy as np
import matplotlib.pyplot as plt
from numpy import cos, sqrt, exp, sin, pi, array, real, imag
from mpl_toolkits.mplot3d import Axes3D   # import 3D axes
from matplotlib import cm
from scipy.integrate import odeint
from scipy.fft import fft, ifft, rfft, dct, dst, idct, irfft
sax=np.loadtxt('saxophone.txt')
clar=np.loadtxt('clarinet.txt')

FT1=rfft(sax)
FT2=rfft(clar)
tsax=np.linspace(0,len(FT1)/44100,len(FT1))
tclar=np.linspace(0,len(FT2)/44100,len(FT2))
plt.plot(tsax,real(FT1))
plt.xlabel('time (s)')
plt.title('Saxophone Soundwave Discrete Fourier Transform')
plt.figure()
plt.plot(tclar,real(FT2))
plt.xlabel('time (s)')
plt.title('Clarinet Soundwave Discrete Fourier Transform')
plt.show()  

绘图2(由Part A & C代码生成)

声波时域与频谱绘图1

绘图3(由Part A & C代码生成)

声波时域与频谱绘图2

Part A & C代码

import numpy as np
import matplotlib.pyplot as plt
from numpy import cos, sqrt, exp, sin, pi, array, real, imag
from mpl_toolkits.mplot3d import Axes3D   # import 3D axes
from matplotlib import cm
from scipy.integrate import odeint
from scipy.fft import fft, ifft, rfft, dct, dst, idct, irfft
sax=np.loadtxt('saxophone.txt')
clar=np.loadtxt('clarinet.txt')

plt.figure(figsize=(12, 12))
plt.subplots_adjust(hspace=.25)
plt.subplots_adjust(wspace=1)
FT1=rfft(sax)
FT2=rfft(clar)
N=len(FT1)
tsax=np.linspace(0,len(FT1)/44100,len(FT1))
tclar=np.linspace(0,len(FT2)/44100,len(FT2))
tau=tsax[1]
freq=array([k/(2*N*tau) for k in range(N)])
tsax=np.linspace(0,len(sax)/44100,len(sax))
tclar=np.linspace(0,len(clar)/44100,len(clar))
plt.subplot(221)
plt.plot(tsax, sax)
plt.xlabel('time (s)')
plt.title('Saxophone Soundwave')
plt.subplot(223)
plt.plot(tclar, clar)
plt.xlabel('time (s)')
plt.title('Clarinet Soundwave')
plt.subplot(222)
plt.plot(freq/1000, abs(real(FT1)))
plt.xlabel('Frequency (kHz)')
plt.title('Saxophone Soundwave Discrete Fourier Transform Coefficients vs Frequency')
plt.subplot(224)
plt.plot(freq/1000, abs(real(FT2)))
plt.xlabel('Frequency (kHz)')
plt.title('Clarinet Soundwave Discrete Fourier Transform Coefficients vs Frequency')
plt.show()  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:29:54