C.Loo、Suzuki、corazza信道模型MATLAB实现

C.Loo模型适用于乡村或郊区信道环境。该模型中,接收信号由直射分量和多径分量合成,此时的直射分量受阴影衰落影响,而多径分量未受阴影衰落的影响,又称之为部分阴影模型。
直射分量可以用Lognormal分布进行描述,而多径分量可以用Rayleigh分布来描述,则接收信号如下:
r(t)=z(t)s(t)+d(t)
z(t)表示直射分量,s(t)表示直射分量所受到的阴影衰落,d(t)表示多径分量。
当直射分量z为一定值时,接收信号包络r的概率密度函数可以用Rician分布概率密度函数来描述
在这里插入图片描述
用Lognormal分布概率密度函数来描述阴影衰落
在这里插入图片描述在这里插入图片描述
通过上面两式可以得到C.Loo模型的接收信号包络r的概率密度函数
在这里插入图片描述

close all;
clear all; 
N=100000; 
u=-0.932; 
sigma1=0.376; 
z=0:0.01:5000;
pdf=1./(z*sigma1*sqrt(2*pi)).*exp(-(log(z)-u).^2/(2*sigma1.^2)); %lognormal概率密度函数
pdf_max=max(pdf); 
U=rand(1,N)*20; 
pdf_U=1./(U*sigma1*sqrt(2*pi)).*exp(-(log(U)-u).^2/(2*sigma1.^2)); 
V=rand(1,N)*pdf_max; 
n=0; 
for i=1:N 
    if pdf_U(i)>V(i) 
        n=n+1; 
        R_lognormal(n)=pdf_U(i); 
    end 
end 
FR=rand(1,n); 
sigma0=0.158; 
R_Rayleigh=sqrt(-2*sigma0*log(1-FR)); 
R_Loo=R_Rayleigh+R_lognormal; 
Loo_hist_number=hist(R_Loo,100); 
R_step=max(R_Loo)/100; 
R_label=(1:100)*R_step; 
for i=1:100 
    dz=0.001; 
    z=(1:2000)*dz; 
%       syms z
%       Loo_pdf_theory(i)=int(R_label(i)/(sigma0.^2*sigma1*sqrt(2*pi))./z.*exp(-(R_label(i)^2+z.^2)/(2*sigma0.^2)-(log(z)-u).^2/(2*sigma1.^2)).*besseli(0,R_label(i)*z/sigma0.^2),0,inf);  
    Loo_pdf_theory(i)=sum(R_label(i)/(sigma0.^2*sigma1*sqrt(2*pi))./z.*exp(-(R_label(i).^2+z.^2)/(2*sigma0.^2)-(log(z)-u).^2/(2*sigma1.^2)).*besseli(0,R_label(i)*z/sigma0.^2)*dz);
end 
figure 
plot(R_label,Loo_pdf_theory) 
grid on
 set(gca,'GridlineStyle',':','GridColor','k','GridAlpha',1)
axis([0 3 0 2])
xlabel('信号包络r') 
ylabel('概率密度fr(r)') 
legend('\sigma0=0.158,\sigma1=0.376,u=--0.932')

在这里插入图片描述

Corazza信道模型
Corazza模型通过对参数合理设定便可适用于全信道环境,该模型通过Rician分布和Lognormal分布描述。Corazza模型中,终端接收到的信号包括直射分量和多径分量,而且传输过程中都受到阴影衰落的作用,因此该模型又称作全阴影模型。
Corazza模型下终端接收到的信号为
r(t)=[z(t)+d(t)]*s(t)
r(t)为接收到的信号;d(t)为多径分量;z(t)为直射分量;s(t)为阴影衰落。z(t)和d(t)反映信道的多径衰落,s(t)反映信道的阴影衰落,两者是相互独立的。
Corazza模型终端接收信号包络的概率密度函数为
在这里插入图片描述
假设阴影衰落是一定值,此时接收信号包络r的概率密度函数表示为
在这里插入图片描述
由此可得
在这里插入图片描述
z(t)和d(t)描述的多径衰落服从莱斯分布,
在这里插入图片描述
在这里插入图片描述
s(t)服从Lognormal公式
在这里插入图片描述
Suzuki信道模型
Suzuki模型的接收信号可表示为r(t)=d(t)*s(t)
d(t)表示纯多径分量,s(t)表示阴影衰落。
接收信号包络r的概率密度函数可定义为在这里插入图片描述
在这里插入图片描述
而当阴影衰落s(t)保持不变的情况下,根据全概率公式,接收信号包络r的概率密度函数又可定义为在这里插入图片描述
在这里插入图片描述
Suzuki模型的理论公式在这里插入图片描述

