用MATLAB实现OFDM仿真分析Word文档格式.docx
《用MATLAB实现OFDM仿真分析Word文档格式.docx》由会员分享,可在线阅读,更多相关《用MATLAB实现OFDM仿真分析Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
![用MATLAB实现OFDM仿真分析Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/5f29d164-02fc-4c64-9f14-f6a7fdc20338/5f29d164-02fc-4c64-9f14-f6a7fdc203381.gif)
Matlab是一种强大的工程计算软件。
目前最新的6.x版本(windows环境)是一种功能强、效率高、便于进行科学和工程计算的交互式软件包。
其工具箱中包括:
数值分析、矩阵运算、通信、数字信号处理、建模和系统控制等应用工具程序,并集应用程序和图形于一便于使用的集成环境中。
在此环境下所解问题的Matlab语言表述形式和其数学表达形式相同,不需要按传统的方法编程。
Matlab的特点是编程效率高,用户使用方便,扩充能力强,语句简单,内涵丰富,高效方便的矩阵和数组运算,方便的绘图功能。
3.1.2基于MATLAB的OFDM系统仿真链路
根据OFDM基本原理,本文给出利用MATLAB编写OFDM系统的仿真链路流程。
串行数据经串并变换后进行QDPSK数字调制,调制后的复信号通过N点IFFT变换,完成多载波调制,使信号能够在N个子载波上并行传输,中间插入10训练序列符号用于信道估计,加入循环前缀后经并串转换、D/A后进入信道,接收端经过N点FFT变换后进行信道估计,将QDPSK解调后的数据并串变换后得到原始信息比特。
本文采用MATLAB语言编写M文件来实现上述系统。
M文件包括脚本M文件和函数M文件,M文件的强大功能为MATLAB的可扩展性提供了基础和保障,使MATLAB能不断完善和壮大,成为一个开放的、功能强大的实用工具。
M文件通过input命令可以轻松实现用户和程序的交互,通过循环向量化、数组维数预定义等提高M文件执行速度,优化内存管理,此外,还可以通过类似C++语言的面向对象编程方法等等。
图3-1仿真链路模型
3.2循环前缀及信道估计对系统误码率的改善分析
本文主要研究循环前缀对系统误码率的改善分析
3.2.1循环前缀
OFDM系统中,每个并行数据支路都是窄带信号,可近似认为每个支路都经历平坦衰落,这样就减小了频率选择性衰落对信号的影响。
同时,每路子数据流速率的降低,减小了符号间干扰(ISI)。
此外,还可以通过加保护间隔的办法完全消除符号间干扰。
假设每个OFDM符号由Y个样值组成,由于时延扩展,接收端将会有和信道冲激响应持续时间相对应的前L(L<
Y)个样值发生错误,为此,可以在发送信号前端加上M个样值,接收端收到信号时,先去掉前M个样值,然后再进行FFT,只要M≥L就可完全消除ISI。
最初的保护间隔是用空数据填充的,这虽然消除了ISI,但却破坏了信道间的正交性。
后来,Peled和Ruiz提出了用循环前缀填充保护间隔的方法,即把Y个样值的最后M个复制到个OFDM符号的前端作为保护间隔,利用循环卷积的概念,只要循环前缀的长度大于信道的冲激响应,信道间仍是正交的。
符号周期由T增加至T′=T+
T,
T是保护时隙,增加保护时隙会降低频谱利用率,所以
T一般小于等于T/4。
3.2.2系统仿真结果分析
用上述OFDM系统的实现方法进行OFDM传输系统的仿真,系统参数见表3-1
3-1仿真系统参数
并行子信道个数
64
FFT的长度
载波个数
符号速率
25000
循环次数
100
调制方式
QPSK
循环一次OFDM符号个数
10
首先基本参数设置成如上表所示,再分别设置保护间隔为18和32,然后改变输入信号的信噪比为:
3、4、5、6、7、8、9、10、11、12、13。
图3-2相同信道(64)插入不同保护间隔下误码率比较
图3-3相同信道(128)插入不同保护间隔下误码率比较
图3-4相同信道(256)插入不同保护间隔下误码率比较
如图3-2可知,误码率随着信噪比的增加而逐渐减小,直至趋于理想化的误码率为0。
data1(下方曲线)是插入保护间隔为18时的误码率曲线,data2(上方曲线)是插入保护间隔为32时的曲线,可见在插入保护间隔过大时,会造成在信噪比低时的高误码率,但随着信噪比的增加,误码率会趋于相同。
改变并行子信道的个数为200,如图3-3,3-4,做相同的比较,可得同样的结论。
如图3-5与图3-6可知,在插入相同保护间隔的情况下,并行子信道的个数越多,信道传输信息的误码率越低。
并且大大提高了频谱的利用率。
这就充分说明OFDM系统的优点,可以把串行高速数据流成若干路并行低速数据流,每路低速数据流被调制在彼此正交的子载波上,然后所有子载波叠加在一起构成发送信号。
这种技术具有在杂波干扰下传送信号的能力,可以利用在容易受外界干扰或者抵抗外界干扰能力较差的传输介质中。
因此,OFDM的应用前景十分光明。
图3-5相同保护间隔下插入不同信道(64、128、256)误码率比较
图3-6相同保护间隔(32)下插入不同信道(128、200)误码率比较
OFDM技术在实现的过程中,需要根据相应的信道条件和系统要求进行合理设计,才能发挥其优势。
系统的参数选择,导频和同步方案的设计,均衡和编码技术的结合使用,都需要在实现之前进行优化设计,所以仿真工作是必不可少的。
OFDM的系统仿真是一个非常复杂的问题。
根据研究问题的侧重点,可以采用不同的仿真工具和方法分开进行。
目前许多系统级的仿真工具都支持OFDM系统的仿真,对于具体的算法则可以使用更加灵活的程序语言工具进行仿真。
OFDM系统的仿真是可以优化整个系统的参数和指标,缩短开发的周期。
结合我们的实践经验,系统的分析了OFDM实现中的关键技术,通过一个实例给出了OFDM系统仿真的基本框架,但在具体的系统设计中,还有很多更复杂的问题需要解决,尤其是同步技术,本文给出的只是系统设计时需要宏观考虑的问题。
第4章结论
随着数字时代的到来,OFDM技术给通信领域注入了新的活力。
正如绪论中所述,OFDM技术良好的性能在计算机网络、数字音频/视频广播、移动通信、卫星通信等多个领域中都有体现。
本文首先介绍了OFDM系统的关键技术,然后又分析了OFDM系统的原理,在OFDM系统原理的基础上,详细设计了一个基于MATLAB的系统仿真链路模型,并进行了计算机仿真,同时详细分析了仿真结果。
通过对该系统的仿真及分析,可以得到如下结论:
a)IFFT/FFT变换可以有效的实现OFDM信号的调制解调。
b)OFDM可以有效的提供系统频带利用率。
c)信息流的误码率随着信噪比的增加而逐渐减小。
d)信息传输时,并行信道的个数越多信息流的误码率越小。
本文所做的只是系统传输误码率的仿真,在实际应用中,大多需要将OFDM同相和反相两路信号调制成一路信号后,进行射频调制。
这时,系统的同步问题将是仿真的重点。
需要充分考虑系统的频率同步问题,频率的偏移将导致系统子载波得正交性变差,严重影响系统的正常工作。
OFDM的同步也是当前通信领域里的一个研究热点。
事物是在不断发展中,OFDM技术也需要发展。
通过与新技术的结合,OFDM技术将不断完善。
其良好的性能预示着它将拥有一个广阔的前景。
致谢
在论文的结束,特附上此致谢,感谢在写本文期间给予了我热心帮助的老师、同学和朋友:
感谢在本科学习期间给予我热心帮助的老师、同学和朋友。
首先要感谢指导老师:
常怡萍,感谢这一个多学期来常老师在学习、工作中给予的关心和帮助。
本文的研究工作也是在常老师的悉心指导下完成的。
常老师严谨求实的工作作风都使我受益匪浅。
尤其是她对当今科技前沿的把握,使我所做的工作具有非常广泛的应用前景。
在她耐心细致的指导下,我的专业知识得以扩充,学习能力得以提高,论文的工作也得以顺利地进行。
所以,再次向常老师表达我最诚挚的谢意。
在这两年的学习生活中,还得到了学校多位老师的热情帮助。
他们经常给我讲解当今世界前沿技术,给了我许多启发。
在此一并感谢。
最后还要感谢我的同学以及本科学习期间的舍友们,和他们一起度过两年和谐融洽的宝贵时间,和他们建立的友谊和我所学到的知识同样弥笃可贵。
这两年来的每一点成绩和进步都得益于我身边的很多人,在此谨向所有关心过我,帮助过我的老师和朋友表示衷心的感谢。
参考文献
[1]佟学俭、罗涛.OFDM移动通信技术原理与应用.第一版.人民邮电出版社.2003
[2]樊昌信,张甫栩,徐炳祥,吴成柯.通信原理.第五版.国防工业出版社.2001
[3]郑君里,应启衍,杨为理.信号与系统.第二版.北京高等教育出版社.2000
[4]陈亚勇等编著MATLAB信号处理详解.人民邮电出版.2001.
[5]张云峰,彭军 用MATLAB实现OFDM技术的仿真 电脑与信息技术14卷1期 2006.2
[6]李引新,赵姚同 正交频分多路(OFDM)的实现方式及性能分析 电讯技术 1998.06期
[7]张永生,李道本 正交频分复用码分多址技术的特点及其应用 移动通信 1997.06期
[8] 梁兵,董在望 OFDM仿真软件系统研究 广播与电视技术 1998.04期
[9]郭坚 正交频分复用技术极其在CDMA中的应用 数字通信 1998.04期
[10]高焕英 OFDM调制技术研究及硬件实现方案 无线电技术 1998.05期
[11]张俊峰 正交频分复用(OFDM)调制技术 天津通信技术 1998.02期
[12]王文博,郑侃宽带无线通信OFDM技术人民邮电出版社
[13]尹长川,罗涛,乐光新多载波宽带无线通信技术北京邮电大学出版社
[14]阮沈勇王永利桑群芳编MATLAB程序设计电子工业出版社2004.1(MATLAB应用与提高系列)
[15]李建东、杨家玮,个人通信,人民邮电出版社,1998.
附MATLAB仿真程序
%**********************准备部分***************************
para=128;
fftlen=128;
noc=128;
nd=6;
ml=2;
sr=2500;
br=sr.*ml;
gilen=18;
ebn0=3;
%**************************主循环部分**************************
nloop=100;
noe=0;
nod=0;
eop=0;
nop=0;
foriii=1:
nloop
%******************发射部分******************************************************
%******************产生数据**********************
seldata=rand(1,para*nd*ml)>
0.5;
%******************串并转换***********************
paradata=reshape(seldata,para,nd*ml);
%******************QPSK调制***********************
[ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt
(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
%******************IFFT(离散傅里叶反变换)*********
x=ich1+qch1.*i;
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%******************插入保护间隔*******************
[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);
fftlen2=fftlen+gilen;
%******************衰减计算************************
spow=sum(ich3.^2+qch3.^2)/nd./para;
attn=0.5*spow*sr/br*10.^(-ebn0/10);
attn=sqrt(attn);
%******************高斯白信道*****************************************************
[ich4,qch4]=comb(ich3,qch3,attn);
%******************接收部分******************************************************
%******************去除保护间隔********************
[ich5,qch5]=girem(ich4,qch4,fftlen2,gilen,nd);
%******************FFT(离散傅里叶变换)************
rx=ich5+qch5.*i;
ry=fft(rx);
ich6=real(ry);
qch6=imag(ry);
%*****************QPSK解调**************************
ich7=ich6./kmod;
qch7=qch6./kmod;
[demodata]=qpskdemod(ich7,qch7,para,nd,ml);
%**************并串变换***************************
demodata1=reshape(demodata,1,para*nd*ml);
%***************比特误码率(BER)*********************
%instantaneousnumberoferroranddata
noe2=sum(abs(demodata1-seldata));
nod2=length(seldata);
%cumulativethenumberoferroranddatainnoeandnod
noe=noe+noe2;
nod=nod+nod2;
%calculatingPER
ifnoe2~=0
eop=eop+1;
else
eop=eop;
end
eop;
nop=nop+1;
fprintf('
%d\t%e\t%d\n'
iii,noe2/nod2,eop);
end
%******************结果输出***************************
per=eop/nop;
ber=noe/nod;
%f\t%e\t%e\t%d\t\n'
ebn0,ber,per,nloop);
fid=fopen('
BERofdm.dat'
'
a'
);
fclose(fid);
%******************endoffile******************************************************