相关疑难解决方法(0)

使用1D FFT的2D FFT

我正在尝试使用1D FFT实现2D FFT.我有一个大小为4x4的矩阵(行专业)

我的算法是:

  1. 全部16个点的FFT
  2. 位反转
  3. 颠倒
  4. FFT上16点
  5. 位反转
  6. 颠倒

它是否正确?

signal-processing fft

9
推荐指数
1
解决办法
9831
查看次数

在MATLAB中的numpy与FFT中的FFT不具有相同的结果

我有一个复数的向量(可以在这里找到),包括Python和MATLAB.我计算ifft与-transformation

ifft(<vector>) 
Run Code Online (Sandbox Code Playgroud)

在MATLAB和

np.fft.ifft(<vector>)
Run Code Online (Sandbox Code Playgroud)

在Python中.我的问题是我得到两个完全不同的结果,即虽然Python中的向量很复杂,但它不在MATLAB中.虽然MATLAB中的一些组件为零,但Python中没有组件.这是为什么?在fft按预期-version工作.最小值在附近1e-10,即不太低.

python matlab numpy fft

6
推荐指数
1
解决办法
2786
查看次数

我应该如何将 scipy.fftpack 输出向量相乘?

scipy.fftpack.rfft函数将 DFT 作为浮点向量返回,在实部和复部之间交替。这意味着要一起乘以 DFT(对于卷积),我将不得不“手动”进行复杂的乘法,这似乎非常棘手。这一定是人们经常做的事情 - 我假设/希望有一个简单的技巧可以有效地做到这一点,但我没有发现?

基本上我想修复此代码,以便两种方法都给出相同的答案:

import numpy as np
import scipy.fftpack as sfft

X = np.random.normal(size = 2000)
Y = np.random.normal(size = 2000)
NZ = np.fft.irfft(np.fft.rfft(Y) * np.fft.rfft(X))
SZ = sfft.irfft(sfft.rfft(Y) * sfft.rfft(X))    # This multiplication is wrong

NZ
array([-43.23961083,  53.62608086,  17.92013729, ..., -16.57605207,
     8.19605764,   5.23929023])
SZ
array([-19.90115323,  16.98680347,  -8.16608202, ..., -47.01643274,
    -3.50572376,  58.1961597 ])
Run Code Online (Sandbox Code Playgroud)

N.B. I am aware that fftpack contains a convolve function, but I only need to fft one half of the transform …

python scipy complex-numbers fftpack

5
推荐指数
1
解决办法
721
查看次数

移调时的numpy和octave不同

首先我知道在这里有一个相同的问题答案:Matlab中的FFT和numpy/scipy给出不同的结果, 但那里给出的答案对我做的测试不起作用:

当我从numpy.fft做一个fft我得到以下结果:

In [30]: numpy.fft.fft(numpy.array([1+0.5j, 3+0j, 2+0j, 8+3j]))
Out[30]: array([ 14.+3.5j,  -4.+5.5j,  -8.-2.5j,   2.-4.5j])
Run Code Online (Sandbox Code Playgroud)

这与我的八度音程的输出完全相同)

octave:39> fft([1+0.5j,3+0j,2+0j,8+3j])
ans =
Columns 1 through 3:
14.0000 +  3.5000i   -4.0000 +  5.5000i   -8.0000 -  2.5000i
Column 4:
2.0000 -  4.5000i
Run Code Online (Sandbox Code Playgroud)

但如果我将列表转换为octave和python我得到:

In [9]: numpy.fft.fft(numpy.array([1+0.5j, 3+0j, 2+0j, 8+3j]).transpose())
Out[9]: array([ 14.+3.5j,  -4.+5.5j,  -8.-2.5j,   2.-4.5j])
Run Code Online (Sandbox Code Playgroud)

和八度:

octave:40> fft([1+0.5j,3+0j,2+0j,8+3j]')
ans =

14.0000 -  3.5000i
2.0000 +  4.5000i
-8.0000 +  2.5000i
-4.0000 -  5.5000i
Run Code Online (Sandbox Code Playgroud)

我也尝试在python中重塑,但这会导致:

In [33]: numpy.fft.fft(numpy.reshape(numpy.array([1+0.5j,3+0j,2+0j,8+3j]), (4,1)))
Out[33]: 
array([[ 1.+0.5j],
   [ 3.+0.j ], …
Run Code Online (Sandbox Code Playgroud)

numpy fft octave

3
推荐指数
1
解决办法
334
查看次数