close all;
clear all; 
N=10000000; 
u=0.3515; 
d0=0.035; 
r=1:0.01:50000;
pdf=1./(r*sqrt(2*pi*d0)).*exp(-(log(r)-u).^2/(2*d0)); % Lognormal概率密度函数
pdf_max=max(pdf); 
U=rand(1,N)*20; %产生1行N列的随机数
pdf_U=1./(U*sqrt(2*pi*d0)).*exp(-(log(U)-u).^2/(2*d0)); 
V=rand(1,N)*pdf_max; 
n=0; 
for i=1:N 
    if pdf_U(i)>V(i) 
        n=n+1; 
        R_Lognormal(n)=pdf_U(i); 
    end 
end  
FR=rand(1,n); 
sigma=0.1847; 
R_Rayleigh=sqrt(-2*sigma*log(1-FR)); 
R_Suzuki=R_Rayleigh.*R_Lognormal; 
hn=100; 
Suzuki_hist_number=hist(R_Suzuki,hn); 
R_step=max(R_Suzuki)/hn; 
r=(1:hn)*R_step;
s = 1:0.1:50;
for i=1:hn 
    Suzuki_pdf_theory(i)=sum(r(i)/(sigma.^2*sqrt(2*pi*d0))./s.^3.*exp(-r(i)^2./(sigma.^2*2*s.^2)-(log(s)-u).^2/(2*d0))*0.1); 
end 
figure 
plot(r,Suzuki_pdf_theory) 
axis([0 3 0 2.5])
ylabel('概率密度fr(r)') 
xlabel('信号包络r') 
legend('\sigma=0.1847,d0=0.035,u=0.3515')

Suzuki概率密度函数曲线如下图所示

在这里插入图片描述

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
1. Holdout交叉验证 Holdout交叉验证是最简单的模型评估方法之一。该方法将数据集分成训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。 代码实现: ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 将数据集分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 训练模型 model = LinearRegression() model.fit(X_train, y_train) # 评估模型 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) print("MSE:", mse) ``` 2. K折交叉验证 K折交叉验证是一种更为复杂的模型评估方法。该方法将数据集分成K个折,每个折都作为测试集,剩余的K-1个折作为训练集。模型在每个折上训练K次,并在每个折上测试一次。最终,K次测试的结果取平均值作为模型的性能指标。 代码实现: ```python from sklearn.model_selection import KFold from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 将数据集分成K个折 kf = KFold(n_splits=5) mse_list = [] for train_index, test_index in kf.split(X): # 训练集和测试集 X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # 训练模型 model = LinearRegression() model.fit(X_train, y_train) # 评估模型 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) mse_list.append(mse) # 平均MSE值 print("Avg MSE:", sum(mse_list) / len(mse_list)) ``` 3. 留一交叉验证 留一交叉验证是一种特殊的K折交叉验证方法,当K等于数据集大小时,留一交叉验证等价于完全交叉验证。该方法将数据集中的每个样本都作为测试集,其余的样本都作为训练集。模型在每个样本上训练一次,并在每个样本上测试一次。最终,所有测试结果的平均值作为模型的性能指标。 代码实现: ```python from sklearn.model_selection import LeaveOneOut from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 将数据集分成留一交叉验证的折 loo = LeaveOneOut() mse_list = [] for train_index, test_index in loo.split(X): # 训练集和测试集 X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # 训练模型 model = LinearRegression() model.fit(X_train, y_train) # 评估模型 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) mse_list.append(mse) # 平均MSE值 print("Avg MSE:", sum(mse_list) / len(mse_list)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值