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

如何绘制复数数组的实部与虚部?含离散傅里叶变换测试场景

提取DFT复数结果的实部/虚部并绘图的方法

嘿,刚好我对DFT的可视化处理很熟,这就把步骤给你理清楚!

第一步:提取复数数组的实部和虚部

不管你是用自己实现的DFT函数还是numpy自带的工具,得到的复数结果都能轻松提取实部和虚部:

情况1:用numpy数组存储DFT结果

numpy的复数数组自带real和imag属性,直接调用就行:

import numpy as np

# 假设你的DFT结果存在dft_output里
real_components = dft_output.real  # 提取所有元素的实部
imag_components = dft_output.imag  # 提取所有元素的虚部

情况2:用普通Python列表存储复数元素

如果是自己写的DFT函数返回了普通列表,用列表推导式就能快速提取:

# 假设dft_output是普通复数列表
real_components = [num.real for num in dft_output]
imag_components = [num.imag for num in dft_output]

第二步:按索引绘图(用matplotlib实现)

接下来用matplotlib把实部和虚部按索引(也就是DFT的频率点序号)画出来,这里给你两种常见的绘图方式:

方式1:实部和虚部分开画两个子图

这样看起来更清晰,能分别观察两者的分布:

import matplotlib.pyplot as plt

# 生成索引数组(假设DFT结果长度为N)
n = np.arange(len(dft_output))

# 创建画布和子图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))

# 画实部
ax1.plot(n, real_components, color='blue', label='DFT 实部')
ax1.set_title('DFT结果的实部分布')
ax1.set_xlabel('索引(频率点序号)')
ax1.set_ylabel('实部幅值')
ax1.legend()
ax1.grid(True)

# 画虚部
ax2.plot(n, imag_components, color='red', label='DFT 虚部')
ax2.set_title('DFT结果的虚部分布')
ax2.set_xlabel('索引(频率点序号)')
ax2.set_ylabel('虚部幅值')
ax2.legend()
ax2.grid(True)

# 调整子图间距
plt.tight_layout()
plt.show()

方式2:实部和虚部画在同一张图里

如果想对比两者的变化趋势,可以放在同一坐标系:

import matplotlib.pyplot as plt

n = np.arange(len(dft_output))

plt.figure(figsize=(10, 6))
plt.plot(n, real_components, color='blue', label='DFT 实部')
plt.plot(n, imag_components, color='red', label='DFT 虚部')
plt.title('DFT结果的实部与虚部分布')
plt.xlabel('索引(频率点序号)')
plt.ylabel('幅值')
plt.legend()
plt.grid(True)
plt.show()

补充说明

对于正弦波的DFT结果,你会发现大部分实部/虚部元素都接近0(因为数值计算的浮点误差),只有对应正弦波频率的那个索引位置会有明显的峰值——这也能验证你的DFT程序是否正确哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:12:15