numpy 为什么我的IDFT计算与np.fft.ifft值不同?

jobtbby3  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(181)

我在验证我写的一个简单的IDFT程序-

  1. ###############################################################
  2. #My IDFT Routines
  3. ###############################################################
  4. def simple_idft(data_f):
  5. data_t_r = []
  6. data_t_i = []
  7. for ii in range(0,len(data_f)):
  8. tmp_r=0.00
  9. tmp_i=0.00
  10. scale = 1.00/len(data_f)
  11. for jj in range(0,len(data_f)):
  12. 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))
  13. 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))
  14. tmp_r *=scale
  15. tmp_i *=scale
  16. data_t_r.append(tmp_r)
  17. data_t_i.append(tmp_i)
  18. return data_t_r, data_t_i
  19. def rms_idft(data_t_r, data_t_i):
  20. rms = []
  21. for ii in range(0,len(data_t_r)):
  22. rms.append(math.sqrt(data_t_r[ii]**2 + data_t_i[ii]**2))
  23. return rms
  24. def do_idft(data_t):
  25. data_t_r, data_t_i = simple_idft(data_t)
  26. rms = rms_idft(data_t_r, data_t_i)
  27. return(rms)

与愚蠢的IDFT程序进行对比-

  1. ################################################################
  2. #Transform OFDM Data to time domain
  3. ################################################################
  4. def IDFT(OFDM_data):
  5. return np.fft.ifft(OFDM_data)

当我运行这些(64点数据)时,我似乎得到了非常不同的结果-

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

  1. rms = []
  2. rms = do_idft(OFDM_data)
  3. plt.plot(rms,label='raj')
  4. plt.legend()
  5. plt.show()

你能看出我的算法有什么错误吗?

xzv2uavs

xzv2uavs1#

好的,我发现了问题...... Numpy IDFT例程输出的绘图是错误的,而应该是-

  1. ################################################################
  2. #Transform OFDM Data to time domain
  3. ################################################################
  4. def IDFT(OFDM_data):
  5. return np.fft.ifft(absOFDM_data)
  6. OFDM_time = IDFT(OFDM_data)
  7. print ("Number of OFDM samples in time-domain before CP: ", len(OFDM_time))
  8. print(OFDM_time)
  9. plt.plot(abs(OFDM_time)) **##need to take the absolute val**
  10. plt.show()

相关问题