OFDM与QPSK对比程序的源代码Word文档下载推荐.docx

上传人:b****6 文档编号:20250877 上传时间:2023-01-21 格式:DOCX 页数:16 大小:19.63KB
下载 相关 举报
OFDM与QPSK对比程序的源代码Word文档下载推荐.docx_第1页
第1页 / 共16页
OFDM与QPSK对比程序的源代码Word文档下载推荐.docx_第2页
第2页 / 共16页
OFDM与QPSK对比程序的源代码Word文档下载推荐.docx_第3页
第3页 / 共16页
OFDM与QPSK对比程序的源代码Word文档下载推荐.docx_第4页
第4页 / 共16页
OFDM与QPSK对比程序的源代码Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

OFDM与QPSK对比程序的源代码Word文档下载推荐.docx

《OFDM与QPSK对比程序的源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《OFDM与QPSK对比程序的源代码Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

OFDM与QPSK对比程序的源代码Word文档下载推荐.docx

%Generatetherandombinarystreamfortransmittest

BitsTx=floor(rand(1,NumLoop*NumSubc)*2);

%Modulate(GeneratesQAMsymbols)

%input:

BitsTx(1,NumLoop*NumSubc);

output:

SymQAM(NumLoop,NumSubc/2)

SymQAMtmp=reshape(BitsTx,2,NumLoop*NumSubc/2).'

;

SymQAMtmptmp=bi2de(SymQAMtmp,2,'

left-msb'

);

%--------------------------------------------------------------------

%函数说明:

%bin2dec(binarystr)interpretsthebinarystringbinarystrandreturnsthe

%equivalentdecimalnumber.

%bi2de是把列向量的每一个元素都由2进制变为10进制

%D=BI2DE(...,MSBFLAG)usesMSBFLAGtodeterminetheinputorientation.

%MSBFLAGhastwopossiblevalues,'

right-msb'

and'

.Givinga

%'

MSBFLAGdoesnotchangethefunction'

sdefaultbehavior.

%Givinga'

MSBFLAGflipstheinputorientationsuchthatthe

%MSBisontheleft.

%%%D=BI2DE(...,P)convertsabasePvectortoadecimalvalue.

%%Examples:

%%>

>

B=[0011;

1010];

T=[011;

210];

D=bi2de(B)>

D=bi2de(B,'

)>

D=bi2de(T,3)

%%D=D=D=

%%12312

%%5105

%QAMmodulation

%00->

-1-i,01->

-1+i,10->

1-i,11->

1+i

%利用查表法进行QAM星座映射

QAMTable=[-1-i-1+i1-i1+i];

SymQAM=QAMTable(SymQAMtmptmp+1);

%IFFT%

SymQAM(NumLoop,NumSubc/2);

SymIFFT(NumSubc,NumLoop)

SymIFFT=zeros(NumSubc,NumLoop);

SymIFFTtmp=reshape(SymQAM,NumSubc/2,NumLoop);

SymIFFTtmptmp=zeros(NumSubc,NumLoop);

SymIFFTtmptmp(1,:

)=real(SymIFFTtmp(1,:

));

%实数

