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

使用Manim绘制傅里叶变换调用fft()时遇TypeError报错求助

问题解决:Manim中调用FFT出现TypeError

错误根源

你遇到的TypeError: 'module' object is not callable是因为**np.fft是numpy的子模块,不是可调用函数**,正确的快速傅里叶变换函数是np.fft.fft(),直接调用模块会触发该错误。

修复后的完整代码

from manim import *
import numpy as np

class sampling(Scene):
    def construct(self):
        # 生成时间序列
        t = np.arange(-2*PI, 2*PI, 0.01)
        sr = len(t)/(4*PI)  # 采样率
        
        # 直接用numpy生成正弦信号(替代循环append,更高效)
        x = np.sin(t)
        
        # 正确调用FFT函数
        X = np.fft.fft(x)
        N = len(X)
        n = np.arange(N)
        T = N/sr
        freq = n/T
        
        # 取FFT结果的前半部分(避免对称重复)
        freq_half = freq[:N//2]
        X_amp = np.abs(X/N)[:N//2]
        
        # 创建坐标系并绘制频谱图
        plane2 = NumberPlane(x_range=[0, 1], y_range=[0, 0.6], x_length=6, y_length=3).add_coordinates()
        # 使用plot_line_graph绘制离散数据(plot方法适用于连续函数)
        plane2_graph = plane2.plot_line_graph(x_values=freq_half, y_values=X_amp, color=GOLD_C)
        
        self.add(plane2, plane2_graph)

其他关键修复点

  • 信号生成优化:用np.sin(t)替代循环append列表,直接生成numpy数组,计算效率更高且符合numpy的使用习惯。
  • 绘图方法修正:NumberPlane.plot适用于绘制连续函数(比如lambda表达式),如果要绘制离散的FFT结果,应该用plot_line_graph并传入x/y值数组。
  • 频谱截断:FFT结果是对称的,只取前半部分即可展示完整的频谱信息,避免重复绘制冗余数据。

内容的提问来源于stack exchange,提问作者Egyptian man.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:02:42