?? ofdmnew1.m
?? 畢業設計
?? M
字號:
??
%56*128=7168,糾錯碼,三種信道
%數據調制采用QPSK
clear;
clc;
%***********************參數設置部分***************************
SNR=10; %信噪比,單位dB
fl=128; %設置FFT長度(FFTlength)
Ns=28; %設置一個幀結構中OFDM信號的個數
para=128; %設置并行傳輸的子載波個數
sr=250000; %設置符號速率(symbolrate)
bt=sr.*2; %設置每個子載波的比特率(bitrate)
gl=32; %設置保護時隙的長度(guardlength)
%************************發送端部分****************************
signal=randint(1,para*Ns*2); %產生0、1隨機數列,符號個數為para*2*Ns(子信道個數*調制水平*每個子信道中有用符號個數)
for l=1:para*Ns*2
signal2(l,1)=signal(1,l);
end
n=62;
e=n/2;
code1 = encode(signal2,n,Ns*2,'cyclic/binary');
for i=1:para
for j=1:n
sigpara(i,j)=code1(((i-1)*n+j),1); %串并轉換,將隨機產生的二進制矩陣變換為行數為para,列數為2*Ns的矩陣
end
end
%進行QPSK調制,將數據分為兩個通道
for j=1:e
ich(:,j)=sigpara(:,2*j-1);
qch(:,j)=sigpara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1);
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%插入保護間隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%并串轉換
ich4=reshape(ich3,1,(fl+gl)*e);
qch4=reshape(qch3,1,(fl+gl)*e);
%形成復數發射數據
Trdata=ich4+qch4.*sqrt(-1);
%*************************信道*********************
%Redata=Trdata; %無噪信道的理想情況
%加性白高斯信道
Redata=awgn(Trdata,SNR,'measured');
%*************************信道(瑞利信道)*********************
%c = Rayleighchan;
%y=filter(c,Trdata);
%Redata = awgn(y,SNR,'measured');
%*************************信道(萊斯信道)*********************
%c=ricianchan;
%y=filter(c,Trdata);
%Redata = awgn(y,SNR,'measured');
%*************************接收端部分*******************************
%移去保護時隙
idata=real(Redata);
qdata=imag(Redata);
idata1=reshape(idata,fl+gl,e);
qdata1=reshape(qdata,fl+gl,e);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%FFT
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReI=real(ry)/kmod;
ReQ=imag(ry)/kmod;
%QPSK逆映射
for j=1:e
Repara(:,2*j-1)=ReI(:,j);
Repara(:,2*j)=ReQ(:,j);
end
[a,b]=size(Repara);
%符號抽樣判決
for i=1:a
for j=1:b
if Repara(i,j)>0.5
Resig1(i,j)=1;
else
Resig1(i,j)=0;
end
end
end
for i=1:para
for j=1:n
Resig((i-1)*n+j)=Resig1(i,j); %并串轉換,將行數為para,列數為2*Ns的矩陣變為行數為1,列數為para*Ns*2的矩陣
end
end
for l=1:para*n
signal3(l,1)=Resig(1,l);
end
code2 = decode(signal3,n,Ns*2,'cyclic/binary');
for l=1:para*Ns*2
signal4(1,l)=code2(l,1);
end
%***************************結果*********************************************
[num ratio]=symerr(signal,signal4) %誤碼率比較,num表示錯誤碼元個數,ratio表示錯誤碼元比率
%***************************繪圖*********************************
subplot(211)
stem(signal4(1:20));
grid;
subplot(212)
stem(signal(1:20));
grid;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -