📄 ds_uwb说明.txt
字号:
关于simu1:
在simlink运行之前的初始化过程中,完成了信道时延和幅度的估计,多径合成权系数估计
多径合成采用可选EG/MR/MMSE合成
信道可选白噪声信道AWGN和IEEE80.215.3a UWB标准信道模型(CM1-CM4)但为了简化,
这里采用了IEEE80.215.3a给出了信道模型中的仿真数据包(如果你是作超宽带的,信道模型程序和数据可从IEEE80.215.3a网站获取)
和大部分仿真一样,模型中的Eb/No指的是单比特信息符号携带的能量和噪声的比例,监督的讲,在AWGN信道中,Eb/No为4.31db时,误码率0.01
关于zslsimu直接运行simuuwb.m可看到结果)
显然和simu1一样,只是增加了.m文件,修改.m文件中的重要参数:多径数、PN序列长度、PN序列、单个信息码元宽度Tb(单位ns)、每个脉冲宽度Tc(单位ns)、系统的仿真精度Ts(单位ns)、仿真时间
chanidx=1:1是因为考虑信道数据文件太大,不好上传,想得到精确的仿真,同一个信道类型(chantype),最好仿真100次实现,信道文件可由UWB标准组织下载
有问题emal: zslbug@tom.com,除非有必要,没有意义的问题不要问( 比如什么是标准模型、如何仿真高斯脉冲、为什么EbNo=4.31db误码率为0.01),我没时间
信道使用的就是 本栏目 第二页 中 MichaelWang [共享]UWB信道仿真matlab程序
不同的是,他给的是他下载的IEEE802.15.3a组织用于评估室内UWB系统性能的信道(matlab)源代码,我直接下载了标准组织信道程序的部分仿真数据,并将连续的信道冲击响应,离散为和仿真精度一样的离散的 信道冲击响应,这样信道输出就是输入信号和信道冲击响应的卷积(所以在simulink中新号经过UWB信道就是一个简单的卷积)
设单个脉冲的能量Ep
一个码元用N个脉冲来表示,所以一个码元能量Eb=N*Ep
设信号/噪声比Eb/No=X(db)
则有:10*log(Eb/No)=X
所以:10*log(No/Eb)=-X
噪声功率=fangcha=No=Eb*10^(-X/10)
matlab中应加入的标准差=sqrt(No/2)
=sqrt(fangcha/2)=sqrt(Eb*10^(-X/10)/2)
故当Eb=1(仿真中常用,而不是Ep=1,
即Ep=1/N,或者说单脉冲幅度是单位能量脉冲幅度的1/sqrt(N))
此时噪声标准差(matlab中应加入的标准差)
sigma=sqrt(10^(-X/10)/2)
下面是一个简单的例子(Eb=1的BPsK调制码元经过AWGN信道,
理论与实际的误码率是相同的,其加噪声的方法和上面叙述的相同):
(把下面的语句直接复制成.m文件,在matlab直接执行就可以知道结果了)
%AWGN中BPSK调制误码率 %仿真
Tx=2*randint(100000,1)-1;
EbNo=1:10; %dB
for i=1:length(EbNo)
No=10^(-0.1*EbNo(i)); sigma=sqrt(No/2);
Rx=Tx+normrnd(0,sigma,size(Tx));
Err(i)=sum(sign(Rx)~=Tx)/size(Tx,1)
end
figure(1); semilogy(EbNo,Err,'-r>');
grid on; hold;
%理论计算
EbNoDecimal= 10.^(EbNo./10);%%将信噪比化为非dB表示
H = 0.5*erfc(sqrt(EbNoDecimal));
%%Q函数定义:1/2*erfc(sqrt(EbNo))并套用BPSK误码率公式
semilogy(EbNo,H,'-b*'); legend('仿真结果','理论计算');
关于simulink模型1目录:
Matlab打开时,在菜单栏旁边有一个当前目录(Current Directory)项目,默认你都知道是:安装盘:\MATLAB6p5\work
现在,假设你有个文件夹是:D:/yourfile/,
文件夹里面有simulink模型文件: D:/yourfile/AA.mdl ,设模型运行的时候需要调用同目录下的(我们通常会放一起的,^_^): D:/yourfile/BB.mat等数据文件
若你打开matlab,接着用simulink打开D:/yourfile/AA.mdl,然后你就运行,结果这哥们AA.mdl并不运行,因为它说找不到BB.mat等数据文件,但你仔细看他说的是他找不到 安装盘:\MATLAB6p5\work\BB.mat,(他找错目录了)
原来打开*.mdl文件并运行并没有改变默认工作目录,改变Current Directory为D:/yourfile就可以了
关于(matlab/simulin)模型2目录:
这里的(matlab/simulin)模型,是用simuuwb.m文件,调用同目录下的ds_uwb200msys.mdl的simulink模型文件,*.mat是ds_uwb200msys.mdl需要调用的信道冲击响应数据文件,所以如果你通过运行simuuwb.m文件可以没问题的执行(但同目录下一定要有ds_uwb200msys.mdl和*.mat文件),如果同目录下没有ds_uwb200msys.mdl和*.mat文件,结果(^_^)…
还有,如果你在看程序是否运行,而不是想用来得到结果,最好将simuuwb.m中的仿真时间xtcs.SimuTime=10000*xtcs.Tb;改为xtcs.SimuTime=100*xtcs.Tb;,即发送100个码元
采用MMSE是为了获取最佳的多径合成权系数,RAKE的多径合成各路权系数比例不同,这里MMSE指的是如何选取权系数获取最高的信噪比(误码性能),数学推导和具体含义就是下面的这篇文章所论述的(MMSE就是采用下面文章的方法):
Ye Li, Andreas F. Molisch. Channel Estimation and Signal Detection for UWB [J]. Mitsubishi Electric Research Laboratories. November 2003
假设模型仿真是200M DS_UWB则模型:
Tb是每个信息码元速率,Tb=1/200M (s)=5ns
设每个信息码元用Pn序列[1,-1,-1,1,1,-1,1,-1]调制,并采用原文的高斯5阶导脉冲;
每个脉冲宽度Tc=PlusTime=Tb/Pn_Length=Tb/8;
把一下语句直接复制成.m文件,就可以执行看到该脉冲串的频谱图和时域图,和你观察的有一定差异,是否满足FCC,和你信号的发射幅度应该有关系吧,仅仅是波形了,这是我以前的程序,具体都记不清了,你在看看了
clc; clear all;
%-----------------------得到脉冲------------------
samples=64;%每个脉冲抽样点数
type=5;
%可选脉冲类型(0:高斯/1:高斯一阶导/2:二阶导/5:五阶导/其他:scholtz)
Tp=0.5; tao=Tp/pi; t=((1:samples)'-1)/samples-0.5;
switch(type)
%高斯脉冲与其傅氏变换形式相同(钟形函数)
case 0, gaus=exp(-t.^2/tao.^2); re=gaus/norm(gaus);
case 1, gausmono = -2*t./tao^2.*exp(-t.^2/tao.^2);
re=gausmono/norm(gausmono);
case 2, gausdoub=(-2+4.*t.^2./tao^2)./tao^2.*exp(-t.^2/tao.^2);
re=gausdoub/norm(gausdoub);
%高斯波形五阶导数
case 5, sigma=0.08448;
gausfive=-(-15.*t./sigma+10.*(t./sigma).^3-(t./sigma).^5).*exp(-(t./sigma).^2./2); re=gausfive/norm(gausfive);
%Scholtz单脉冲,其中心频率为fp=sqrt(2/pi)/tao,比如tao=1/pi有fp=5
otherwise, scholtz=sqrt(8/3/tao)*(1-4*pi*(t/tao).^2).*exp(-2*pi*(t/tao).^2); re=scholtz/norm(scholtz);
end
plus=re;
%--------------------脉冲被PN序列调制---
Pn=[1,-1,-1,1,1,-1,1,-1];
PnWave=[Pn,-Pn,Pn,0*Pn]';
C=plus*PnWave'; Tx=C(;
%----------------------绘时域和频域图
PlusTime=5/8; %单个脉冲宽度(这里设Tb=5ns;每个Tb用上述长度为8的Pn(Gaus五阶导脉冲串)来调制,则每个脉冲宽度5/8)
PlusSamples=samples;
y=Tx; TimeRatio=PlusTime/PlusSamples; %5/7;
y=y/max(y); subplot(121); grid; plot((1:length(y))*TimeRatio,y,'r-'); xlabel('t(ns)'); legend('时城波形',0); grid on;
%求y其相应的fft变换,划图频谱时将幅度取绝对值
MaxSample=2^nextpow2(length(Tx)); MaxTime=MaxSample*TimeRatio; fmin=1/MaxTime;
yfft=fft(y,MaxSample); yfabs=abs(yfft);
%变换yfabs频率开始是0频,而下标从1开始,递增fmin
fend=20; %需要划到的最高频 (MHz)
idx=1:floor(fend/fmin); freq=idx*fmin; subplot(122);
plot(freq,yfabs(idx)/max(yfabs),'r-'); xlabel('f(GHz)');legend('频域波形',0);
仿真的波形不平滑,很可能是仿真点不够,我最后是用.m文件仿真的,因为我觉得.m文件灵活点(虽然大家都说比好的simulink速度差一个数量级,我的模型不算,估计我的simulink模型比.m慢的多的多^_^),看看我的模型参考一下了,一点用都没有的,你要根据自己要求重开始的,那样许多概念才会清楚,
上图的图标是Tx=C(冒号);
关于信道,ChanType指的是(CM1~CM4),故取值1:4,最后每个ChanType将对应上图每一条不平滑的曲线(应该是平滑的)
要绘其中一条曲线,该类型的信道,可能要仿真多次(多次信道实现)
如CM1信道仿真100次,故ChanIdx可取1:100,你下载的信道程序默认就每种信道产生100次实现,不过我的模型中只有一次实现(每个信道类型就实现一次,为了简化),你要做仿真,不能一中类型信道,就用一次实现来仿真(要是不懂,就先看IEE802.15.3a标注信道模型程序,程序没类型信道实现100个)
对每次信道实现,都要仿真一次收发,如发送5000个码元
最后将100个ChanIdx的误码率相加,和在除于100,就得到了该类型信道的误码性能,夜深了,以前搞研究的时候晕,现在更晕,大虾们努力吧,我看是帮不上忙了,我要回家给孩子喂奶去了^_^
'仿真的波形不平滑,很可能是仿真点不够,我最后是用.m文件仿真的,因为我觉得.m文件灵活点(虽然大家都说比好的simulink速度差一个数量级,我的模型不算,估计我的simulink模型比.m慢的多的多^_^),看看我的模型参考一下了,一点用都没有的,你要根据自己要求重开始的,那样许多概念才会清楚, '
这几句话别复制到.m文件中呀,^_^,我不小心加进去的,绘图结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -