OFDM调制解调系统的设计与仿真实现源程序

合集下载

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真基于matlab的ofdm系统设计与仿真摘要OFDM即正交频分复用技术,实际上是多载波调制中的一种。

其主要思想是将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到相互正交且重叠的多个子载波上同时传输。

该技术的应用大幅度提高无线通信系统的信道容量和传输速率,并能有效地抵抗多径衰落、抑制干扰和窄带噪声,如此良好的性能从而引起了通信界的广泛关注。

本文设计了一个基于IFFT/FFT算法与802.11a标准的OFDM系统,并在计算机上进行了仿真和结果分析。

重点在OFDM系统设计与仿真,在这部分详细介绍了系统各个环节所使用的技术对系统性能的影响。

在仿真过程中对OFDM信号使用QPSK 调制,并在AWGN信道下传输,最后解调后得出误码率。

整个过程都是在MATLAB环境下仿真实现,对ODFM系统的仿真结果及性能进行分析,通过仿真得到信噪比与误码率之间的关系,为该系统的具体实现提供了大量有用数据。

- 1 -第一章 ODMF系统基本原理1.1多载波传输系统多载波传输通过把数据流分解为若干个子比特流,这样每个子数据流将具有较低的比特速率。

用这样的低比特率形成的低速率多状态符号去调制相应的子载波,构成了多个低速率符号并行发送的传输系统。

在单载波系统中,一次衰落或者干扰就会导致整个链路失效,但是在多载波系统中,某一时刻只会有少部分的子信道会受到衰落或者干扰的影响。

图1,1中给出了多载波系统的基本结构示意图。

图1-1多载波系统的基本结构多载波传输技术有许多种提法,比如正交频分复用(OFDM)、离散多音调制(DMT)和多载波调制(MCM),这3种方法在一般情况下可视为一样,但是在OFDM中,各子载波必须保持相互正交,而在MCM则不一定。

1.2正交频分复用OFDM就是在FDM的原理的基础上,子载波集采用两两正交的正弦或余弦函sinm,tcosn,t数集。

ofdm系统仿真流程

ofdm系统仿真流程

ofdm系统仿真流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!OFDM 系统仿真流程。

1. 信号生成:产生随机比特序列或已知数据序列。

OFDM调制解调模块的设计与实现

OFDM调制解调模块的设计与实现

OFDM调制解调模块的设计与实现0 引言随着技术和器件水平的发展以及对高速和可靠传输的要求,OFDM技术应用越来越广泛,由于其具有高速数据传输能力、高效的频谱利用率和抗多径干扰等能力,成为通信的研究热点之一。

在OFDM通信系统中,为实现高效信息的传输,可以采用多进制数字调制方式来传输数据符号。

本文设计了一个用于OFDM通信系统的通用调制解词模块,采用了BPSK、QPSK、16QAM和64QAM四种调制方法,利掰共用ROM、共厢减法器等器件的方法,减少了电路规模和硬件资源消耗。

此电路具有能够通过消息反馈机制来自动调整调制方法的能力。

1 调制/解调子模块结构通用调制解调模块原理如图1所示。

其中,选择子模块用来选择调制子模块和解调子模块采用的调制方法。

子模块通过判别输出数据的误码率来返回信息给选择子模块,如果当前采用的调制方法的瀑码率较高,那么选择子模块就会自动调整采用其他的调制方法,达到采用最佳调制方法。

在通用调制解调模块中,最主要的模块就是调制子模块和解调子模块。

下面介绍这两个子模块的设计和实现。

2设计分析在调制子模块和解调子模块的实现中,采用了四种调制方式:BPSK、QPSK、16QAM和64QAM。

2.1调制方式分析如图2所示,BPSK在实际实现时,将0映射为1,将1映射为-1,来完成映射。

解调时,将数据进行一下逆转换即可。

而QPSK具有4个星座位置,QPSK的映射为:00对应-1-li;01对应-1+li;10对应1-li;11对应1+li;并乘以归一化因子。

解调时,只要进行相反的过程,并将0作为裁决电平,即可实现数据的解调恢复。

16QAM由星座分布形状可以分为方形16QAM和非方形16QAM,方形16QAM的星座图如图2(c)。

根据星座图实现时,将00映射为-1,01映射为-1/3,10映射为1,11映射为1/3;解调时,采用的是硬判决的方法,根据星座点的位置将空间划分为16个区域,每个区域以星座点为中心,在判定时,落人某个区域的数就认为是相应星座。

实验四 OFDM调制解调仿真

实验四 OFDM调制解调仿真

实验四 OFDM调制解调仿真一、实验目的1.了解OFDM调制解调的原理。

2.学会用星座图分析系统性能。

二、实验内容1.编写MATLAB程序,实现OFDM系统调制解调。

2.绘制各步骤图形并分析系统特性。

三、实验代码1)程序主代码clear all;close all;N=input('请输入码元数');SNR=input('请输入信噪比');xx=randint(1,4*N);figure(1),stem(xx,'.k');title('原序列');B=0;for m=1:4:4*NA=xx(m)*8+xx(m+1)*4+xx(m+2)*2+xx(m+3);B=B+1;ee(B)=A;endfigure(2),stem(ee,'.b');title('化为0~15的码元');yy=star(ee,N);figure(3),plot(yy,'.r');title('映射后的星座图');ff=ifft(yy,N);N1=floor(N*1/4);N3=floor(N*3/4);N5=floor(N*5/4);figure(4),stem(ff,'.m');title('傅里叶反变换后');for j=1:N1ss(j)=ff(N3+j);for j=1:Nss(N1+j)=ff(j);endfigure(5),stem(ss,'.k');title('加N/4循环前后缀');%ss=wgn(1,N5,0,10,'dBW','complex');ss=awgn(ss,SNR);figure(6),stem(ss,'.m');title('加入噪声后');zz=fft(ss((N1+1):N5),N);figure(7),plot(zz,'.b');title('傅里叶变换后');rr=istar(zz,N);figure(8),plot(rr,'.r');title('纠错后的星座图');dd=decode(rr,N);figure(9),stem(dd,'.m');title('星座图纠错并解码后');%bb=d2b(dd,N);bb=d2bb(dd,N);figure(10),stem(bb,'.b');title('转化为0/1比特流后');2)十进制转二进制函数%十进制转二进制function bb=d2b(dd,N)for j=1:N*4bb(j)=0;endfor j=1:4:N*4bb1=dec2bin(dd(floor(j/4)+1),4); for k=1:4bb(4*(j-1)+k)=bb1(k);endend3)十进制转化为01比特流函数%十进制转化为01比特流function bb=d2bb(dd,N)for j=1:N*4bb(j)=1;endwhile(j<=N*4)N1=ceil(j/4)a4=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2); a3=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2); a2=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2); a1=mod(dd(N1),2);bb(j)=a1;j=j+1;bb(j)=a2;j=j+1;bb(j)=a3;j=j+1;bb(j)=a4;j=j+1;end4)星座图逆映射函数%星座图逆映射function yy=decode(rr,N)for j=1:Nswitch(rr(j))case -3-3*i yy(j)=0;case -3-iyy(j)=1;case -1-3*i yy(j)=2;case -1-iyy(j)=3;case -3+3*iyy(j)=4;case -3+iyy(j)=5;case -1+3*i yy(j)=6;case -1+iyy(j)=7;case 3-3*i yy(j)=8;case 3-iyy(j)=9;case 1-3*iyy(j)=10;case 1-iyy(j)=11;case 3+3*iyy(j)=12;case 3+iyy(j)=13;case 1+3*iyy(j)=14;case 1+iyy(j)=15;otherwise break;endend5)星座图逆映射函数%星座图逆映射function rr=istar(zz,N)for j=1:Nif(mod((floor(real(zz(j)))),2)==0)zz1(j)=ceil(real(zz(j)));else zz1(j)=floor(real(zz(j)));endif(mod((floor(imag(zz(j)))),2)==0)zz1(j)=zz1(j)+ceil(imag(zz(j)))*i;else zz1(j)=zz1(j)+floor(imag(zz(j)))*i;endrr(j)=zz1(j);end6)星座图映射函数%星座图映射function yy=star(xx,N)B=[-3-3*i,-3-i,-1-3*i,-1-i,-3+3*i,-3+i,-1+3*i,-1+i,3-3*i,3-i,1-3*i,1-i,3+3*i,3+i,1+3*i,1+i];for j=1:Nyy(j)=B(xx(j)+1);end四、实验结果五、实验结论OFDM技术可以有效地对抗信号波形间的干扰,适用于多径环境和衰落信道中的高速数据传输。

毕业设计(论文)OFDM系统原理及仿真实现

毕业设计(论文)OFDM系统原理及仿真实现

目录摘要 (2)ABSTRACT (3)第一章绪论 (4)第二章OFDM系统的基本介绍 (5)2.1OFDM的基本原理 (5)2.1.1 OFDM的产生和发展 (6)2.1.2 DFT的实现 (7)2.1.3 保护间隔、循环前缀和子载波数的选择 (8)2.1.4 子载波调制与解调 (10)2.2OFDM系统的优缺点 (11)2.3OFDM系统的关键技术 (11)第三章OFDM系统仿真实现 (13)3.1OFDM信号的时域及频域波形 (13)3.2带外功率辐射以及加窗技术 (15)3.3在不同信道环境和系统不同实现方式下的仿真 (18)3.3.1 调制与解调 (18)3.3.2 不同信道环境下的系统仿真实现 (20)3.3.3 系统不同实现方式的仿真实现 (22)第四章OFDM系统的仿真结果及性能分析 (23)4.1不同信道环境下的误码特性 (23)4.2不同系统实现方式下的误码特性 (28)第五章总结 (30)摘要本论文以OFDM系统为基础,介绍了OFDM系统的基本原理,以及使用OFDM技术的优势所在,并且展望了今后的无线移动技术的发展前景。

在简单介绍OFDM原理的同时,着重阐述了OFDM系统在不同信道环境和不同实现方式下的误码性能。

主要包括了OFDM系统在加性白高斯信道,在加性白高斯信道和多径干扰两种不同信道环境下系统的误码性能,其中后者还研究了系统在有保护间隔与无保护间隔的误码性能比较。

在理论分析的基础上,用MATLAB进行仿真,最后做出误码性能的分析和比较。

关键字: 正交频分复用(OFDM),离散傅立叶变换,AWGN,,多径干扰,保护间隔。

ABSTRACTThis paper presents you the basic priciple of OFDM(Orthogonal Frequency Division Multiplexing)and where it excels based on OFDM system , following with the prospective of wireless mobile communication. After a brief introduction to OFDM principle , it mainly focuses on the effect of OFDM system under different channels and with different system realizations on the Binary Error Rate (BER). It mainly includes two kinds of channels: the AWGN channel and the AWGN channel with Rayleigh fading. In the latter, we compare the BER with two different system realizations: one with Guarded Intervals(GI), and the other without (GI).Key Words : OFDM, DFT, AWGN, Rayleigh fading ,GI第一章绪论现代移动通信是一门复杂的高新技术,不但集中了无线通信和有线通信的最新技术成就,而且集中了网络接收和计算机技术的许多成果。

OFDM系统仿真实验报告

OFDM系统仿真实验报告

无线通信——OFDM系统仿真一、实验目的1、了解OFDM 技术的实现原理2、利用MATLAB 软件对OFDM 的传输性能进行仿真并对结论进行分析。

二、实验原理与方法1 OFDM 调制基本原理正交频分复用(OFDM)是多载波调制(MCM)技术的一种。

MCM 的基本思想是把数据流串并变换为N 路速率较低的子数据流,用它们分别去调制N 路子载波后再并行传输。

因子数据流的速率是原来的1/N ,即符号周期扩大为原来的N 倍,远大于信道的最大延迟扩展,这样MCM 就把一个宽带频率选择性信道划分成N 个窄带平坦衰落信道,从而“先天”具有很强的抗多径衰落和抗脉冲干扰的能力,特别适合于高速无线数据传输。

OFDM 是一种子载波相互混叠的MCM ,因此它除了具有上述毗M 的优势外,还具有更高的频谱利用率。

OFDM 选择时域相互正交的子载波,创门虽然在频域相互混叠,却仍能在接收端被分离出来。

2 OFDM 系统的实现模型利用离散反傅里叶变换( IDFT) 或快速反傅里叶变换( IFFT) 实现的OFDM 系统如图1 所示。

输入已经过调制(符号匹配) 的复信号经过串P 并变换后,进行IDFT 或IFFT 和并/串变换,然后插入保护间隔,再经过数/模变换后形成OFDM 调制后的信号s (t ) 。

该信号经过信道后,接收到的信号r ( t ) 经过模P 数变换,去掉保护间隔以恢复子载波之间的正交性,再经过串/并变换和DFT 或FFT 后,恢复出OFDM 的调制信号,再经过并P 串变换后还原出输入的符号。

图1 OFDM 系统的实现框图从OFDM 系统的基本结构可看出, 一对离散傅里叶变换是它的核心,它使各子载波相互正交。

设OFDM 信号发射周期为[0,T],在这个周期内并行传输的N 个符号为001010(,...,)N C C C -,,其中ni C 为一般复数, 并对应调制星座图中的某一矢量。

比如00(0)(0),(0)(0)C a j b a b =+⋅和分别为所要传输的并行信号, 若将其合为一个复数信号, 很多个这样的复数信号采用快速傅里叶变换, 同时也实现对正交载波的调制, 这就大大加快了信号的处理调制速度(在接收端解调也同样) 。

OFDM调制解调仿真

OFDM调制解调仿真

实验四OFDM调制解调仿真一、实验目的(1)了解OFDM调制解调的原理。

(2)学会用星座图分析系统性能。

二、实验内容(1)编写MATLAB程序,实现OFDM系统调制解调。

(2)绘制各步骤图形并分析系统特性。

三、实验代码1、主代码如下:clear all;close all;N=input('请输入码元数');SNR=input('请输入信噪比');xx=randint(1,4*N); %原序列figure(1),stem(xx,'.k'); %原序列图形title('原序列');B=0;for m=1:4:4*NA=xx(m)*8+xx(m+1)*4+xx(m+2)*2+xx(m+3);B=B+1;ee(B)=A;endfigure(2),stem(ee,'.b');title('化为0~15的码元');yy=star(ee,N);figure(3),plot(yy,'.r'); %映射后的星座图title('映射后的星座图');ff=ifft(yy,N); %傅里叶反变换N1=floor(N*1/4);N3=floor(N*3/4);N5=floor(N*5/4);figure(4),stem(ff,'.m');title('傅里叶反变换后');for j=1:N1 %加循环前缀ss(j)=ff(N3+j);endfor j=1:N %变成长度为N*5/4的序列ss(N1+j)=ff(j);endfigure(5),stem(ss,'.k'); %画出图形title('加N/4循环前后缀');%ss=wgn(1,N5,0,10,'dBW','complex');ss=awgn(ss,SNR); %加入噪声figure(6),stem(ss,'.m'); %加入噪声后的图形title('加入噪声后');zz=fft(ss((N1+1):N5),N); %傅里叶变换figure(7),plot(zz,'.b'); %画图title('傅里叶变换后');rr=istar(zz,N); %星座图纠错figure(8),plot(rr,'.r'); %画图title('纠错后的星座图');dd=decode(rr,N); %解码figure(9),stem(dd,'.m'); %画图title('星座图纠错并解码后');%bb=d2b(dd,N);bb=d2bb(dd,N); %转化为0/1比特流figure(10),stem(bb,'.b');title('转化为0/1比特流后');2、调用的函数:(1)星座图映射%星座图映射function yy=star(xx,N)B=[-3-3*i,-3-i,-1-3*i,-1-i,-3+3*i,-3+i,-1+3*i,-1+i,3-3*i,3-i,1-3*i,1-i,3+3*i,3+i,1+3*i, 1+i];for j=1:Nyy(j)=B(xx(j)+1);end(2)星座图逆映射%星座图逆映射function rr=istar(zz,N)for j=1:Nif(mod((floor(real(zz(j)))),2)==0)zz1(j)=ceil(real(zz(j)));else zz1(j)=floor(real(zz(j)));endif(mod((floor(imag(zz(j)))),2)==0)zz1(j)=zz1(j)+ceil(imag(zz(j)))*i;else zz1(j)=zz1(j)+floor(imag(zz(j)))*i;endrr(j)=zz1(j);end(3)十进制转二进制function bb=d2b(dd,N)%十进制转二进制for j=1:N*4bb(j)=;endfor j=1:4:N*4bb1=dec2bin(dd(floor(j/4)+1),4);for k=1:4bb(4*(j-1)+k)=bb1(k);endend(4)十进制转化为01比特流%十进制转化为01比特流function bb=d2bb(dd,N)for j=1:N*4bb(j)=1;endj=1;while(j<=N*4)N1=ceil(j/4)a4=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2);a3=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2);a2=mod(dd(N1),2);dd(N1)=floor(dd(N1)/2);a1=mod(dd(N1),2);bb(j)=a1;j=j+1;bb(j)=a2;j=j+1;bb(j)=a3;j=j+1;bb(j)=a4;j=j+1;end(5)星座图逆映射function yy=decode(rr,N)for j=1:Nswitch(rr(j))%星座图逆映射case -3-3*iyy(j)=0;case -3-iyy(j)=1;case -1-3*iyy(j)=2;case -1-iyy(j)=3;case -3+3*iyy(j)=4;case -3+iyy(j)=5;case -1+3*iyy(j)=6;case -1+iyy(j)=7;case 3-3*iyy(j)=8;case 3-iyy(j)=9;case 1-3*iyy(j)=10;case 1-iyy(j)=11;case 3+3*iyy(j)=12;case 3+iyy(j)=13;case 1+3*iyy(j)=14;case 1+iyy(j)=15;otherwise break;endend四、五、实验结果。

完整的OFDM系统的仿真实现

完整的OFDM系统的仿真实现

