(20)MATLAB使用卡方(chi-square)分布生成Nakagami-m分布

文章目录


前言

Nakagami分布随机变量的生成,可以使用gamma分布实现,也可以使用卡方(chi-square)分布随机变量生成。使用伽马(gamma)分布 生成Nakagami-m分布的方法见:
(17)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法1
(18)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法2

本文介绍使用卡方(chi-square)分布随机变量生成Nakagami分布随机变量的方法。


一、使用卡方分布函数生成Nakagami分布随机变量

使用卡方分布生成Nakagami分布随机变量的方法由下式给出:

为了得到给定形状参数(m)和扩展参数(ω)的Nakagami-m随机变量,可将MATLAB仿真分为如下步骤:

(1)首先生成卡方分布随机变量CHI2,其自由度k设置为2m;

(2)将生成的随机变量CHI2乘以ω/(2m)并开方。

下面给出使用该方法生成Nakagami分布随机变量的MATLAB代码。

二、MATLAB仿真

以下代码使用卡方分布生成不同的形状参数(m)和尺度参数(ω)的Nakagami随机变量。然后给出仿真Nakagami随机变量的PDF画图结果。

1.仿真代码

代码如下:

c 复制代码
clc
clear all
close all

m = 1;                         % Nakagami分布的形状参数(shape parameters)
Omega = 0.2;                   % Nakagami分布的尺度参数(spread parameters)
N = 1e7;                       % Number of Samples

% 生成卡方分布随机数
% Generate Chi-squared distributed random numbers
% 方法1:使用标准正态分布随机变量的平方和生成卡方分布随机数
CHI2 = 0;                       % 卡方分布随机变量(Chi-squared distributed random numbers)
k = 2*m;                        % 卡方分布的自由度(degrees of freedom)
for j=1:k
    % Sum of square of k independent standard normal Random Variables 
    % k个独立标准正态随机变量的平方和
    CHI2 = CHI2 + randn(1 ,N).^2;
end

% 方法2:使用库函数chi2rnd直接生成卡方分布随机数
% CHI2 =  chi2rnd(2*m,1,N);

% 使用卡方分布随机变量生成Nakagami分布的随机变量
Y = sqrt(Omega/(2*m)) * sqrt(CHI2);

% 画图方法1。概率密度函数(使用了梯形积分)
figure();
[Q,X] = hist(Y,1000);           % histogram,Q为划分到每个桶中的元素个数,X为每个区间的中心
plot(X,Q/trapz(X,Q),'r');       % plot estimated PDF,trapz(X,Q)使用梯形法计算Q相对于X的积分
grid on;
title('Nakagami-m PDF ' );
xlabel('Parameter - y' );       % y应该是随机变量
ylabel('f_Y(y)' );              % 随机变量的概率密度

% 画图方法2。绘制生成的随机数的直方图,以概率密度形式(MATLAB建议的方式)
nbins = 50;                     % bin数量
figure();
histogram(Y,nbins,'Normalization','pdf','DisplayStyle','bar');
hold on

%% nakagami分布的概率密度的理论值
% Nakagami分布的参数
% m = 1;
% Omega = 2;

% nakagami分布的概率密度的理论表达式
x = 0.01:0.01:3;
f = (2*m.^m./(gamma(m).*Omega^m)) .* x.^(2*m-1) .* exp(-m*x.^2./Omega);
% figure(1)
plot(x,f,'LineWidth',1.5)
grid on
title('Nakagami分布的概率密度')
legend('概率密度函数的估计值','概率密度函数的理论值')

2.运行结果

代码运行结果画图如下:


相关推荐
----云烟----18 分钟前
QT中QString类的各种使用
开发语言·qt
lsx20240622 分钟前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic1 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it1 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康1 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神1 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海2 小时前
scala String
大数据·开发语言·scala
qq_327342732 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍2 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦2 小时前
Scala的Array(2)
开发语言·后端·scala