关于一个MATLAB源代码

Function[p]=smldPe58(snr_in_dB)
d=1;
SNR=exp(snr_in_dB*log(10)/10);
Sgma=sqrt((5*d^2)/(4*SNR));
N=10000;
for i=1:N,
temp=rand;
if(temp<0.25),
dsource(i)=0:
elseif(temp<0.5),
dsource(i)=1;
elseif(temp<0.75),
dsource(i)=2
else
dsource=3
end
end;
numoferr=0;
for i=1:N,
if(dsource(i)==0),
r=-3*d+gngauss(sgma);
elseif(dsource(i)==1),
r=-d+gngauss(sgma);
elseif(dsuorce(i)==2),
r=d+gngauss(sgma);
else
r=3*d+gngauss(sgma);
end:
if(r<-2*d),
decis=0;
elseif(r<0),
decis=1;
elseif(r<2*d),
decis=2;
elseif
decis=3;
end;
if(decis=dsource(i)),
numoferr=numoferr+1;
end;
end;
p=numoferr/N;
以上是完整的源代码 我不是很看得懂 希望高手帮我看一下是什么意思 最好可以一块一块的分开解释 谢谢了!

你这个是普罗克斯或者译为普罗金斯的现代通信系统使用matlab一书上的吧。这个是多幅度信号仿真。使用的的是蒙特卡罗仿真方法,就是用很多次实验的到的结果仿真理论值,容易理解的就是投10000次硬币,5005次整,4995次反,等到正的概率与反的概率。
Function[p]=smldPe58(snr_in_dB) 函数名,输入变量时信噪比dB形式的
d=1; 这里表示电信号幅度,一个单位
SNR=exp(snr_in_dB*log(10)/10); 将信噪比化成正常的形式,dB你知道吧
Sgma=sqrt((5*d^2)/(4*SNR)); 噪声标准差,出自理论公式
N=10000; 实验次数
for i=1:N,
temp=rand; 产生一个随机数0-1的
if(temp<0.25), 因为这里仿真四种电平,且认为出现概率相同
dsource(i)=0: 0-0.25是0
elseif(temp<0.5),
dsource(i)=1; 0.25-0.5是1
elseif(temp<0.75),
dsource(i)=2 0.5-0.75是2
else
dsource=3 0.75-1是3刚好四种
end
end;
numoferr=0; 这是个计数器,积累错误个数
for i=1:N,
if(dsource(i)==0),
r=-3*d+gngauss(sgma); 这里把四种电平对应了四种幅度
elseif(dsource(i)==1), -3*d -d d 3*d 间隔2d是信号大小
r=-d+gngauss(sgma); gngauss函数在该书前几章有
elseif(dsuorce(i)==2), 产生高斯分布噪声,
r=d+gngauss(sgma); 这里就是信号加噪声,相当于信号
else 通过信道
r=3*d+gngauss(sgma);
end:
if(r<-2*d), 这里相当于到了接受端,
decis=0; 按接收大小来判决属于0.1.2.3哪种信号
elseif(r<0),
decis=1;
elseif(r<2*d),
decis=2;
elseif
decis=3;
end;
if(decis=dsource(i)), 判决信号和发送的原始信号比较
numoferr=numoferr+1; 不一样就说明错了一个,误码1
end;
end;
p=numoferr/N; 错了多少除以总数,误码率
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-27
小的不才,让我试试,加我hi
相似回答