摘要
OFDM技术的思想是将指配的信道分成许多正交子信道,在每个子信道上进行窄带调制和传输,信号带宽小于信道的相关带宽。OFDM单个用户的信息流被串/并变换为多个低速率码流(100Hz-50kHz),每个码流用一条载波发送。OFDM采用跳频方式选用即便频谱混叠也能保持正交的波形,所以OFDM既有调制技术,也有复用技术。OFDM增强了抗频率选择性衰落和抗窄带干扰的能力。在单载波系统中,单个衰落或干扰会导致整条链路不可用,但在多载波系统中,只会有一小部分载波受影响。纠错码的应用可以恢复一些易错载波上的信息。 OFDM允许各载波间频率互相混叠,采用基于载波频率正交的FFT调制,由于各个载波的中心频点处没有其他载波的频谱分量,所以能够实现各个载波的正交。
OFDM设计流程
流程图如上,这里不做太多介绍。
通过OFDM仿真的大致步骤
1.串行数据产生
首先对图像文件进行数据处理, 系统输入数据信号的长度是根据子载波的个数及每帧的符号的个数确定的,通过round()对产生的图像所生成的序列四舍五入取整。
![](https://i-blog.csdnimg.cn/blog_migrate/ab419d303a8a9233c9c8557921a03582.jpeg)
imdata = imread('11.jpg');
BinSer=dec2bin(imdata,8);
BinSer=BinSer';
FileName=[num2str(size(imdata,1)),'_',num2str(size(imdata,2)),'_',num2str(size(imdata,3)),'.txt'];
fid=fopen(FileName,'w');
fprintf(fid,'%c',BinSer(:));
fclose(fid);
FileName='256_256_3.txt'; %文件名为上述生成的文件名
mn1=sscanf(FileName,'%d_%d_%d');
fid=fopen(FileName,'r');
datainput=fscanf(fid,'%c');
fclose(fid);
c=double(datainput);
for i=1:length(datainput)
c(i)=str2num(char(c(i)));
end
%-------------------------发送端-------------------------------------%
for g=1:SNRnum
Signal=round(c);
2.串并\并串转换
OFDM系统是多载波传输的一种特殊方式,而发送端产生的数据为串行的,因此需要进行串并转换。OFDM将高速输入的串行数据比特流转换成并行传输的低速数据流,而且串并转换之后会提高系统的抗干扰能力。串并转换的实现方法很多,在matlab里reshape用来把指定的矩阵改变形状,但是元素个数不变,在本程序中采用reshape函数来实现串并转换。
同样如果对信号进行了串并转换,那么当发送信号和接收信号时,也需对其进行并串转换。在本程序中并串转换也采用了reshape函数来实现。下面是实现串并及并串转换的语句。
SubCarryNdata=reshape(encode,SubCarryN,SymbN*2) %串并转换
ich4=reshape(ich3,1,(fftLen+GuardLen)*SymbN); %并串转换
qch4=reshape(qch3,1,(fftLen+GuardLen)*SymbN);
3.卷积编码与维特比译码
卷积编码作为一种信道编码,具有前向纠错的功能。通过对信号进行卷积编码,对信号增加冗余。当信号在信道传输时,会大大降低误码率。卷积编码的实现方法也很多,在matlab中有卷积编码函数,本程序直接调用了convenc函数。实现卷积编码如下:
trel=poly2trellis(9,[561 753]); %设置网格图