显示错误类 channel.rayleigh 不存在公共属性 SNR。 出错 ptrl (line 19) chan.SNR = Inf;怎么办
时间: 2023-06-07 16:12:09 浏览: 103
这个错误提示说明 channel.rayleigh 类并没有名为 SNR 的公共属性。你需要检查一下你的代码,并确认其是否正确或者是否需要修改。你还可以查看一下 rayleigh 类的文档,以获得更深入的了解。如果你无法自行解决这个问题,可以在 Stack Overflow 或其他技术论坛上寻求帮助,或者向你所在的开发团队或导师寻求指导。
相关问题
np.random.rayleigh
np.random.rayleigh 是 NumPy 库中的一个函数,用于生成符合瑞利分布的随机数。瑞利分布是一种连续概率分布,常用于描述正值随机变量的概率分布情况。
你可以使用 np.random.rayleigh(scale, size=None) 函数来生成瑞利分布的随机数。其中,scale 参数表示尺度参数,size 参数表示生成随机数的个数或形状。
例如,通过以下代码生成一个符合瑞利分布的随机数:
```python
import numpy as np
# 生成一个符合瑞利分布的随机数
random_number = np.random.rayleigh(scale=2, size=1)
print(random_number)
```
这将生成一个符合瑞利分布、尺度参数为2的随机数。你可以根据需要调整尺度参数和生成的随机数个数来获得不同的结果。
代码解释clc; clear; close all; warning off; addpath(genpath(pwd)); LENS = 30000; SNRs1 = [0:2:18]; figure; %MRC mrcber = []; for snr=SNRs1 snr signal = round(rand(LENS, 1)); datqpsk = bi2de(reshape(signal, [], 2)); Vqpsk = qammod(datqpsk, 4)/sqrt(2); channel1 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); channel2 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); CHqpsk1 = channel1.*Vqpsk; CHqpsk2 = channel2.*Vqpsk; Nqpsk1 = ch_Rayleigh(CHqpsk1, snr); Nqpsk2 = ch_Rayleigh(CHqpsk2, snr); demod_symb = zeros(length(Vqpsk), 1); for i=1:length(Vqpsk) channel = [channel1(i) ; channel2(i)]; received_value = [Nqpsk1(i) ; Nqpsk2(i)]; ls_est_value = [channel'*received_value]/(channel'*channel); demod_symb(i) = OfdmSym(ls_est_value, @(x)(x)); end mrcber = [mrcber ; [1-(sum(demod_symb==datqpsk)/length(Vqpsk))]]; end semilogy(SNRs1, mrcber,'-bs',... 'LineWidth',1,... 'MarkerSize',6,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.9,0.0,0.0]); hold on; xlabel('SNR[db]'); ylabel('BER'); LENS = 30000; SNRs2 = [0:2:16]; %STC stcber = []; for snr=SNRs2 snr signal = round(rand(LENS, 1)); datqpsk = bi2de(reshape(signal, [], 2)); Vqpsk = qammod(datqpsk, 4)/sqrt(2); channel1 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); channel2 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); channel3 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); channel4 = ch_Rayleigh(zeros(length(Vqpsk), 1), 0); demod_symb = zeros(length(Vqpsk), 1); for i=1:2:length(Vqpsk)-1 H0 = [channel1(i), channel2(i); channel2(i)', -channel1(i)']./sqrt(2); H1 = [channel3(i), channel4(i); channel3(i)', -channel4(i)']./sqrt(2); H = [H0 ; H1]; signal = [Vqpsk(i) ; Vqpsk(i+1)]; qpsk_values_l = H*signal; R_symb = ch_Rayleigh(qpsk_values_l, snr); ls_est_values = (H'*H)^-1*(H'*R_symb); demod_symb(i) = OfdmSym(ls_est_values(1), @(x)(x)); demod_symb(i+1) = OfdmSym(ls_est_values(2), @(x)(x)); end stcber = [stcber ; [1-(sum(demod_symb==datqpsk)/length(Vqpsk))]]; end semilogy(SNRs2, stcber,'-mo',... 'LineWidth',1,... 'MarkerSize',6,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.5,0.9,0.0]); LENS = 20000; SNRs3 = [0:2:12];
这段代码是一个用 MATLAB 编写的通信系统模拟程序,用于模拟两种不同的信道编码方案(MRC和STC)在不同信噪比(SNR)下的误码率(BER)性能。程序首先定义了一些参数,如信号长度(LENS)和不同的信噪比(SNRs1、SNRs2、SNRs3),然后通过循环计算不同 SNR 下的 BER,并将结果绘制成图像。其中 ch_Rayleigh 是一个自定义的 Rayleigh 信道函数,OfdmSym 是一个自定义的解调函数,qammod 是一个 QPSK 调制函数,semilogy 是一个绘制半对数坐标图的函数。
阅读全文