⛄一、获取代码方式
获取代码方式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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除