?? ofdm3.m
字號:
%ofdm.m
%仿真實現OFDM傳輸系統
function[ber]=ofdm(ebn0)
%---------定義參數--------
para=128; %并行傳輸的信道數(點數)
fftlen=128; %FFT長度
noc=128; %子載波數
nd=6; %每次循環含有的OFDM 符號數
ml=2; %調制電平:QPSK(二電平)
TOFDM=160e-6; %一個OFDM符號的時間長度
TCP=32e-6; %CP時間長度
gilen=32; %保護間隔(點數)
noe=0; %誤碼率
nod=0; %傳輸的數據數量
%--------------發送部分--------
%--------------產生數據--------
seldata=rand(1,para*ml)>0.5;%(均勻分布的隨機矩陣函數;para*nd*ml每次產生的數據個數)
%seldata得到的實際上是右邊那個邏輯表達式的結果,rand產生的值如果大于0.5,則seldata為1,如果小于0.5,則seldata為0
%---------------------串并變換-------------
paradata=reshape(seldata,para,ml);
%變換方式:前128bit變為第一列,隨后的128bit為第二列,依此類推
%----------------------QPSK調制-------------
x=qpskmod(paradata,para,ml); % 實現QPSK調制,并規一化
%調制后信號的實部,虛部圖
xr=real(x);
xi=imag(x);
figure(1);
subplot(2,1,1);plot([1:length(xr)],xr.');
title('實部圖形');
subplot(2,1,2);plot([1:length(xi)],xi.');
title('虛部圖形');
%-------------IFFT--------------
y=ifft(x,fftlen) ;
%------信號頻譜圖——————
figure(2);
plot([1:256],abs(fft(x,256)));
axis([0 256 0 30]);
title('信號頻譜圖');
%-----------并串轉換--------
paradata1=reshape(y,1,para);
ich2=real(paradata1);
qch2=imag(paradata1);
%------------插入保護間隔----------
[ich3,qch3]=giins(ich2,qch2,para,gilen);
para1=para+gilen;
paradata2=ich3+qch3.*i;
%--------------加入加性高斯白噪聲--------------
snr=input('snr=');
paradata3=awgn(paradata2,snr,'measured');
%--------------接收部分-------------
%-----------------移除保護間隔---------------
ich4=real(paradata3);
qch4=imag(paradata3);
[ich5temp,qch5temp]=girem(ich4,qch4,para1,gilen);
%------------串并轉換—————————
ich5=reshape(ich5temp,para,1);
qch5=reshape(qch5temp,para,1);
%----------------FFT----------------
rx=ich5+qch5.*i;
ry=fft(rx,para);
ich6=real(ry);
qch6=imag(ry);
%------星座圖————————
figure(3);
ich6temp=ich6*sqrt(2);
qch6temp=qch6*sqrt(2);
plot(ich6temp,qch6temp,'o');
title('BPSK星座圖');
%---------------QPSK解調----------
[demodata]=qpskdemod(ich6,qch6,para);
%------------------并串轉換-------------
demodata1=reshape(demodata,1,para*ml);
%-------------------誤比特率(BER)-------------
%即使的誤碼和數據
noe2=sum(abs(demodata1-seldata));
%將接受解調后的信號與原始信號相比較,累計不一樣的
nod2=length(seldata); %發送信號總長度
%累計誤碼數和總的數據
noe=noe+noe2;
%因為是進行了nloop次的循環,所以把每次循環的數據和誤碼數積累起來
nod=nod+nod2;
%-------------------輸出結果------------------
ber=noe/nod %總的誤碼率
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -