?? 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 + -