function [gl,g2]=gngauss(m,sgma) % 输入格式可以为[glg2]=gngauss(msgma) % 或[gl,g2]=gngauss(sgma) % 或[gl,g2]=gngauss %函数生成两个统计独立的高斯分布的随机数,以m为均值,sgma为方差% 默认时 m=0,sgma=1 if(nargin==0), m=0;sgma=1; elseif nargin==1 sgma=m;m=0; end u=rand; %产生一个(0,1)间均匀分布的随机数 u z=sgma*(sqrt(2*log(1/(1-u)))); %利用上面的u产生一个瑞利分布随机数 u=rand; %重新产生(0,1)间均匀分布的随机数 u gl=m+z*cos(2*pi*u); g2=m+z*sin(2*pi*u);
时间: 2024-04-26 13:22:26 浏览: 6
这是一个MATLAB函数,用于生成两个统计独立的高斯分布的随机数。其中,m为高斯分布的均值,sgma为高斯分布的方差。如果没有输入参数,则默认m=0,sgma=1。函数中先产生一个(0,1)间均匀分布的随机数u,然后利用u产生一个瑞利分布随机数z。最后再次产生一个(0,1)间均匀分布的随机数u,并利用u、z、m生成两个统计独立的高斯分布的随机数gl和g2。其中,gl和g2的均值分别为m,方差分别为sgma。
相关问题
函数或变量 'bmgauss' 无法识别。 出错 untitled12>snr2p (第 50 行) n(1)=bmgauss(sgma); 出错 untitled12 (第 4 行) [pb, ps] = snr2p(SNRindB1( i));
这个错误提示表明您使用的代码中使用了一个未定义的函数或变量 'bmgauss',导致程序无法运行。
可能是因为 'bmgauss' 函数不是 MATLAB 自带的函数,而是需要您自己编写或者下载的函数。建议您检查一下代码中是否有使用到 'bmgauss' 函数,如果有,请确认您已经正确定义该函数。
如果您无法找到 'bmgauss' 函数,也可以尝试使用 MATLAB 自带的高斯噪声函数 `randn()` 来代替 'bmgauss' 函数。您可以将代码中的 `n = bmgauss(sgma);` 替换为 `n = sqrt(sgma)*randn(1, N);`,其中 `N` 为噪声长度。
function [p]=li8_16fun(rho_in_dB) %子程序得出运算误码率,用dB 值表示的信噪比为子程序的输入变量 rho=10^(rho_in_dB/10); Eb=rho; %每比特能量 if(rho>2) %如果 rho>2 优化 alpha alpha=2/rho; else %如果 rho<2 优化 alpha 结束 alpha=1; end sgma=sqrt(1/(2*alpha)); %噪声标准方差 N=10000; %传输的比特数 for i=1:N %产生数据序列 temp=rand; if(temp<0.5) data(i)=1; else data(i)=0; end end for i=1:N %查找接收信号 if(data(i)-0) %传输信号 r1c(i)=sqrt(Eb);r1s(i)=0; r2c(i)=0;r2s(i)=0; else r1c(i)=0;r1s(i)=0; r2c(i)=sqrt(Eb);r2s(i)=0; end if(rand<alpha) %以概率 alpha 加入噪声并确定接收信号 r1c(i)=r1c(i)+gnagauss(sgma); r1s(i)=r1s(i)+gnagauss(sgma); r2c(i)=r2c(i)+gnagauss(sgma); r2s(i)=r2s(i)+gnagauss(sgma); end end num_of_err=0; %进行判决并计算错误数目 for i=1:N r1=r1c(i)^2+r1s(i)^2; %第一判决变量 r2=r2c(i)^2+r2s(i)^2; %第二判决变量 if(r1>r2) decis=0; else decis=1; end if(decis~=data(i)) %如果存在错误,计数器计数 num_of_err=num_of_err+1; end end p=num_of_err/N; %计算误码率;没有定义gnagauss函数,帮我定义一个
好的,下面是一个定义 Gnagauss 函数的 MATLAB 代码:
function y = gnagauss(sigma)
% GNAGAUSS 生成一个服从 Gnagauss 分布的随机数
%
% sigma: Gnagauss 分布的标准差
%
% y: 服从 Gnagauss 分布的随机数
%
% Gnagauss 分布的概率密度函数为:
% f(x) = sqrt(2/pi) * exp(-2 * x^2 / sigma^2) * (2 * x^2 / sigma^2 + 1)
% 可以通过 Box-Muller 变换得到服从 Gnagauss 分布的随机数
u = randn(); % 生成标准正态分布随机数
v = randn(); % 生成标准正态分布随机数
x = sqrt(0.5) * (u + v); % 通过 Box-Muller 变换得到服从 N(0, 1) 的随机数
y = x * sigma / sqrt(2*(1+sigma^2)); % 通过线性变换得到服从 Gnagauss 分布的随机数
end
请将这段代码保存在一个名为 "gnagauss.m" 的文件中,然后将该文件与 li8_16fun.m 放在同一目录下即可。