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

自研IDFT计算与np.fft.ifft结果不符,请求排查算法错误

自研简易IDFT程序与numpy结果差异排查

自研IDFT实现代码

import math

# My IDFT Routines
def simple_idft(data_f):
    data_t_r = []
    data_t_i = []
    for ii in range(0, len(data_f)):
        tmp_r = 0.00
        tmp_i = 0.00
        scale = 1.00 / len(data_f)
        for jj in range(0, len(data_f)):
            tmp_r += data_f[jj].real * math.cos(2.00 * math.pi * ii * jj / len(data_f)) - data_f[jj].imag * math.sin(2.00 * math.pi * ii * jj / len(data_f))
            tmp_i += data_f[jj].real * math.sin(2.00 * math.pi * ii * jj / len(data_f)) + data_f[jj].imag * math.cos(2.00 * math.pi * ii * jj / len(data_f))
        tmp_r *= scale
        tmp_i *= scale
        data_t_r.append(tmp_r)
        data_t_i.append(tmp_i)
    return data_t_r, data_t_i

def rms_idft(data_t_r, data_t_i):
    rms = []
    for ii in range(0, len(data_t_r)):
        rms.append(math.sqrt(data_t_r[ii]**2 + data_t_i[ii]**2))
    return rms

def do_idft(data_t):
    data_t_r, data_t_i = simple_idft(data_t)
    rms = rms_idft(data_t_r, data_t_i)
    return rms

对比用的numpy IDFT实现

import numpy as np

# Transform OFDM Data to time domain
def IDFT(OFDM_data):
    return np.fft.ifft(OFDM_data)

测试结果差异

处理64点OFDM数据时,两者结果差异显著:

numpy的测试代码及结果

OFDM_time = IDFT(OFDM_data)
print("Number of OFDM samples in time-domain before CP: ", len(OFDM_time))
print(OFDM_time)
plt.plot(OFDM_time)
plt.show()

输出图像为包含正负振荡的复数时域波形,呈现典型的OFDM时域信号特征。

自研程序的测试代码及结果

rms = do_idft(OFDM_data)
plt.plot(rms, label='raj')
plt.legend()
plt.show()

输出图像为一条非负的波形,与numpy的复数波形特征完全不同。

请问能否帮我排查自研算法中的错误?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:15:34