SymIFFTtmptmp(NumSubc/2+1,:

)=imag(SymIFFTtmp(1,:

%这么安排矩阵的目的是为了构造共轭对称矩阵

%共轭对称矩阵的特点是在ifft/fft的矢量上N点的矢量

%在0,N/2点必须是实数一般选为0

%1至N/2点与(N/2)+1至N-1点关于N/2共轭对称

SymIFFTtmptmp(2:

NumSubc/2,:

)=SymIFFTtmp(2:

SymIFFTtmptmp((NumSubc/2+2):

NumSubc,:

)=flipdim(conj(SymIFFTtmp(2:

)),1);

%B=flipdim(A,dim)returnsAwithdimensiondimflipped.

%Whenthevalueofdimis1,thearrayisflippedrow-wisedown.Whendimis2,

%thearrayisflippedcolumnwiselefttoright.flipdim(A,1)isthesameas

%flipud(A),andflipdim(A,2)isthesameasfliplr(A).

a=[123;

456;

789;

101112]

%%a=

%%123

%%456

%%789

%%101112

b=flipdim(a,1)

%%b=

SymIFFT=ifft(SymIFFTtmptmp,NumSubc,1);

%Addcyclicprefix%

SymIFFT(NumSubc,NumLoop);

SymCP(NumSubc+NumCP,NumLoop)

NumAddPrefix=NumSubc+NumCP;

SymCP=zeros(NumAddPrefix,NumLoop);

RowPrefix=(NumSubc-NumCP+1):

NumSubc;

SymCP=[SymIFFT(RowPrefix,:

SymIFFT];

%Gothroughthechannel%

SymCP(NumSubc+NumCP,NumLoop);

SymCh(1,(NumSubc+NumCP)*NumLoop)

SymCh=zeros(1,(NumSubc+NumCP)*NumLoop);

SymChtmp=SymCP(:

).'

%进行这个转置操作之后就成了一个矢量

%相当于把矩阵的列向量依次排列改变为一个行向量

Ch=[11/21/4];

SymChtmptmp=filter(Ch,1,SymChtmp);

%Firlterdatawithaninfiniteimpulseresponse(IIR)orfiniteimpulseresponse

%(FIR)filter

%y=filter(b,a,X)filtersthedatainvectorXwiththefilterdescribedby

%numeratorcoefficientvectorbanddenominatorcoefficientvectora.Ifa

(1)is

%notequalto1,filternormalizesthefiltercoefficientsbya

(1).Ifa

(1)equals

%0,filterreturnsanerror.

%IfXisamatrix,filteroperatesonthecolumnsofX.IfXisamultidimensional

%array,filteroperatesonthefirstnonsingletondimension.

%AddtheAWGN

BerSnrTable=zeros(20,3);

forsnr=0:

19;

%=SNR+10*log10(log2

(2));

BerSnrTable(snr+1,1)=snr;

SymCh=awgn(SymChtmptmp,snr,'

measured'

%AWGNAddwhiteGaussiannoisetoasignal.

%Y=AWGN(X,SNR)addswhiteGaussiannoisetoX.TheSNRisindB.

%ThepowerofXisassumedtobe0dBW.IfXiscomplex,then

%AWGNaddscomplexnoise.

%------------------------------------------------------------------

%Y=AWGN(X,SNR,SIGPOWER)whenSIGPOWERisnumeric,itrepresents

%thesignalpowerindBW.WhenSIGPOWERis'

AWGNmeasures

%thesignalpowerbeforeaddingnoise.

%---------------------------------------------------------------------

%Y=AWGN(X,SNR,SIGPOWER,STATE)resetsthestateofRANDNtoSTATE.

%

%Y=AWGN(...,POWERTYPE)specifiestheunitsofSNRandSIGPOWER.

%POWERTYPEcanbe'

db'

or'

linear'

.IfPOWERTYPEis'

thenSNR

%ismeasuredindBandSIGPOWERismeasuredindBW.IfPOWERTYPEis

thenSNRismeasuredasaratioandSIGPOWERismeasured

%inWatts.

%Example:

TospecifythepowerofXtobe0dBWandaddnoisetoproduce

%anSNRof10dB,use:

%X=sqrt

(2)*sin(0:

pi/8:

6*pi);

%Y=AWGN(X,10,0);

TospecifythepowerofXtobe0dBW,setRANDNtothe1234th

%stateandaddnoisetoproduceanSNRof10dB,use:

%Y=AWGN(X,10,0,1234);

TospecifythepowerofXtobe3Wattsandaddnoiseto

%producealinearSNRof4,use:

%Y=AWGN(X,4,3,'

TocauseAWGNtomeasurethepowerofX,setRANDNtothe

%1234thstateandaddnoisetoproducealinearSNRof4,use:

%Y=AWGN(X,4,'

1234,'

%RemoveGuardIntervals%

SymCh(1,(NumSubc+NumCP)*NumLoop);

SymDeCP(NumSubc,NumLoop)

SymDeCP=zeros(NumSubc,NumLoop);

SymDeCPtmp=reshape(SymCh,NumSubc+NumCP,NumLoop);

SymDeCP=SymDeCPtmp((NumCP+1+SyncDelay):

NumAddPrefix+SyncDelay,:

%FFT%

SymDeCP(NumSubc,NumLoop);

SymFFT(NumSubc,NumLoop)

SymFFT=fft(SymDeCP,NumSubc,1);

%MakeDecision(IncludeDeQAM)%

%SymFFT(NumSubc,NumLoop);

SymDec(NumSubc,NumLoop)

SymDec=zeros(NumSubc,NumLoop);

SymEqtmp(1,:

)=SymFFT(1,:

)+i*SymFFT(NumSubc/2+1,:

SymEqtmp(2:

)=SymFFT(2:

form=1:

NumLoop

forn=1:

NumSubc/2

Real=real(SymEqtmp(n,m));

Imag=imag(SymEqtmp(n,m));

if(abs((Real-1))<

abs((Real+1)))

SymDec(2*n-1,m)=1;

else

SymDec(2*n-1,m)=0;

end

if(abs((Imag-1))<

abs((Imag+1)))

SymDec(2*n,m)=1;

SymDec(2*n,m)=0;

%Testbylavabin

%AnotherwaytoDeQAM

%QAMTable=[-1-i-1+i1-i1+i];

TestSymDec=zeros(NumSubc,NumLoop);

TestSymEqtmp(1,:

TestSymEqtmp(2:

TestSymEqtmp1=reshape(TestSymEqtmp,1,NumSubc*NumLoop/2);

min_d=zeros(size(TestSymEqtmp1));

min_ddd=zeros(1,NumSubc*NumLoop);

d=zeros(4,1);

min_index=0;

forii=1:

1:

(NumSubc*NumLoop/2)

forjj=1:

4

d(jj)=abs(TestSymEqtmp(ii)-QAMTable(jj));

[min_d(ii),min_index]=min(d);

%%[Y,I]=MIN(X)returnstheindicesoftheminimumvaluesinvectorI.

switchmin_index

case1

min_ddd(2*ii-1)=0;

min_ddd(2*ii)=0;

case2

min_ddd(2*ii)=1;

case3

min_ddd(2*ii-1)=1;

case4

otherwise

fprintf('

Impossibleerror!

!

\n\n'

%%C=min(A)returnsthesmallestelementsalongdifferentdimensionsofan

%%array.

%%IfAisavector,min(A)returnsthesmallestelementinA.

%%IfAisamatrix,min(A)treatsthecolumnsofAasvectors,returningarow

%%vectorcontainingtheminimumelementfromeachcolumn.

%%[C,I]=min(...)findstheindicesoftheminimumvaluesofA,andreturns

%%theminoutputvectorI.Ifthereareseveralidenticalminimumvalues,the

%%indexofthefirstonefoundisreturned.

%BitError

BitsRx=zeros(1,NumSubc*NumLoop);

BitsRx=SymDec(:

[Num,Ber]=symerr(BitsTx,BitsRx)

BerSnrTable(snr+1,2)=Num;

BerSnrTable(snr+1,3)=Ber;

ifmin_ddd==BitsRx

DeQAMtwowaysthesameresults\n\n'

DeQAMtwowaysthedifferentresults'

figure

(1);

subplot(2,1,1);

semilogy(BerSnrTable(:

1),BerSnrTable(:

2),'

o-'

subplot(2,1,2);

3),'

%--------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1