?? ofdm.asv
字號(hào):
%ofdm.m
%仿真實(shí)現(xiàn)OFDM傳輸系統(tǒng)
function[ber]=ofdm(ebn0)
%---------定義參數(shù)--------
para=128; %并行傳輸?shù)男诺罃?shù)(點(diǎn)數(shù))
fftlen=128; %FFT長(zhǎng)度
noc=128; %子載波數(shù)
nd=6; %每次循環(huán)含有的OFDM 符號(hào)數(shù)
ml=2; %調(diào)制電平:QPSK(二電平)
sr=4800; %符號(hào)速率
br=sr.*ml; %每載波的比特率
gilen=32; %保護(hù)間隔(點(diǎn)數(shù))
%------------主循環(huán)部分---------
nloop=10000 %仿真循環(huán)次數(shù)
noe=0; %誤碼率
nod=0; %傳輸?shù)臄?shù)據(jù)數(shù)量
eop=0; %誤組數(shù)
nop=0; %傳輸?shù)姆纸M數(shù)
for iii=1:nloop
%--------------發(fā)送部分--------
%--------------產(chǎn)生數(shù)據(jù)--------
seldata=rand(1,para*nd*ml)>0.5;%(均勻分布的隨機(jī)矩陣函數(shù);para*nd*ml每次產(chǎn)生的數(shù)據(jù)個(gè)數(shù))
%seldata得到的實(shí)際上是右邊那個(gè)邏輯表達(dá)式的結(jié)果,rand產(chǎn)生的值如果大于0.5,則seldata為1,如果小于0.5,則seldata為0
%---------------------串并變換-------------
paradata=reshape(seldata,para,nd*ml);
%變換方式:前128bit變?yōu)榈谝涣?隨后的128bit為第二列,依此類推
%----------------------QPSK調(diào)制-------------
[ich,qch]=qpskmod(paradata,para,nd,ml);%(同向分量,正交分量)
%-------------IFFT--------------
x=ich1+qch1.*i;
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%------------插入保護(hù)間隔----------
[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);
fftlen2=fftlen+gilen;
%------------計(jì)算衰減--------------
spow=sum(ich3.^2+qch.^2)/nd./para;
attn=0.5*spow*sr/br*10.^(-ebn0/10);
attn=sqrt(attn);
%--------------加入加性高斯白噪聲--------------
[ich4,qch4]=comb(ich3,qch3,attn);
%--------------接收部分-------------
%-----------------移除保護(hù)間隔---------------
[ich5,qch5]=girem(ich4,qch4,fftlen2,gilen,nd);
%----------------FFT----------------
rx=ich5+qch5.*i;
ry=fft(rx);
ich6=real(ry);
qch6=imag(ry);
%---------------QPSK解調(diào)-----------
ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml);
%------------------并串轉(zhuǎn)換-------------
demodata1=reshape(demodata,1,para*nd*ml);
%-------------------誤比特率(BER)-------------
%即使的誤碼和數(shù)據(jù)
noe2=sum(abs(demodata1-seldata));
%將接受解調(diào)后的信號(hào)與原始信號(hào)相比較,累計(jì)不一樣的
nod2=length(seldata); %發(fā)送信號(hào)總長(zhǎng)度
%累計(jì)誤碼數(shù)和總的數(shù)據(jù)
noe=noe+noe2;
%因?yàn)槭沁M(jìn)行了nloop次的循環(huán),所以把每次循環(huán)的數(shù)據(jù)和誤碼數(shù)積累起來(lái)
nod=nod+nod2;
%計(jì)算誤組率(PER)(每次循環(huán)作為一個(gè)分組)
if noe~=0
eop=eop+1;
else
eop=eop;
end
eop;
nop=nop+1;
fprintf('%d\t%e\t%d\n',iii,noe2/nod2,eop); %屏幕顯示
end
%-------------------輸出結(jié)果------------------
per=eop/nop;%總的誤組率
ber=noe/nod;%總的誤碼率
save ofdm.mat
%------------------------結(jié)束---------------
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -