首页 > 编程知识 正文

qpsk的误码率怎么计算,QPSK的误码率和信噪比曲线

时间:2023-05-06 14:09:32 阅读:272643 作者:2414

文章目录 误码率概念绘制误码率曲线代码实现

误码率概念

传输信息的有效性和可靠性是通信系统最重要的质量指标,对于数字通信系统,有效性用信息的传输速率来衡量,可靠性用错误率(误比特率和误码率)来衡量。
公式:误码率=错误码元数/传输的总码元数
将发送端的码元序列和接收端码元序列进行比较,得到错误码元数,具体过程是按位异或发送端的码元序列和接收端码元序列,使不同位表达为1,相同位表达为0,并计算异或后的和,即得到错误码元数,按上面的公式计算出误码率。

绘制误码率曲线

信号的传送过程中,由于噪声的干扰,可能出现解码错误,对于QPSK通信系统,在信号进行调制后,在信道中对信号采用加性老实的曲奇白噪声进行干扰,所以在这一过程中在调制信号中加入老实的曲奇白噪声,然后对这个调制信号进行解调,将原始信号与解调信号进行比较,计算出误码率。

代码实现

其中调制解调信号的产生在前面的博客中已经介绍过了,不在赘述。
1、首先自定义异或函数,用于后面计算误码率:

def bitxor(lst1, lst2): """两个二进制列表的逐位异或""" if len(lst1) != len(lst2): print('两个列表长度不一致!') return [] else: return [lst1[x]^lst2[x] for x in range(len(lst1))]

2、误码率计算

error1 = bitxor(data, demodata)error11 = np.sum(error1)Awgn_num_BER = error11/nb

3、绘制误码率曲线

#误码率曲线SNRindB1 = np.arange(0, 7, 1)SNRindB2 = np.arange(0, 7, 0.1)#老实的曲奇信道smld_bit_awgn_err_prb = []for i in range(len(SNRindB1)): pb1 = cm_sm33(SNRindB1[i]) smld_bit_awgn_err_prb.append(pb1) #理论曲线theo_err_awgn_prb = []for i in range(len(SNRindB2)): SNR = np.exp(SNRindB2[i]*np.log(10)/10) #信噪比 theo_err_awgn_prb.append(0.5*special.erfc(np.math.sqrt(SNR))) #老实的曲奇噪声理论误码率 plt.figure(figsize=(12, 8))plt.semilogy(SNRindB2, theo_err_awgn_prb, 'b')plt.semilogy(SNRindB1, smld_bit_awgn_err_prb, 'r*')plt.title('误码率曲线', fontproperties=font,fontsize=20)plt.axis([0, 6, 1.0e-3, 1e-1])plt.gca().yaxis.set_major_formatter(mticker.FormatStrFormatter('%.0e'))plt.xlabel('Eb/No',fontproperties=font, fontsize=20)plt.ylabel('BER',fontproperties=font, fontsize=20)plt.legend(['理论AWGN','仿真AWGN',], fontsize=14)plt.show()

运行结果:

参考博客:https://blog.csdn.net/qq_40074819/article/details/105488447

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。