?? test.m
字號:
% OFDM demodulation frame by frame
clear;
if 0
fftSize=8;
CpLength=2;
%dataSymbolNumberPerFrame=13;
dataSymbolNumberPerFrame=10;
numberOfOccupiedSubcarrier=4;
occupiedSubcarrierIndex=[6,7,1,2]+1;
OFDMsymbolPerFrame=6;
% pilotPatternAndValue=[0 0 0 0; 2.1+6.7j 0 -6.8+4.8j 0; 0 0.6 0 6.7j; 0 0 5+5j 0; 0 -0.3j 0 8.6; 1.1+2.2j 3.2-6j 4.9 9.1j];
pilotPatternAndValue=[0 0 0 0; 2.1+6.7j 0 -6.8+4.8j 0; 0 0.6 0 6.7j; 1.1+2.2j 3.2-6j 4.9 9.1j; 0 -0.3j 0 8.6; 0 0 5+5j 0];
% pilotPatternAndValue=[ 1.1+2.2j 3.2-6j 4.9 9.1j; 2.1+6.7j 0 -6.8+4.8j 0; 0 0.6 0 6.7j; 0 0 5+5j 0; 0 -0.3j 0 8.6;0 0 0 0];
u_OFDMsymbolCP=[0:(fftSize+CpLength)*OFDMsymbolPerFrame-1]-2*j*[0:(fftSize+CpLength)*OFDMsymbolPerFrame-1];
estimatedCFR=zeros(OFDMsymbolPerFrame, fftSize);
for n=1:OFDMsymbolPerFrame
estimatedCFR(n,:)=n+j*[1:fftSize];
end
He=estimatedCFR.';
ycp=zeros(fftSize+CpLength,OFDMsymbolPerFrame);
ycp(:)=u_OFDMsymbolCP;
y=ycp(CpLength+1:end,:);
Y=fft(y);
Ye_s=[];
for n=1:OFDMsymbolPerFrame
dataSubcarrierIndex=find(~abs(pilotPatternAndValue(n,:)));
dataSubcarrierIndex2=occupiedSubcarrierIndex(dataSubcarrierIndex);
temp=Y(dataSubcarrierIndex2,n)./He(dataSubcarrierIndex2,n);
Ye_s=[Ye_s;temp];
end
Ye_s=Ye_s(1:dataSymbolNumberPerFrame)
end
if 01
isShortCP=0;
fftSize=8;
CpLength1=5;
%dataSymbolNumberPerFrame=13;
dataSymbolNumberPerFrame=12;
numberOfOccupiedSubcarrier=4;
occupiedSubcarrierIndex=[6,7,1,2]+1;
if isShortCP % short CP
OFDMsymbolPerFrame=7;
CpLength2=2;
pilotPatternAndValue=[0 0 0 0; 2.1+6.7j 0 -6.8+4.8j 0; 0 0.6 0 6.7j; 0 0 5+5j 0; 0 -0.3j 0 8.6; 1.1+2.2j 3.2-6j 4.9 9.1j; -3.89+4.5j 0 0 -6.7j];
len=6*(fftSize+CpLength1)+1*(fftSize+CpLength2);
else % long CP
OFDMsymbolPerFrame=6;
CpLength2=0;
pilotPatternAndValue=[0 0 0 0; 2.1+6.7j 0 -6.8+4.8j 0; 0 0.6 0 6.7j; 0 0 5+5j 0; 0 -0.3j 0 8.6; 1.1+2.2j 3.2-6j 4.9 9.1j];
len=6*(fftSize+CpLength1);
end
u_OFDMsymbolCP=[0:len-1]'-2*j*[0:len-1]';
estimatedCFR=zeros(OFDMsymbolPerFrame, fftSize);
for n=1:OFDMsymbolPerFrame
estimatedCFR(n,:)=n+j*[1:fftSize];
end
He=estimatedCFR.';
if isShortCP
ycp=zeros(fftSize+CpLength1,OFDMsymbolPerFrame-1);
ycp(:)=u_OFDMsymbolCP(1:end-(fftSize+CpLength2));
y=ycp(CpLength1+1:end,:);
Y=fft(y);
Y=[Y fft(u_OFDMsymbolCP(end-fftSize+1:end))];
else
ycp=zeros(fftSize+CpLength1,OFDMsymbolPerFrame);
ycp(:)=u_OFDMsymbolCP;
y=ycp(CpLength1+1:end,:);
Y=fft(y);
end
Ye_s=[];
for n=1:OFDMsymbolPerFrame
dataSubcarrierIndex=find(~abs(pilotPatternAndValue(n,:)));
dataSubcarrierIndex2=occupiedSubcarrierIndex(dataSubcarrierIndex);
temp=Y(dataSubcarrierIndex2,n)./He(dataSubcarrierIndex2,n);
Ye_s=[Ye_s;temp];
end
Ye_s=Ye_s(1:dataSymbolNumberPerFrame);
load u_equalizedDataSymbol_r.txt;
load u_equalizedDataSymbol_i.txt;
Ye1=u_equalizedDataSymbol_r+j*u_equalizedDataSymbol_i;
Ye1(1)=[];
max(abs(Ye1-Ye_s))
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -