Matlab仿真DF和AF源程序上课讲义Word文档下载推荐.docx
- 文档编号:14636728
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:11
- 大小:18.26KB
Matlab仿真DF和AF源程序上课讲义Word文档下载推荐.docx
《Matlab仿真DF和AF源程序上课讲义Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Matlab仿真DF和AF源程序上课讲义Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
时间函数:
datestr(now)
画图函数:
semilogy
legend
axis
通信基本概念和函数:
瑞利信道及其产生
高斯噪声的产生
蒙特卡罗仿真
MRC最大比合并
程序一:
DF_SNR_SR_distance.m主程序
%writtenbyxiyong826025/08/2009
%thiscodeisforfixedDFperformanceevaluation,comparethediffirentSRdistance
%该仿真用来评估不同的SR距离下的固定DF转发性能
%forS-R-Dthreenodes
%theSDandRDchannelisRayleighfading,andtheaverageSNRisvaried.
clearall;
%thetimesofMonteCarlo
%蒙特卡罗仿真的次数
Monte_MAX=10^(7);
%thelengthofdataframe
M2=10^(0);
MIN_SNR=0;
MAX_SNR=30;
INTERVAL=2;
%功率划分因子,在协同情况下,为了保证总的功率一定,每个节点使用1/2的功率发送
POW_DIV=1/2;
%openanewrecordfile
%打开一个新的文件,如果文件已经存在,那么清除以前的内容
fid=fopen('
record.txt'
'
w'
);
fprintf(fid,'
%%%s\n'
datestr(now));
fclose(fid);
%settheSDdistanceandRDdistance
%设置SD距离和RD的距离,归一化为1
sd_distance=1;
rd_distance=1;
%变化不同的SR距离
sr_distances=[0.1,0.5,0.7,0.9];
%使用循环的方式仿真不同的SR距离性能
forsr_INDEX=1:
2
%通过sr_INDEX变量获得真正的SR距离
sr_distance=sr_distances(sr_INDEX);
%snrcount这个变量用来对下面的SNR循环进行计数
snrcount=0;
%变化SNR循环
forSNR=MIN_SNR:
INTERVAL:
MAX_SNR
sig=10^(SNR/10);
%justdisplaysomethingonthescreen.
%仅仅是在计算机上显示一些信息,因为仿真往往很漫长,只是想知道仿真到哪里了^.^
datestr(now)
M2
SNR
snrcount=snrcount+1;
%用来对错误的bit计数
err_num_dsd=0;
err_num_coop=0;
fortries=0:
Monte_MAX
%flagindicateifthecooperateisused,if1,usecooperation,elsedirecttranisperferred.
%一个标志,表明是否转发
tx_coop=1;
%generatethesourceBPSKsignal,0,1
%产生一个长度为M2的0,1随机数
X1=rand(1,M2)>
0.5;
%generatethesourceBPSKsignal,+1,-1
%产生一个长度为M2的BPSK随机信号
Xs=X1*2-1;
%generatethesource-relaychannel,thechannelkeepconstantinaframe
%产生SR信道,假设信道在一帧内保持不变
CH_sr=xy_RayleighCH
(1)/(sr_distance)^2;
%thereceivedsignalofsource-relaytransmission
%中继接收到的源的信号,y=hx+n
R_dsr=CH_sr*sqrt(POW_DIV*sig).*Xs+xy_noise(M2);
%thedecodesignalofsource-relaytransmission
%中继对信道进行估计,匹配后硬判决得到的源的信号,根据MRC(最大比合并)的基本原理
Xr=(conj(CH_sr)*sqrt(POW_DIV*sig).*R_dsr>
0)*2-1;
%如果中继解码错误,则不转发
if(sum(Xs~=Xr)>
0)tx_coop=0;
end
%如果使用固定DF,我们强制设置tx_coop为1
%generatethesource-destinationchannel,thechannelkeepconstantinaframe
%产生SD信道,假设信道在一帧内保持不变
CH_sd=xy_RayleighCH
(1)/(sd_distance)^2;
%thereceivedsignalofdirectsource-destinationtransmission
%假设不使用协同,直接传输情况下目的节点接收到的源的信号,y=hx+n,这里,源节点使用全功率发送
R_dsd=CH_sd*sqrt(sig).*Xs+xy_noise(M2);
%thedecodesignalofdirectsource-destinationtransmission
%目的节点对信道进行估计,匹配后硬判决得到的源的信号,根据MRC(最大比合并)的基本原理
Y_dsd=(conj(CH_sd)*sqrt(sig).*R_dsd>
%thereceivedsignalofcooperativesource-destinationtransmission
%在使用协同情况下,目的节点接收到的源的信号,y=hx+n,这里,源节点使用半功率发送
R_csd=CH_sd*sqrt(POW_DIV*sig).*Xs+xy_noise(M2);
%generatetherelay-destinationchannel,thechannelkeepconstantinaframe
%产生RD信道,假设信道在一帧内保持不变
CH_rd=xy_RayleighCH
(1)/(rd_distance)^2;
if(tx_coop==1)
%thereceivedsignalofcooperativerelay-destinationtransmission
%在使用协同情况下,目的节点接收到的来自中继的信号
R_crd=CH_rd*sqrt(POW_DIV*sig).*Xr+xy_noise(M2);
%MRC的合并信号
R_combine=conj(CH_sd)*sqrt(POW_DIV*sig).*R_csd+conj(CH_rd)*sqrt(POW_DIV*sig).*R_crd;
else
%ifdirecttransmissionischosen,thesourcejustretransmitthesignalagain.
%如果不使用协同,源节点重复发送自己的数据,假设两次重复发送期间信道保持不变
R_crd=CH_sd*sqrt(POW_DIV*sig).*Xs+xy_noise(M2);
R_combine=conj(CH_sd)*sqrt(POW_DIV*sig).*R_csd+conj(CH_sd)*sqrt(POW_DIV*sig).*R_crd;
%thedecodesignalofofcooperativeMRCcombining
%MRC后的判决信号
Y_combine=(R_combine>
%thenumberoferrorbit
%统计每一帧里面错误的比特数目
err_num_dsd=sum(Xs~=Y_dsd)+err_num_dsd;
err_num_coop=sum(Xs~=Y_combine)+err_num_coop;
end
%try=0:
%therealber
%计算每个SNR下的平均错误BER
ber_dsd(snrcount)=err_num_dsd/(M2*Monte_MA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 仿真 DF AF 源程序 上课 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)