%窗函数子程序,子程序名称:recoswindow.mfunction[rcosw]=rcoswindow(beta,Ts)%输入参数:beta为升余弦窗关键系数,Ts为IFFT长度家循环前缀长度t=0:(1+beta)*Ts;rcosw=zeros(1,(1+beta)*Ts);%计算升余弦窗,共有三部分for i=1:beta*Ts;rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts));%计算升余弦窗的第一部分endrcosw(beta*Ts+1:Ts)=1;%计算升余弦窗低二部分for j=Ts:(1+beta)*Ts+1;rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));%计算升余弦窗第三部分endrcosw=rcosw';%转换为列矢量%将16QAM信号的解调子程序,子程序的名称:demoduqam16.mend%16QAM调制子程序,子程序名称为qam16.m%将二进制数目流转换为16QAM信号function [complex_qam_data]=qam16(bitdata)%输入参数:bitdata为二进制数码流%输出参数:complex_qam_data为16QAM副信号X1=reshape(bitdata,4,length(bitdata)/4)';%将二进制数码流以4bitte分段d=1;%转换4bit二进制码为十进制码1~16,生态农场mapping映射表中的索引for i=1:length(bitdata)/4;for j=1:4X1(i,j)=X1(i,j)*(2^(4-j));endsource(i,1)=1+sum(X1(i,:));end%16QAM映射表,改表中存放的16对,没对两个实数,表示星座位置mapping=[-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;-3*d d;-d d;d d;3*d d;-3*d -d;-d -d;d -d;3*d -d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d];for i=1:length(bitdata)/4qam_data(i,:)=mapping(source(i),:);%数据映射endcomplex_qam_data=complex(qam_data(:,1),qam_data(:,2));%组合为负数形式,形成16QAM信号end%将16QAM信号的解调子程序,子程序的名称:demoduqam16.m%该子程序测试function [demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)%输入参数为:Rx_serial_complex_symbols为接收端接收到的复16QAM信号%输出参数:demodu_bit_symble为二进制数码流complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_comple x_symbols),1);d=1;mapping=[-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;-3*d d;-d d;d d;3*d d;-3*d -d;-d -d;d -d;3*d -d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d];complex_mapping=complex(mapping(:,1),mapping(:,2));%将数据映射表中转换为16QAM信号,即3组合为复数;for i=1:length(Rx_serial_complex_symbols);for j=1:16;metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));end[min_metric decode_symble(i)]=min(metrics);%将接收数据与标准16QAM信号比,找到差最小的,将其对应恢复成标准的16QAM信号enddecode_bit_symble=de2bi((decode_symble-1)','left-msb');%将16QAM转为二进制demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_sy mbols)*4);%转换为一行endbaseband_out_length=16000;rand('twister',0);baseband_out=round(rand(1,baseband_out_length));%产生16000bit待传输的二进制比特流。

OFDM调制及解调系统的设计

OFDM调制及解调系统的设计

OFDM调制及解调系统的设计一、基本原理概述O FDM背景介绍随着无线通信的迅速发展,以OFDM为代表的多载波调制技术凭借其强大的抗多径衰落能力和较高的频谱利用率,被认为是最有前途的4G方案之一。

OFDM通信技术是多载波传输技术的典型代表。

多载波传输把数据流分解为若干个独立的子载波比特流,每个子数据流将具有低得多的比特速率,用这样低比特速率形成的低速率多状态符号去调制相应的子载波,就构成了多个低速率符号并行发送的传输系统。

OFDM系统的基本原理OFDM是一种多载波调制技术,其原理是用N个子载波把整个信道分割成N个子信道,即将频率上等间隔的N个子载波信号调制并相加后同时发送,实现N个子信道并行传输信息。

这样每个符号的频谱只占用信道带宽的1/N,且使各子载波在OFDM符号周期内保持频谱的正交性。

图1-1是在一个OFDM符号内包含4个子载波的实例。

其中,所有的子载波都具有相同的幅值和相位,但在实际应用中,根据数据符号的调制方式,每个子载波都有相同的幅值和相位是不可能的。

从图1-1可以看出,每个子载波在一个OFDM符号周期内都包含整数倍个周期,而且各个相邻的子载波之间相差1个周期。

这一特性可以用来解释子载波之间的正交性,即这种正交性还可以从频域的角度来解释,图1-2给出了相互覆盖的各个子信道内经过矩形波成形得到的符号sinc 函数频谱。

每个子载波频率最大值处,所以其他子信道的频谱值恰好为零。

因为在对OFDM 符号进行解调过程中,需要计算这些点上所对应的每个子载波频率的最大值,所以可以从多个相互重叠的子信道符号中提取每一个子信道符号,而不会受到其他子信道的干扰。

从图1-2中可以看出OFDM 符号频谱实际上可以满足奈奎斯特准则,即多个子信道频谱之间不存在相互干扰。

因此这种子信道频谱出现最大值而其他子信道频谱为零的特点可以避免载波间干扰(ICI )的出现。

{}{}00 1exp exp 1 Tn m m nj t j t dt m nTωω=⎧=⎨≠⎩⎰图1-1 OFDM 符号内包括4个子载波的情况在发送端,设串行的码元周期为t s ,速率为r s=1/t s 。

OFDM的系统仿真与实现

OFDM的系统仿真与实现

OFDM的系统仿真与实现一、实验器件Matlab编程软件、PC机二、实验目的1、通过实验过程熟悉OFDM的系统运行过程.2、进一步练习通过MATLAB解决通信系统的仿真问题.3、掌握导频插入、训练序列等原理与实际运用.4、掌握通过实际仿真与理论分析的结合的方法.三、OFDM的基本原理OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是多载波调制的一种。

其主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。

正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰ICI 。

每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上的可以看成平坦性衰落,从而可以消除符号间干扰。

而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。

在向B3G/4G演进的过程中,OFDM是关键的技术之一,可以结合分集,时空编码,干扰和信道间干扰抑制以及智能天线技术,最大限度的提高了系统性能。

包括以下类型:V-OFDM,W-OFDM,F-OFDM,MIMO-OFDM,多带-OFDM。

OFDM是一种无线环境下的高速传输技术。

无线信道的频率响应曲线大多是非平坦的,而OFDM技术的主要思想就是在频域内将给定信道分成许多正交子信道,在每个子信道上使用一个子载波进行调制,并且各子载波并行传输。

这样,尽管总的信道是非平坦的,具有频率选择性,但是每个子信道是相对平坦的,在每个子信道上进行的是窄带传输,信号带宽小于信道的相应带宽,因此就可以大大消除信号波形间的干扰。

由于在OFDM系统中各个子信道的载波相互正交,它们的频谱是相互重叠的,这样不但减小了子载波间的相互干扰,同时又提高了频谱利用率。

OFDM技术属于多载波调制(Multi-Car rierModulation,MCM)技术。

OFDM系统设计与仿真共3篇

OFDM系统设计与仿真共3篇

OFDM系统设计与仿真共3篇OFDM系统设计与仿真1OFDM系统设计与仿真OFDM技术是一种多载波信号传输技术,将整个信道分割成数个互不干扰的子载波,每个子载波都可以进行调制传输数据,使得OFDM技术具有抗多径和高速传输的优点,因此在现代通信系统中得到广泛应用。

本文将介绍OFDM系统的设计和仿真过程。

一、OFDM系统的设计OFDM系统的设计首先需要确定系统的参数,包括子载波数量、调制方式、误码率等。

具体的设计流程如下:1. 确定子载波数量OFDM系统中子载波数量的选择与系统的带宽有关系,可以通过下式计算出子载波数量:N = B/Δf其中,N是子载波数量,B是系统的带宽,Δf是子载波的带宽。

2. 确定调制方式OFDM系统的调制方式有许多种,如BPSK、QPSK、16QAM、64QAM等。

不同的调制方式可以达到不同的传输速率和误码率,通常选用16QAM和64QAM,可以提高系统的信噪比和传输速率。

3. 确定误码率OFDM系统在传输数据时会受到各种干扰和噪声的影响,因此需要确定合适的误码率。

在一般情况下,当误码率为10^-5时,OFDM系统的性能最优。

二、OFDM系统的仿真OFDM系统的仿真可以通过软件或硬件实现。

其中,软件仿真可以通过Matlab软件实现,硬件实现需要使用FPGA等电路设计工具。

1. Matlab仿真Matlab软件提供了许多工具箱,可以方便地进行OFDM系统的仿真。

例如,可以使用Communications Toolbox进行信道估计、信号变换和误码率分析等,可以使用Simulink进行系统建模和仿真。

下面以Simulink仿真为例,介绍OFDM系统的仿真过程。

首先,将OFDM调制器、仿真信道和OFDM解调器添加到Simulink模型中。

然后,对OFDM信号进行比特随机分配、IFFT和加前缀(保障多径传播),并对信道进行加性白噪声、多径衰减和时间延迟的模拟,最后进行OFDM解调和误码率计算。

OFDM调制解调系统的设计与仿真实现源程序

OFDM调制解调系统的设计与仿真实现源程序

clear all;close all;IFFT_bin_length = 1024; % FFT的点数carrier_count = 200; % 载波的数量bits_per_symbol = 2; % 每个符号代表的比特数symbols_per_carrier = 50; % 每个载波使用的符号数SNR = 10; % 信道中的信噪比(dB)baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symb ol;%总比特数carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_co unt/2));conjugate_carriers = IFFT_bin_length - carriers + 2;%发送端>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>%产生随机二进制数据:baseband_out = round(rand(1,baseband_out_length));convert_matrix=reshape(baseband_out,bits_per_symbol,length(baseband _out)/bits_per_symbol);for k = 1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k) = 0;for i = 1:bits_per_symbol modulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_per_symbol-i);endend% 串并转换carrier_matrix = reshape(modulo_baseband, carrier_count, symbols_per_ carrier)'; % 对每一个载波的符号进行差分编码carrier_matrix = [zeros(1,carrier_count);carrier_matrix];for i = 2:(symbols_per_carrier + 1)carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_p er_symbol);end% 把差分符号代码转换成相位carrier_matrix = carrier_matrix * ((2*pi)/(2^bits_per_symbol)); % 把相位转换成复数[X,Y] = pol2cart(carrier_matrix, ones(size(carrier_matrix,1),size(carrier_ matrix,2)));complex_carrier_matrix = complex(X,Y); % 分配载波到指定的IFFT位置IFFT_modulation = zeros(symbols_per_carrier + 1, IFFT_bin_length); IFFT_modulation(:,carriers) = complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers) = conj(complex_carrier_matrix); % 画出频域中的OFDM信号代表figure (1)stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)), 'b*-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('IFFT Bin')title('OFDM Carrier Frequency Magnitude')%figure (2)plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bi n_length)), 'go')hold onstem(carriers-1, (180/pi)*angle(IFFT_modulation(2,carriers)),'b*-') stem(conjugate_carriers-1, (180/pi)*angle(IFFT_modulation(2,conjugate _carriers)),'b*-')axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')% 通过IFFT将频域转化为时域,得到时域信号time_wave_matrix = ifft(IFFT_modulation');time_wave_matrix = time_wave_matrix';%画出一个符号周期的时域OFDM信号figure (3)plot(0:IFFT_bin_length-1,time_wave_matrix(2,:))grid onylabel('Amplitude')xlabel('Time')title('OFDM Time Signal, One Symbol Period')%画出每一个载波对应的时域信号(分离的OFDM信号)for f = 1:carrier_counttemp_bins(1:IFFT_bin_length)=0+0j;temp_bins(carriers(f))=IFFT_modulation(2,carriers(f));temp_bins(conjugate_carriers(f))=IFFT_modulation(2,conjugate_carrie rs(f));temp_time = ifft(temp_bins');figure(4)plot(0:IFFT_bin_length-1, temp_time)hold onendgrid onylabel('Amplitude')xlabel('Time')title('Separated Time Waveforms Carriers')for i = 1:symbols_per_carrier + 1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:)).*hammin g(IFFT_bin_length)';windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:));end%串并转换ofdm_modulation=reshape(windowed_time_wave_matrix',1,IFFT_bin_le ngth*(symbols_per_carr ier+1));% 画出整个时域OFDMtemp_time = IFFT_bin_length*(symbols_per_carrier+1);figure (5)plot(0:temp_time-1,ofdm_modulation)grid onylabel('Amplitude (volts)')xlabel('Time (samples)') title('OFDM Time Signal')% 画出频域OFDM信号symbols_per_average = ceil(symbols_per_carrier/5);avg_temp_time = IFFT_bin_length*symbols_per_average;averages = floor(temp_time/avg_temp_time);average_fft(1:avg_temp_time) = 0;for a = 0:(averages-1)subset_ofdm=ofdm_modulation(((a*avg_temp_time)+1):((a+1)*avg_tem p_time));subset_ofdm_f = abs(fft(subset_ofdm));average_fft = average_fft + (subset_ofdm_f/averages);endaverage_fft_log = 20*log10(average_fft);figure (6)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)hold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('OFDM Signal Spectrum')% 上变频,这个模型中我们把经过IFFT运算后OFDM直接发送 Tx_data = ofdm_modulation;%信道==================================================== ===% The channel model is Gaussian (AWGN) +Multipath(时延为1) Tx_signal_power = var(Tx_data);linear_SNR = 10^(SNR/10);noise_sigma = Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);noise = randn(1, length(Tx_data))*noise_scale_factor;copy1=zeros(1,length(ofdm_modulation));for i=2:length(ofdm_modulation)copy1(i)=ofdm_modulation(i-1);endRx_Data = Tx_data + noise;%RECEIVE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<< % 根据符号长度和符号数将串行的符号转换为并行的 % - 每一列是符号周期Rx_Data_matrix = reshape(Rx_Data, IFFT_bin_length, symbols_per_car rier + 1);%对每一列信号做FFT得到频域信号Rx_spectrum = fft(Rx_Data_matrix);% 画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8 figure (7)stem(0:IFFT_bin_length-1, abs(Rx_spectrum(1:IFFT_bin_length,2)),'b*-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('FFT Bin')title('OFDM Receive Spectrum, Magnitude')figure (8)plot(0:IFFT_bin_length-1, (180/pi)*angle(Rx_spectrum(1:IFFT_bin_leng th,2)), 'go')hold onstem(carriers-1, (180/pi)*angle(Rx_spectrum(carriers,2)),'b*-')stem(conjugate_carriers-1, (180/pi)*angle(Rx_spectrum(conjugate_carrie rs,2)),'b*-') axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('FFT Bin')title('OFDM Receive Spectrum, Phase') % 抽取接收信号中有载波的点Rx_carriers = Rx_spectrum(carriers,:)';%画出每个接收符号分布图figure (9)Rx_phase_P = angle(Rx_carriers);Rx_mag_P = abs(Rx_carriers);polar(Rx_phase_P, Rx_mag_P,'bd');% 计算载波的相位% - 弧度转换为角度% - 归一化相位(0-360)Rx_phase = angle(Rx_carriers)*(180/pi);phase_negative = find(Rx_phase < 0);Rx_phase(phase_negative) = rem(Rx_phase(phase_negative)+360,360); % 用diff()计算相位差Rx_decoded_phase = diff(Rx_phase);phase_negative = find(Rx_decoded_phase < 0);Rx_decoded_phase(phase_negative) = rem(Rx_decoded_phase(phase_ne gative)+360,360);%--------1---------2---------3---------4---------5---------6---------7---------8 %相位转化为符号base_phase = 360/2^bits_per_symbol;delta_phase = base_phase/2;Rx_decoded_symbols= zeros(size(Rx_decoded_phase,1),size(Rx_decode d_phase,2));for i = 1:(2^bits_per_symbol - 1)center_phase = base_phase*i;plus_delta = center_phase+delta_phase;minus_delta = center_phase-delta_phase;decoded=find((Rx_decoded_phase<=plus_delta)&(Rx_decoded_phase> minus_delta));Rx_decoded_symbols(decoded)=i;end% Convert the matrix into a serial symbol streamRx_serial_symbols=reshape(Rx_decoded_symbols',1,size(Rx_decoded_s ymbols,1)*size(Rx_decoded_symbols,2));% Convert the symbols to binaryfor i = bits_per_symbol: -1: 1if i ~= 1Rx_binary_matrix(i,:) = rem(Rx_serial_symbols,2);Rx_serial_symbols = floor(Rx_serial_symbols/2);elseRx_binary_matrix(i,:) = Rx_serial_symbols;endendbaseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*size (Rx_binary_matrix,2));% 查找错位比特bit_errors = find(baseband_in ~= baseband_out);bit_error_count = size(bit_errors,2);d_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);for k = 1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k) = 0;for i = 1:bits_per_symbolmodulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_ per_symbol-i);endend% 串并转换carrier_matrix = reshape(modulo_baseband, carrier_count, symbols_per_ carrier)';% 对每一个载波的符号进行差分编码carrier_matrix = [zeros(1,carrier_count);carrier_matrix]; for i = 2:(symbol s_per_carrier + 1)carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_p er_symbol);end% 把差分符号代码转换成相位carrier_matrix = carrier_matrix * ((2*pi)/(2^bits_per_symbol));% 把相位转换成复数[X,Y] = pol2cart(carrier_matrix, ones(size(carrier_matrix,1),size(carrier_ matrix,2)));complex_carrier_matrix = complex(X,Y);% 分配载波到指定的IFFT位置IFFT_modulation = zeros(symbols_per_carrier + 1, IFFT_bin_length); IFFT_modulation(:,carriers) = complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers) = conj(complex_carrier_matrix); % 画出频域中的OFDM信号代表figure (1)stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)), 'b*-') grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('IFFT Bin')title('OFDM Carrier Frequency Magnitude')figure (2)plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bi n_length)), 'go')hold onstem(carriers-1, (180/pi)*angle(IFFT_modulation(2,carriers)),'b*-') stem(conjugate_carriers-1, (180/pi)*angle(IFFT_modulation(2,conjugate _carriers)),'b*-') axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')% 通过IFFT将频域转化为时域,得到时域信号time_wave_matrix = ifft(IFFT_modulation');time_wave_matrix = time_wave_matrix';%画出一个符号周期的时域OFDM信号figure (3)plot(0:IFFT_bin_length-1,time_wave_matrix(2,:))grid onylabel('Amplitude')xlabel('Time')title('OFDM Time Signal, One Symbol Period')%画出每一个载波对应的时域信号(分离的OFDM信号)for f = 1:carrier_counttemp_bins(1:IFFT_bin_length)=0+0j;temp_bins(carriers(f))=IFFT_modulation(2,carriers(f));temp_bins(conjugate_carriers(f))=IFFT_modulation(2,conjugate_carrie rs(f));temp_time = ifft(temp_bins');figure(4)plot(0:IFFT_bin_length-1, temp_time)hold onendgrid onylabel('Amplitude') xlabel('Time')title('Separated Time Waveforms Carriers')for i = 1:symbols_per_carrier + 1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:)).*hammi ng(IFFT_bin_length)';windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:));end%串并转换ofdm_modulation=reshape(windowed_time_wave_matrix',1,IFFT_bin_ length*(symbols_per_carrier+1));% 画出整个时域OFDMtemp_time = IFFT_bin_length*(symbols_per_carrier+1);figure (5)plot(0:temp_time-1,ofdm_modulation)grid onylabel('Amplitude (volts)')xlabel('Time (samples)')title('OFDM Time Signal')% 画出频域OFDM信号symbols_per_average = ceil(symbols_per_carrier/5);avg_temp_time = IFFT_bin_length*symbols_per_average; averages = floor(temp_time/avg_temp_time);average_fft(1:avg_temp_time) = 0;for a = 0:(averages-1)subset_ofdm=ofdm_modulation(((a*avg_temp_time)+1):((a+1)*avg_te mp_time));subset_ofdm_f = abs(fft(subset_ofdm));average_fft = average_fft + (subset_ofdm_f/averages);endaverage_fft_log = 20*log10(average_fft);figure (6)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)hold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('OFDM Signal Spectrum')% 上变频,这个模型中我们把经过IFFT运算后OFDM直接发送Tx_data = ofdm_modulation;%信道==================================================== ===% The channel model is Gaussian (AWGN) +Multipath(时延为1) Tx_signal_power = var(Tx_data);linear_SNR = 10^(SNR/10);noise_sigma = Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);noise = randn(1, length(Tx_data))*noise_scale_factor;copy1=zeros(1,length(ofdm_modulation));for i=2:length(ofdm_modulation)copy1(i)=ofdm_modulation(i-1);endRx_Data = Tx_data + noise;%RECEIVE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<% 根据符号长度和符号数将串行的符号转换为并行的% - 每一列是符号周期Rx_Data_matrix = reshape(Rx_Data, IFFT_bin_length, symbols_per_c arrier + 1);%对每一列信号做FFT得到频域信号Rx_spectrum = fft(Rx_Data_matrix);% 画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8 figure (7)stem(0:IFFT_bin_length-1, abs(Rx_spectrum(1:IFFT_bin_length,2)),'b *-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('FFT Bin')title('OFDM Receive Spectrum, Magnitude')figure (8)plot(0:IFFT_bin_length-1, (180/pi)*angle(Rx_spectrum(1:IFFT_bin_le ngth,2)), 'go')hold onstem(carriers-1, (180/pi)*angle(Rx_spectrum(carriers,2)),'b*-')stem(conjugate_carriers-1, (180/pi)*angle(Rx_spectrum(conjugate_carr iers,2)),'b*-')axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('FFT Bin')title('OFDM Receive Spectrum, Phase')% 抽取接收信号中有载波的点Rx_carriers = Rx_spectrum(carriers,:)';%画出每个接收符号分布图 figure (9)Rx_phase_P = angle(Rx_carriers);Rx_mag_P = abs(Rx_carriers);polar(Rx_phase_P, Rx_mag_P,'bd');% 计算载波的相位% - 弧度转换为角度% - 归一化相位(0-360)Rx_phase = angle(Rx_carriers)*(180/pi);phase_negative = find(Rx_phase < 0);Rx_phase(phase_negative) = rem(Rx_phase(phase_negative)+360,360) ; % 用diff()计算相位差Rx_decoded_phase = diff(Rx_phase);phase_negative = find(Rx_decoded_phase < 0);Rx_decoded_phase(phase_negative) = rem(Rx_decoded_phase(phase_ negative)+360,360);%--------1---------2---------3---------4---------5---------6---------7---------8 % 相位转化为符号base_phase = 360/2^bits_per_symbol; delta_phase = base_phase/2; Rx_decoded_symbols= zeros(size(Rx_decoded_phase,1),size(Rx_deco ded_phase,2));for i = 1:(2^bits_per_symbol - 1)center_phase = base_phase*i;plus_delta = center_phase+delta_phase;minus_delta = center_phase-delta_phase;decoded=find((Rx_decoded_phase<=plus_delta)&(Rx_decoded_phase >minus_delta));Rx_decoded_symbols(decoded)=i;end% Convert the matrix into a serial symbol streamRx_serial_symbols=reshape(Rx_decoded_symbols',1,size(Rx_decoded _symbols,1)*size(Rx_decoded_symbols,2));% Convert the symbols to binaryfor i = bits_per_symbol: -1: 1if i ~= 1Rx_binary_matrix(i,:) = rem(Rx_serial_symbols,2);Rx_serial_symbols = floor(Rx_serial_symbols/2);elseRx_binary_matrix(i,:) = Rx_serial_symbols;endendbaseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*si ze(Rx_binary_matrix,2));% 查找错位比特bit_errors = find(baseband_in ~= baseband_out); bit_error_count = size(bit_errors,2);。

基于FPGA的16QAM OFDM调制解调器设计与实现

基于FPGA的16QAM OFDM调制解调器设计与实现

基于FPGA的16QAM OFDM调制解调器设计与实现OFDM调制(正交频分复用调制)是一种用于高速数据传输的调制技术,其通过将信号分成多个子载波进行传输,显著提高了频谱利用率和抗多径干扰能力。

而16QAM(Quadrature Amplitude Modulation)是一种常用的调制方案,通过在I和Q信道上调制正交载波,实现高效率的数据传输。

本文将基于FPGA进行16QAM OFDM调制解调器的设计与实现。

FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,具有灵活性强、可重构性好等特点,适合用于数字信号处理应用。

一、系统设计在设计过程中,我们将分为三个阶段来实现16QAM OFDM调制解调器,分别是:OFDM信号生成、16QAM调制和解调。

1. OFDM信号生成OFDM信号生成是通过将数据块分成多个子载波进行调制来实现的。

在这里,我们将采用128个正交子载波,其中包括64个实部载波和64个虚部载波。

每个子载波的调制方式是QPSK(Quadrature Phase Shift Keying)调制,将4个bit的数据映射为一个复数点。

同时,还需要添加循环前缀以增加系统的抗多径干扰能力。

2. 16QAM调制在16QAM调制中,将每两个子载波看作一个复数点,通过映射的方式将每个复数点对应的16种不同幅度和相位的情况表示为一个符号值。

因此,对于128个子载波,将会有64个符号值。

3. 解调解调的过程与调制过程相反,首先需要将接收到的信号进行16QAM解调,得到对应的符号值。

然后,将符号值映射回原始的子载波上,再进行16QAM解调,最后恢复出原始的数据块。

二、实现方案在FPGA中,可以使用硬件描述语言(例如Verilog)来实现16QAM OFDM调制解调器。

下面我们将分别介绍三个阶段的实现。

1. OFDM信号生成使用Verilog语言编写一个生成128个子载波的模块,每个子载波使用QPSK调制,并添加循环前缀。

高速光纤通信系统中的OFDM调制解调技术的仿真与实现论文

高速光纤通信系统中的OFDM调制解调技术的仿真与实现论文

毕业设计论文高速光纤通信系统中的OFDM调制解调技术的仿真与实现摘要光正交频分复用(O-OFDM)通信系统,其带宽资源丰富,无需色散管理,抗色散能力强,这些优点使得光正交频分复用通信系统成为下一代高速率光纤传输的备选方案之一,并成为高速光纤通信系统领域的研究热点。

本文对高速O-OFDM通信系统的研究现状进行了总结,并对高速O-OFDM通信系统的设计和实现进行了探讨和研究。

对于一个通信系统的研究,首先要进行建模和仿真,从理论层面上分析该系统的大致性能和现实可行性。

论文在给出了高速0-OFDM通信系统的设计方案的基础上,基于MATLAB建立了O-OFDM光纤通信系统的简单模型,并分析了实现过程中的有限字长效应、定时同步、偏振模色散等因素对O-OFDM光纤通信系统的性能影响;在这些理论分析的基础上,给出了一套高速O-OFDM光纤通信系统的实现方案。

在O-OFDM系统的电信号处理部分,OFDM调制解调的实现是关键部分,而OFDM调制解调就是输入数据信号的快速傅里叶(逆)变换(IFFT-FFT)运算。

在64点IFFT-FFT运算实现时,基于Quartus2设计了64点IFFT核和FFT核模块,并对模块进行了功能和时序仿真验证。

该OFDM调制解调模块运算效率很高,可达到最大11.7G·S/S(吉符号每秒)的数据吞吐量,运用该工FFT核实现的O-OFDM光纤通信系统理论上可完成最大46.8Gbit/S的传输容量。

由于人们对通信系统的传输容量的需求越来越大,研究者正努力提高O-OFDM光纤通信系统的传输速率。

本文对提高O-OFDM光纤通信系统的传输容量提出了一些可行的方案,如采用光波分复用技术、光偏振复用技术和增加子载波传输个数等,并对这些方案进行了简单的介绍。

关键词:高速光纤通信,光正交频分复用,快速傅里叶(逆)变换目录第一章绪论 (3)1. 1光纤通信的发展历史 (3)1. 2光纤通信的应用与发展趋势 (7)1. 2. 1光纤通信的应用.......................... .. (7)1.2.2光纤通信的发展趋势 (8)1.3 0-OFDM通信系统发展简述 (9)第二章0-OFDM通信系统原理简介 (12)2. 1基本原理 (12)2.1.1光纤通信系统简介 (12)2.1.2 0-OFDM通信系统简介 (14)2. 1. 3正交频分复用(OFDM)的基本原理 (15)2.2 0-OFDM通信系统研究现状 (18)2. 2. 1 0-OFDM通信系统实验室仿真实验现状 (18)2.2.2 0-OFDM通信系统的实验室实现现状 (19)2.2.3 0-OFDM通信系统的实现的制约因素分析 (21)2. 3本章小结 (23)第三章高速CO-OFDM通信系统设计与仿真分析.................... .. (24)3. 1高速CO-OFDM通信系统的设计方案 (24)3. 1. 1 0-OFDM通信系统分类 (24)3.1.2 20Gb/s高速CO-OFDM通信系统设计方案 (25)3.2 CO-OFDM通信系统实现关键因素的建模与仿真 (27)3. 2. 1高速CO-OFDM通信系统的基本模型设计 (27)3.2.2 CO-OFDM通信系有限字长效应的仿真 (27)3.2. 3 CO-OFDM通信系统定时同步仿真 (29)3. 2. 4 CO-OFDM系统有限字长效应和定时同步的联合仿真 (32)3.2.5 CO-OFDM通信系统的偏振模色散效应的研究 (33)3. 2. 5. 1偏振模色散效应建模原理 (33)3. 2. 5. 2偏振模色散干扰下的系统频率响应仿真 (34)3. 2. 5. 3偏振模色散效应的补偿 (36)3. 4本章小结 (39)论文总结 (40)参考文献 (42)图目录图2-1通信系统的基本结构图 (12)图2-2 OFDM系统基本模型框图 (16)图2-3基于快速傅里叶变换(工FFT)的OFDM系统框图 (17)图3-1 CO-OFDM光纤通信实验系统的基本组成框图 (25)图3-2 6bit, 8bit量化误码率曲线比较 (29)图3-3基于CP的OFDM块定时同步算法示意图 (30)图3-4基于MATLAB的误帧率仿真曲线 (31)图3-5 CO-OFDM光纤通信系统有限字长效应和定时同步的联合仿真 (33)图3-6偏振模色散效应示意图 (34)图3-7 OFDM符号采样示意图 (34)图3-8偏振模色散效应下的系统相位误差曲线 (35)图3-9偏振模色散效应下的系统幅度响应曲线 (36)图3-10(高斯白噪声+PMD)相位补偿后的误码率曲线 (37)图3-11不同调制方式的误码率曲线 (38)表目录表目录表3-1 6bit, 8bit量化的高速CO-OFDM光纤通信系统仿真参数设置 (28)表3-2基于CP的OFDM块定时同步仿真参数设置 (31)表3-3 CO-OFDM通信系统有限字长效应和定时同步联合仿真参数设置表 (32)表3-4偏振模色散效应下的系统相位误差曲线仿真参数设置表 (35)表3-5偏振模色散效应下的系统幅度响应曲线仿真参数设置表 (36)表3-6(高斯白噪声+PMD)相位补偿后的误码率曲线仿真参数设置表 (37)表3-7(高斯白噪声+PMD)子载波采用不同的调制方式仿真参数设置表 (38)第一章绪论1.1光纤通信的发展历史时代进步了,科技发展了,人们对物质和精神文化生活的要求越来越高。

OFDM完整仿真过程及解释(MATLAB)

OFDM完整仿真过程及解释(MATLAB)

OFDM完整仿真过程及解释(MATLAB)OFDM(正交频分复用)是一种多载波调制技术,在无线通信系统中得到广泛应用。

其基本原理是将高速数据流分成多个较低速的子载波,使得每个子载波的传输速率降低,从而提高了系统的可靠性和抗干扰性能。

以下是OFDM的完整仿真过程及解释。

1. 生成数据:首先,在MATLAB中生成需要传输的二进制数据,可以使用随机数生成函数randi(生成0和1的二进制序列。

2.编码:将生成的二进制数据进行编码,例如使用卷积码、块码等编码方式。

编码可以提高数据传输的可靠性,对抗信道中的噪声和干扰。

3.映射:将编码后的数据映射到调制符号,例如使用QPSK、16-QAM 等调制方式。

调制方式决定了每个符号所携带的比特数,不同调制方式具有不同的抗噪声和传输速率性能。

4.并行-串行转换:将映射后的调制符号进行并行-串行转换,将多个并行的调制符号转换为串行的数据流。

这是OFDM的关键步骤,将高速数据流分成多个较低速的子载波。

5. 添加保护间隔:为了消除多径传播引起的码间干扰,需要在串行数据流中插入保护间隔(Guard Interval),通常是循环前缀。

保护间隔使得子载波之间相互正交,从而避免了码间干扰。

6.IFFT:对添加保护间隔后的数据进行反快速傅里叶变换(IFFT),将时域信号转换为频域信号。

IFFT操作将子载波映射到频域,每个子载波代表系统的一个子信道。

7.添加导频:在OFDM符号的频域信号中添加导频,用于估计信道的频率响应和相位差。

导频通常位于频谱的首尾或者分布在整个频谱中,用于信道估计和均衡。

8.加载子载波:将导频和数据子载波合并,形成完整的OFDM符号。

数据子载波携带着编码后的数据,导频子载波用于信道估计。

9.加性高斯白噪声(AWGN)信道:将OFDM符号通过加性高斯白噪声信道进行传输。

AWGN信道是一种理想化的信道模型,可以模拟实际信道中的噪声和干扰。

10.解调:接收端对接收到的OFDM符号进行解调,包括载波恢复、频偏补偿、信道估计和均衡等操作。

移动通信系统OFDM系统仿真与实现(基于MATLAB)

移动通信系统OFDM系统仿真与实现(基于MATLAB)

OFDM系统仿真与实现1. OFDM的应用意义在近几年以内,无线通信技术正在以前所未有的速度向前发展。

由于用户对各种实时多媒体业务需求的增加和互联网技术的迅猛发展,未来的无线通信及技术将会有更高的信息传输速率,为用户提供更大的便利,其网络结构也将发生根本的变化。

随着人们对通信数据化、个人化和移动化的需求,OFDM技术在无线接入领域得到了广泛的应用。

OFDM是一种特殊的多载波传输方案,它将数字调制、数字信号处理、多载波传输技术结合在一起,是目前已知的频谱利用率最高的一种通信系统,具有传输速率快、抗多径干扰能力强的优点。

目前,OFDM 技术在数字音频广播(DAB)、地面数字视频广播(DVB-T)、无线局域网等领域得到广泛应用。

它将是4G移动通信的核心技术之一。

OFDM广泛用于各种数字传输和通信中,如移动无线FM信道,高比特率数字用户线系统(HDSL),不对称数字用户线系统(ADSL),甚高比特率数字用户线系统HDSL,数字音频广播(DAB)系统,数字视频广播(DVB)和HDTV地面传播系统。

1999年,IEEE802.11a通过了一个SGHz的无线局域网标准,其中OFDM 调制技术被采用为物理层标准,使得传输速率可以达54MbPs。

这样,可提供25MbPs的无线ATM接口和10MbPs的以太网无线帧结构接口,并支持语音、数据、图像业务。

这样的速率完全能满足室内、室外的各种应用场合。

OFDM由于技术的成熟性,被选用为下行标准很快就达成了共识。

而在上行技术的选择上,由于OFDM的高峰均比(PAPR)使得一些设备商认为会增加终端的功放成本和功率消耗,限制终端的使用时间,一些则认为可以通过滤波,削峰等方法限制峰均比。

不过,经过讨论后,最后上行还是采用了SC-FDMA方式。

拥有我国自主知识产权的3G标准一一TD-SCDMA在LTE演进计划中也提出了TD-CDM-OFDM的方案B3G/4G是ITU提出的目标,并希望在2010年予以实现。

OFDM的系统仿真与实现

OFDM的系统仿真与实现

OFDM的系统仿真与实现OFDM(Orthogonal Frequency Division Multiplexing)是一种用于无线通信的调制技术,将高速数据流分成多个低速子载波进行并行传输,提高了信道利用率和抗干扰能力。

在本文中,将介绍OFDM系统仿真和实现的相关内容。

首先,对于OFDM系统的仿真,可以使用Matlab等仿真软件进行模拟。

仿真过程可以分为以下几个步骤:生成原始信号、进行IFFT变换、添加循环前缀、进行FFT变换、接收端信号处理。

下面将分别详细介绍这些步骤。

首先,生成原始信号。

可以使用随机生成的比特序列作为原始信号。

比特序列可以通过随机生成函数生成,并可以根据系统需求设置比特序列长度和比特率。

然后,进行IFFT(Inverse Fast Fourier Transform)变换。

IFFT变换将高速频域信号转换为低速时域信号。

在OFDM系统中,将比特序列通过码型映射转换为复数符号,然后通过IFFT变换将复数符号转换为时域信号。

接下来,添加循环前缀。

循环前缀是从IFFT变换输出的时域信号中取一段连续的数据,插入到传输信号的前面。

循环前缀可以解决多径效应引起的符号间干扰问题。

然后,进行FFT(Fast Fourier Transform)变换。

FFT变换将时域信号转换为频域信号。

在OFDM系统中,将添加了循环前缀的时域信号通过FFT变换将其转换为频域信号。

最后,进行接收端信号处理。

接收端信号处理包括频率偏移补偿、信道估计、信号解调等。

频率偏移补偿可以校正发送端和接收端之间的频率误差。

信道估计可以通过接收到的OFDM符号估计信道响应,用于后续的信号解调和解码。

对于OFDM系统的实现,可以分为两个关键部分:发送端和接收端。

在发送端,需要进行数据的调制、IFFT变换、循环前缀添加等操作。

数据调制可以将输入的比特序列转换为复数符号。

IFFT变换将复数符号转换为时域信号。

循环前缀添加可以解决多径效应引起的符号间干扰问题。

基于FPGA的QAM OFDM调制解调器设计与实现

基于FPGA的QAM OFDM调制解调器设计与实现

基于FPGA的QAM OFDM调制解调器设计与实现随着通信技术的不断发展,QAM(Quadrature Amplitude Modulation)OFDM(Orthogonal Frequency Division Multiplexing)调制解调器在无线通信领域中扮演着重要的角色。

本文将介绍一种基于FPGA的QAM OFDM调制解调器的设计与实现。

通过该调制解调器,可以实现高效的数据传输和频谱利用率。

下面将分为几个部分来详细讲解。

一、QAM OFDM调制解调器的原理QAM OFDM调制解调器是一种将QAM调制与OFDM技术相结合的通信系统。

QAM调制是一种多级振幅调制技术,能够通过改变振幅和相位来传输多个比特。

OFDM技术则是一种将高速数据流分成多个低速数据流进行传输的技术,通过正交子载波之间的无干扰传输,提高了信号的可靠性和抗干扰能力。

二、QAM OFDM调制解调器的设计与实现1. 硬件设计QAM OFDM调制解调器的硬件设计主要包括前端基带处理模块、调制解调模块和射频模块。

前端基带处理模块负责对输入信号进行滤波、采样和量化处理;调制解调模块实现QAM调制和OFDM调制解调功能;射频模块负责信号的射频前端处理和发射接收功能。

2. 软件设计QAM OFDM调制解调器的软件设计主要包括算法设计和FPGA编程。

算法设计涉及到QAM调制算法和OFDM调制解调算法的设计与优化;FPGA编程则是将算法实现在FPGA芯片上,包括时钟控制、逻辑电路设计和I/O接口设计等。

三、QAM OFDM调制解调器的性能优化为了提高QAM OFDM调制解调器的性能,可以采用以下几种优化措施:1. 信道估计和均衡:通过估计信道的频率响应和时延等参数,对接收到的信号进行均衡处理,提高信号的抗噪声性能和传输质量。

2. 错误控制编码:采用前向纠错编码技术,通过添加冗余信息来检测和纠正传输中的错误,提高信号的可靠性和抗干扰能力。

毕业设计OFDM系统原理及仿真实现

毕业设计OFDM系统原理及仿真实现

毕业设计OFDM系统原理及仿真实现摘要
OFDM系统是一种广泛应用于高速无线数据传输的数字通信技术,具有高数据传输率、宽带容量和低误码率的优点。

本文介绍了OFDM系统的原理,包括OFDM信号的产生、OFDM系统结构及其优缺点,以及OFDM系统的常用技术(如信道编码、时间分多址、调制和调制解调)以及其特性分析。

本文的主要目的是基于MATLAB实现OFDM系统的仿真。

首先,通过MATLAB环境建立OFDM系统仿真模型,然后模拟噪声信号对OFDM系统的影响,最后仿真OFDM系统的正确性及通信效率。

仿真结果表明,加入噪声信号后OFDM系统的信号-噪声比下降了,相应的误比特率也上升了;在正确译码的情况下,OFDM系统的效率可达到一定的水平。

结论是,OFDM 是一种具有高带宽和高数据传输速率的信号技术,能有效抑制多径效应的影响,具有较高的容量和低的误码率,因此在高速无线数据传输中得到了广泛应用。

关键词:OFDM,OFDM系统,仿真,MATLAB
1绪论
OFDM(Orthogonal Frequency Division Multiplexing)系统是一种高效的数字信号处理技术,具有高数据传输率、宽带容量和低误码率的优点,已成为当今无线通信领域的一项主流技术。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clear all;close all;IFFT_bin_length = 1024; % FFT的点数carrier_count = 200; % 载波的数量bits_per_symbol = 2; % 每个符号代表的比特数symbols_per_carrier = 50; % 每个载波使用的符号数SNR = 10; % 信道中的信噪比(dB)baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symb ol;%总比特数carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_co unt/2));conjugate_carriers = IFFT_bin_length - carriers + 2;%发送端>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>%产生随机二进制数据:baseband_out = round(rand(1,baseband_out_length));convert_matrix=reshape(baseband_out,bits_per_symbol,length(baseband _out)/bits_per_symbol);for k = 1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k) = 0;for i = 1:bits_per_symbol modulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_per_symbol-i);endend% 串并转换carrier_matrix = reshape(modulo_baseband, carrier_count, symbols_per_ carrier)'; % 对每一个载波的符号进行差分编码carrier_matrix = [zeros(1,carrier_count);carrier_matrix];for i = 2:(symbols_per_carrier + 1)carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_p er_symbol);end% 把差分符号代码转换成相位carrier_matrix = carrier_matrix * ((2*pi)/(2^bits_per_symbol)); % 把相位转换成复数[X,Y] = pol2cart(carrier_matrix, ones(size(carrier_matrix,1),size(carrier_ matrix,2)));complex_carrier_matrix = complex(X,Y); % 分配载波到指定的IFFT位置IFFT_modulation = zeros(symbols_per_carrier + 1, IFFT_bin_length); IFFT_modulation(:,carriers) = complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers) = conj(complex_carrier_matrix); % 画出频域中的OFDM信号代表figure (1)stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)), 'b*-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('IFFT Bin')title('OFDM Carrier Frequency Magnitude')%figure (2)plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bi n_length)), 'go')hold onstem(carriers-1, (180/pi)*angle(IFFT_modulation(2,carriers)),'b*-') stem(conjugate_carriers-1, (180/pi)*angle(IFFT_modulation(2,conjugate _carriers)),'b*-')axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')% 通过IFFT将频域转化为时域,得到时域信号time_wave_matrix = ifft(IFFT_modulation');time_wave_matrix = time_wave_matrix';%画出一个符号周期的时域OFDM信号figure (3)plot(0:IFFT_bin_length-1,time_wave_matrix(2,:))grid onylabel('Amplitude')xlabel('Time')title('OFDM Time Signal, One Symbol Period')%画出每一个载波对应的时域信号(分离的OFDM信号)for f = 1:carrier_counttemp_bins(1:IFFT_bin_length)=0+0j;temp_bins(carriers(f))=IFFT_modulation(2,carriers(f));temp_bins(conjugate_carriers(f))=IFFT_modulation(2,conjugate_carrie rs(f));temp_time = ifft(temp_bins');figure(4)plot(0:IFFT_bin_length-1, temp_time)hold onendgrid onylabel('Amplitude')xlabel('Time')title('Separated Time Waveforms Carriers')for i = 1:symbols_per_carrier + 1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:)).*hammin g(IFFT_bin_length)';windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:));end%串并转换ofdm_modulation=reshape(windowed_time_wave_matrix',1,IFFT_bin_le ngth*(symbols_per_carr ier+1));% 画出整个时域OFDMtemp_time = IFFT_bin_length*(symbols_per_carrier+1);figure (5)plot(0:temp_time-1,ofdm_modulation)grid onylabel('Amplitude (volts)')xlabel('Time (samples)') title('OFDM Time Signal')% 画出频域OFDM信号symbols_per_average = ceil(symbols_per_carrier/5);avg_temp_time = IFFT_bin_length*symbols_per_average;averages = floor(temp_time/avg_temp_time);average_fft(1:avg_temp_time) = 0;for a = 0:(averages-1)subset_ofdm=ofdm_modulation(((a*avg_temp_time)+1):((a+1)*avg_tem p_time));subset_ofdm_f = abs(fft(subset_ofdm));average_fft = average_fft + (subset_ofdm_f/averages);endaverage_fft_log = 20*log10(average_fft);figure (6)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)hold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('OFDM Signal Spectrum')% 上变频,这个模型中我们把经过IFFT运算后OFDM直接发送 Tx_data = ofdm_modulation;%信道==================================================== ===% The channel model is Gaussian (AWGN) +Multipath(时延为1) Tx_signal_power = var(Tx_data);linear_SNR = 10^(SNR/10);noise_sigma = Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);noise = randn(1, length(Tx_data))*noise_scale_factor;copy1=zeros(1,length(ofdm_modulation));for i=2:length(ofdm_modulation)copy1(i)=ofdm_modulation(i-1);endRx_Data = Tx_data + noise;%RECEIVE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<< % 根据符号长度和符号数将串行的符号转换为并行的 % - 每一列是符号周期Rx_Data_matrix = reshape(Rx_Data, IFFT_bin_length, symbols_per_car rier + 1);%对每一列信号做FFT得到频域信号Rx_spectrum = fft(Rx_Data_matrix);% 画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8 figure (7)stem(0:IFFT_bin_length-1, abs(Rx_spectrum(1:IFFT_bin_length,2)),'b*-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('FFT Bin')title('OFDM Receive Spectrum, Magnitude')figure (8)plot(0:IFFT_bin_length-1, (180/pi)*angle(Rx_spectrum(1:IFFT_bin_leng th,2)), 'go')hold onstem(carriers-1, (180/pi)*angle(Rx_spectrum(carriers,2)),'b*-')stem(conjugate_carriers-1, (180/pi)*angle(Rx_spectrum(conjugate_carrie rs,2)),'b*-') axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('FFT Bin')title('OFDM Receive Spectrum, Phase') % 抽取接收信号中有载波的点Rx_carriers = Rx_spectrum(carriers,:)';%画出每个接收符号分布图figure (9)Rx_phase_P = angle(Rx_carriers);Rx_mag_P = abs(Rx_carriers);polar(Rx_phase_P, Rx_mag_P,'bd');% 计算载波的相位% - 弧度转换为角度% - 归一化相位(0-360)Rx_phase = angle(Rx_carriers)*(180/pi);phase_negative = find(Rx_phase < 0);Rx_phase(phase_negative) = rem(Rx_phase(phase_negative)+360,360); % 用diff()计算相位差Rx_decoded_phase = diff(Rx_phase);phase_negative = find(Rx_decoded_phase < 0);Rx_decoded_phase(phase_negative) = rem(Rx_decoded_phase(phase_ne gative)+360,360);%--------1---------2---------3---------4---------5---------6---------7---------8 %相位转化为符号base_phase = 360/2^bits_per_symbol;delta_phase = base_phase/2;Rx_decoded_symbols= zeros(size(Rx_decoded_phase,1),size(Rx_decode d_phase,2));for i = 1:(2^bits_per_symbol - 1)center_phase = base_phase*i;plus_delta = center_phase+delta_phase;minus_delta = center_phase-delta_phase;decoded=find((Rx_decoded_phase<=plus_delta)&(Rx_decoded_phase> minus_delta));Rx_decoded_symbols(decoded)=i;end% Convert the matrix into a serial symbol streamRx_serial_symbols=reshape(Rx_decoded_symbols',1,size(Rx_decoded_s ymbols,1)*size(Rx_decoded_symbols,2));% Convert the symbols to binaryfor i = bits_per_symbol: -1: 1if i ~= 1Rx_binary_matrix(i,:) = rem(Rx_serial_symbols,2);Rx_serial_symbols = floor(Rx_serial_symbols/2);elseRx_binary_matrix(i,:) = Rx_serial_symbols;endendbaseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*size (Rx_binary_matrix,2));% 查找错位比特bit_errors = find(baseband_in ~= baseband_out);bit_error_count = size(bit_errors,2);d_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);for k = 1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k) = 0;for i = 1:bits_per_symbolmodulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_ per_symbol-i);endend% 串并转换carrier_matrix = reshape(modulo_baseband, carrier_count, symbols_per_ carrier)';% 对每一个载波的符号进行差分编码carrier_matrix = [zeros(1,carrier_count);carrier_matrix]; for i = 2:(symbol s_per_carrier + 1)carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_p er_symbol);end% 把差分符号代码转换成相位carrier_matrix = carrier_matrix * ((2*pi)/(2^bits_per_symbol));% 把相位转换成复数[X,Y] = pol2cart(carrier_matrix, ones(size(carrier_matrix,1),size(carrier_ matrix,2)));complex_carrier_matrix = complex(X,Y);% 分配载波到指定的IFFT位置IFFT_modulation = zeros(symbols_per_carrier + 1, IFFT_bin_length); IFFT_modulation(:,carriers) = complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers) = conj(complex_carrier_matrix); % 画出频域中的OFDM信号代表figure (1)stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)), 'b*-') grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('IFFT Bin')title('OFDM Carrier Frequency Magnitude')figure (2)plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bi n_length)), 'go')hold onstem(carriers-1, (180/pi)*angle(IFFT_modulation(2,carriers)),'b*-') stem(conjugate_carriers-1, (180/pi)*angle(IFFT_modulation(2,conjugate _carriers)),'b*-') axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')% 通过IFFT将频域转化为时域,得到时域信号time_wave_matrix = ifft(IFFT_modulation');time_wave_matrix = time_wave_matrix';%画出一个符号周期的时域OFDM信号figure (3)plot(0:IFFT_bin_length-1,time_wave_matrix(2,:))grid onylabel('Amplitude')xlabel('Time')title('OFDM Time Signal, One Symbol Period')%画出每一个载波对应的时域信号(分离的OFDM信号)for f = 1:carrier_counttemp_bins(1:IFFT_bin_length)=0+0j;temp_bins(carriers(f))=IFFT_modulation(2,carriers(f));temp_bins(conjugate_carriers(f))=IFFT_modulation(2,conjugate_carrie rs(f));temp_time = ifft(temp_bins');figure(4)plot(0:IFFT_bin_length-1, temp_time)hold onendgrid onylabel('Amplitude') xlabel('Time')title('Separated Time Waveforms Carriers')for i = 1:symbols_per_carrier + 1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:)).*hammi ng(IFFT_bin_length)';windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:));end%串并转换ofdm_modulation=reshape(windowed_time_wave_matrix',1,IFFT_bin_ length*(symbols_per_carrier+1));% 画出整个时域OFDMtemp_time = IFFT_bin_length*(symbols_per_carrier+1);figure (5)plot(0:temp_time-1,ofdm_modulation)grid onylabel('Amplitude (volts)')xlabel('Time (samples)')title('OFDM Time Signal')% 画出频域OFDM信号symbols_per_average = ceil(symbols_per_carrier/5);avg_temp_time = IFFT_bin_length*symbols_per_average; averages = floor(temp_time/avg_temp_time);average_fft(1:avg_temp_time) = 0;for a = 0:(averages-1)subset_ofdm=ofdm_modulation(((a*avg_temp_time)+1):((a+1)*avg_te mp_time));subset_ofdm_f = abs(fft(subset_ofdm));average_fft = average_fft + (subset_ofdm_f/averages);endaverage_fft_log = 20*log10(average_fft);figure (6)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)hold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('OFDM Signal Spectrum')% 上变频,这个模型中我们把经过IFFT运算后OFDM直接发送Tx_data = ofdm_modulation;%信道==================================================== ===% The channel model is Gaussian (AWGN) +Multipath(时延为1) Tx_signal_power = var(Tx_data);linear_SNR = 10^(SNR/10);noise_sigma = Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);noise = randn(1, length(Tx_data))*noise_scale_factor;copy1=zeros(1,length(ofdm_modulation));for i=2:length(ofdm_modulation)copy1(i)=ofdm_modulation(i-1);endRx_Data = Tx_data + noise;%RECEIVE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<% 根据符号长度和符号数将串行的符号转换为并行的% - 每一列是符号周期Rx_Data_matrix = reshape(Rx_Data, IFFT_bin_length, symbols_per_c arrier + 1);%对每一列信号做FFT得到频域信号Rx_spectrum = fft(Rx_Data_matrix);% 画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8 figure (7)stem(0:IFFT_bin_length-1, abs(Rx_spectrum(1:IFFT_bin_length,2)),'b *-')grid onaxis ([0 IFFT_bin_length -0.5 1.5])ylabel('Magnitude')xlabel('FFT Bin')title('OFDM Receive Spectrum, Magnitude')figure (8)plot(0:IFFT_bin_length-1, (180/pi)*angle(Rx_spectrum(1:IFFT_bin_le ngth,2)), 'go')hold onstem(carriers-1, (180/pi)*angle(Rx_spectrum(carriers,2)),'b*-')stem(conjugate_carriers-1, (180/pi)*angle(Rx_spectrum(conjugate_carr iers,2)),'b*-')axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('FFT Bin')title('OFDM Receive Spectrum, Phase')% 抽取接收信号中有载波的点Rx_carriers = Rx_spectrum(carriers,:)';%画出每个接收符号分布图 figure (9)Rx_phase_P = angle(Rx_carriers);Rx_mag_P = abs(Rx_carriers);polar(Rx_phase_P, Rx_mag_P,'bd');% 计算载波的相位% - 弧度转换为角度% - 归一化相位(0-360)Rx_phase = angle(Rx_carriers)*(180/pi);phase_negative = find(Rx_phase < 0);Rx_phase(phase_negative) = rem(Rx_phase(phase_negative)+360,360) ; % 用diff()计算相位差Rx_decoded_phase = diff(Rx_phase);phase_negative = find(Rx_decoded_phase < 0);Rx_decoded_phase(phase_negative) = rem(Rx_decoded_phase(phase_ negative)+360,360);%--------1---------2---------3---------4---------5---------6---------7---------8 % 相位转化为符号base_phase = 360/2^bits_per_symbol; delta_phase = base_phase/2; Rx_decoded_symbols= zeros(size(Rx_decoded_phase,1),size(Rx_deco ded_phase,2));for i = 1:(2^bits_per_symbol - 1)center_phase = base_phase*i;plus_delta = center_phase+delta_phase;minus_delta = center_phase-delta_phase;decoded=find((Rx_decoded_phase<=plus_delta)&(Rx_decoded_phase >minus_delta));Rx_decoded_symbols(decoded)=i;end% Convert the matrix into a serial symbol streamRx_serial_symbols=reshape(Rx_decoded_symbols',1,size(Rx_decoded _symbols,1)*size(Rx_decoded_symbols,2));% Convert the symbols to binaryfor i = bits_per_symbol: -1: 1if i ~= 1Rx_binary_matrix(i,:) = rem(Rx_serial_symbols,2);Rx_serial_symbols = floor(Rx_serial_symbols/2);elseRx_binary_matrix(i,:) = Rx_serial_symbols;endendbaseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*si ze(Rx_binary_matrix,2));% 查找错位比特bit_errors = find(baseband_in ~= baseband_out); bit_error_count = size(bit_errors,2);。

相关文档
最新文档