我正在测试一个定点实现的 OFDM 系统。数据格式为 Q11。我的系统工作正常,但我需要在某些渠道下对其进行测试,以便在现场测试之前对设计进行评估。该系统将在 Rician 衰落信道上进行测试,但现在我首先进行 AWGN 测试。我在这里问了一个类似的问题: Apply AWGN noise to QPSK-OFDM symbol
但我意识到问题出在定点-浮点转换。我使用 32b 对我的系统进行了模拟,结果与 QPSK 系统的理论 BERXEbN0 一致。
我正在使用以下代码来应用噪声:
def awgn(self,data,noise_power):
data_dq = data*(2.**(DATA_WIDTH-1))
Es = sum(abs(data_dq)**2.)
Eb = Es/(self.OFDM_SIZE*2.)
EbN0_dB = noise_power + 10*log10(self.t_symbol/(self.t_symbol - self.t_cp))
EbN0 = (10.)**(EbN0_dB/10.)
N0 = Eb/EbN0
noise = sqrt(N0/2.)*(random.standard_normal((data_dq.size,)) + random.standard_normal((data_dq.size,))*1j)
return around(data_dq + noise)/(2.**(DATA_WIDTH-1))
其中 DATA_WIDTH = 12。
通过这种实施,系统同意 EbN0 曲线的某些区域,而与其他区域的曲线相去甚远。有了这个位数,我得到 BER,EbN0 为 10dB。
我的问题是:在这种情况下如何处理定点和浮点之间的转换?
更新
我更改了上述代码的某些部分:
def awgn(self,data,noise_power):
data_dq = data
Es = sum(abs(data_dq)**2.)
Eb = Es/(self.OFDM_SIZE*2.)
EbN0_dB = noise_power + 10*log10(self.t_symbol/(self.t_symbol - self.t_cp))
EbN0 = (10.)**(EbN0_dB/10.)
N0 = Eb/EbN0
noise = sqrt(N0/2.)*(random.standard_normal((data_dq.size,)) + random.standard_normal((data_dq.size,))*1j)
return data_dq + around(noise*(2.**(DATA_WIDTH-1)))/(2.**(DATA_WIDTH-1))
我想它不会影响系统性能,但它在这里保持更新。
下面是我上次模拟的曲线:
如您所见,我目前的设计中有一个楼层。
我在问这个楼层是由于我的定点系统性能还是通道模型的影响。
更新[解决]
只需为问题添加更新以供将来参考。问题在于所使用的定点 FFT 内核的参数。上图中的效果是由于剪辑造成的,正如本主题中的有用评论所述。谢谢您的支持。