问题描述
我想绘制模拟误码率图与我的 OFDM 信号的理论误码率图。 这就是模拟 BER 值的计算方法
SNRdbs=np.arange(start=-18,stop='25',step=2)
BER_sim=np.zeros(len(SNRdbs))
使用 scipy 的 erfc 库,我计算了信号的 BER
from scipy.special import erfc
BER_theory = 0.5*erfc(np.sqrt(10**(SNRdbs/10)))
理论BER如下
for i,SNRdb in enumerate(SNRdbs):
OFDM_TX = tx_signal
OFDM_RX = channel(OFDM_TX,SNRdb)
plt.figure(figsize=(8,2))
plt.plot(np.abs(OFDM_TX),label='TX signal')
plt.plot(np.abs(OFDM_RX),label='RX signal')
plt.legend(fontsize=10)
plt.xlabel('Time'); plt.ylabel('$|x(t)|$');
plt.grid(True);
gamma = 10**(SNRdb/10) #SNRs to linear scale
power = np.sum(np.abs(tx_signal)**2)/len(tx_signal)
N0 = power/gamma
nse = np.sqrt(N0/2)*noise
rx_signal = tx_signal + nse
#Receiver Side
#Serial to Parallel Conversion
len_to_split = [N+(int(0.25*N))]*B
input_elem = iter(rx_signal)
rx_blocks = [list(islice(input_elem,elem)) for elem in len_to_split]
index = range(0,int(N*0.25))
rx_withoutCP = np.delete(rx_blocks,index,axis=1)
rx_fft=[]
for k in range(B):
rx_fft.append(np.fft.fft(rx_withoutCP[k]))
demap_sym=[]
for k in range(B):
for l in range(N):
if(rx_fft[k][l]>0):
demap_sym.append(1)
else:
demap_sym.append(0)
cnt=0
for m in range(n):
if(demap_sym[m] != m_signal[m]):
cnt=cnt+1
BER_sim[i] = cnt/n
最后得到的图是这样的
大约 10db 后,模拟 BER 与理论 BER 相差太大。
我在这里做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)