自研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
相关产品推荐
相关产品推荐

