FFT指数形式最终出现在嘈杂的奥迪车上

2024-05-20 08:01:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python脚本,尝试对FFT数据的各个阶段进行操作。所以我现在要做的第一步就是让基本的东西发挥作用:

  1. 进行FFT
  2. 规范化数据
  3. 分离振幅和相位
  4. 把电流和相位放在一起
  5. 做IFFT
  6. 检查是否听起来应该是这样

到目前为止,我已经成功地完成了第1步和第2步,所以用numpy-RFFT进行FFT是正确的,然后标准化工作也很好,所以当执行IFFT并再次播放它时,它听起来应该是正确的。然而,分离安培和相位,并把它们放在一起会引入很多噪音,所以出了问题。下面是我使用Numpy和Scipy模块的代码:

samplerate, data = wavfile.read(location)
audio = data.T[0] # first track of audio    
fftData = np.fft.rfft(audio[sample:], length)
fftData = np.divide(fftData, (np.median(fftData))) #normalization with median value
phas = np.angle(fftData) #calculating the phases
amps = np.abs(fftData) #calculating the amplitudes
#here I'd do the phase manipulation
phas = np.exp(phas) #transforming phases to exponential form
amps = np.multiply(amps,phas) #multiplying the amps with the exp form of phases to get the exponential form of the complex number
output = np.fft.irfft(amps).astype(dtype=np.float32) #doing the IRFFT, I use float32 because I play it back with py audio which uses float32.

那我做错什么了?我从这里读到:https://www.intmath.com/complex-numbers/5-exponential-form.php复数可以是指数形式,所以相位和振幅可以是单独的数组。根据这个位置,数据应该是安培数(幅度)和相位指数形式的乘积。所以我有什么误解,因为它听起来真的很吵?我甚至尝试正常化后,再次加入阶段和安培,但它没有工作


Tags: ofthe数据fftformwithnp阶段
1条回答
网友
1楼 · 发布于 2024-05-20 08:01:39

你可以使用指数形式的阶段,但你必须使用复杂的指数。更具体地说,在您的例子中,phas = np.angle(fftData0被计算为实值角度(以弧度为单位),因此exp的相角参数必须首先乘以1j

正确的复指数应该是:

phas = np.exp(np.multiply(1j, phas))

相关问题 更多 >