【误码率仿真】QPSK信道经过高斯信道和瑞利信道条件下误码率仿真【含Matlab源码 3111期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【误码率仿真】基于matlab QPSK信道经过高斯信道和瑞利信道条件下误码率仿真【含Matlab源码 3111期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏信号处理(Matlab)

备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、旋转调制turbo码仿真(含误码率)

在QPSK信号传输过程中,经过高斯信道和瑞利信道条件下的误码率可以通过仿真来估计。下面是一个简单的Python代码示例,使用matplotlib库进行误码率仿真的绘制:

import numpy as np
import matplotlib.pyplot as plt

设置信噪比范围
EbN0_dB = np.arange(-10, 21, 2) # 信噪比范围为-10dB到20dB,步长为2dB
EbN0 = 10**(EbN0_dB / 10) # dB转换为线性

初始化误码率列表
ber_gaussian = []
ber_rayleigh = []

仿真循环
for snr in EbN0:
# 计算高斯信道下的误码率
noise_power_gaussian = 1 / (2 * snr) # 高斯信道噪声功率
noise_gaussian = np.sqrt(noise_power_gaussian / 2) * (np.random.randn(100000) + np.random.randn(100000) * 1j) # 高斯噪声
received_signal_gaussian = noise_gaussian + QPSK_signal # 接收信号加噪声
error_gaussian = np.sum(np.abs(QPSK_signal - received_signal_gaussian) >= 0.5) # 统计错误比特数
ber_gaussian.append(error_gaussian / (2 * len(QPSK_signal))) # 计算误码率

计算瑞利信道下的误码率
fading_rayleigh = np.sqrt(1 / 2) * (np.random.randn(100000) + np.random.randn(100000) * 1j) # 瑞利衰落信道
received_signal_rayleigh = fading_rayleigh * QPSK_signal + noise_gaussian # 接收信号加噪声
error_rayleigh = np.sum(np.abs(QPSK_signal - received_signal_rayleigh) >= 0.5) # 统计错误比特数
ber_rayleigh.append(error_rayleigh / (2 * len(QPSK_signal))) # 计算误码率

绘制误码率曲线

plt.semilogy(EbN0_dB, ber_gaussian, ‘-o’, label=‘Gaussian Channel’)
plt.semilogy(EbN0_dB, ber_rayleigh, ‘-o’, label=‘Rayleigh Channel’)
plt.xlabel(‘Eb/N0 (dB)’)
plt.ylabel(‘Bit Error Rate (BER)’)
plt.grid(True)
plt.legend()
plt.show()
在代码中,我们首先定义了一个信噪比范围(Eb/N0),然后通过循环遍历每个信噪比值。对于每个信噪比值,我们计算高斯信道和瑞利信道下的误码率。

在高斯信道下,我们首先计算高斯噪声的功率,并生成与发送信号相同长度的高斯噪声。然后将接收到的信号与高斯噪声相加,并统计错误比特数来计算误码率。

在瑞利信道下,我们生成一个与发送信号相同长度的瑞利衰落信道,并将其与发送信号相乘。然后将接收到的信号与高斯噪声相加,并统计错误比特数来计算误码率。

最后,我们使用matplotlib库绘制误码率曲线,其中x轴是Eb/N0值(单位为dB),y轴是比特错误率(BER)。在图表中,我们使用semilogy函数将y轴设置为对数坐标轴,以便更好地显示低误码率的变化。

⛄三、部分源代码

clc
close all
clear all
SNR=0:1:10; %信噪比变化范围
SNR1=0.5*(10.^(SNR/10)); %将信噪比转化成直角坐标
N=1000000; %仿真点数
X=4; %进制数
x=randi([0,1],1,N); %产生随机信号
R=raylrnd(0.5,1,N); %产生瑞丽信号
h=pskmod(x,X); %调用matlab自带的psk调制函数
hR=h.*R;
for i=1:length(SNR);
SNR(i)
yAn=awgn(h,SNR(i),‘measured’);
yA=pskdemod(yAn,X); %QPSK=4PSK
[bit_A,l]=biterr(x,yA);
QPSK_s_AWGN(i)=bit_A/N;

yRn=awgn(hR,SNR(i),'measured');
yR=pskdemod(yRn,X);     %调用matlab自带的psk解调函数
[bit_R,ll]=biterr(x,yR);
QPSK_s_Ray(i)=bit_R/N; 

end
QPSK_t_AWGN=1/2erfc(sqrt(10.^(SNR/10)/2)); %AWGN信道下QPSK理论误码率
QPSK_t_Ray= -(1/4)
(1-sqrt(SNR1./(SNR1+1))).^2+(1-sqrt(SNR1./(SNR1+1)));
%Rayleigh信道下QPSK理论误码率

%绘制图形
figure
semilogy(SNR,QPSK_s_AWGN,‘r-');hold on;
%semilogy(SNR,QPSK_t_AWGN,‘y-o’);hold on;
semilogy(SNR,QPSK_s_Ray,'b-
’);hold on
%semilogy(SNR,QPSK_t_Ray,‘g-o’); grid on;

legend(‘AWGN仿真’,‘Rayleigh仿真’);
title(‘QPSK误码性能分析’);
xlabel(‘信噪比(dB)’);ylabel(‘BER’);
grid on;

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值