我有一个超级简单的测试代码来计算MATLAB中的FFT,我试图将其转换为Python,但计算值不匹配.

MATLAB Code:

rect=zeros(100,1);
ffrect=zeros(100,1);
for j=45:55
    rect(j,1)=1;
end

frect=fft(rect);

Python Code

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, ifft, fftshift, ifftshift

rect = np.zeros((100, 1))

for j in range(44, 55):
   rect[j] = 1

frect = fft(rect)

Problem:

使用MatLab和Python计算的frect的计算值不匹配(甚至看起来相似).由Python计算的值对于复数分量只有零值,对于实数分量只有1.

推荐答案

除非您使用axis参数另行指定,否则scipy.fft.fft将计算最后一个轴上的FFT.

在Python版本中,输入数组的形状为(100, 1),因此要计算(100, 1)个不同的1点FFT.

要计算单个100点的FFT,可以

  • reshape rect以使其rect个条目处于最后一维(例如,通过使其成为具有形状(100,)的1D矢量,或具有形状(1, 100)的2D单行数组),或者
  • scipy.fft.fft的时候要过axis=0
fft(rect.reshape(-1))
# or
fft(rect, axis=0)

Python相关问答推荐

如何将双框框列中的成对变成两个新列

Python 约束无法解决n皇后之谜

如果值不存在,列表理解返回列表

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

在vscode上使用Python虚拟环境时((env))

从spaCy的句子中提取日期

如何更新pandas DataFrame上列标题的de值?

如何启动下载并在不击中磁盘的情况下呈现响应?

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

如何更改groupby作用域以找到满足掩码条件的第一个值?

人口全部乱序 - Python—Matplotlib—映射

Python pint将1/华氏度转换为1/摄氏度°°

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'

根据Pandas中带条件的两个列的值创建新列

如何将返回引用的函数与pybind11绑定?

python的文件. truncate()意外地没有截断'

pytest、xdist和共享生成的文件依赖项

无法使用请求模块从网页上抓取一些产品的名称

为什么这个正则表达式没有捕获最后一次输入?