📄 ofdm.asv
字号:
%ofdm.m
%仿真实现OFDM传输系统
function[ber]=ofdm(ebn0)
%---------定义参数--------
para=128; %并行传输的信道数(点数)
fftlen=128; %FFT长度
noc=128; %子载波数
nd=6; %每次循环含有的OFDM 符号数
ml=2; %调制电平:QPSK(二电平)
sr=4800; %符号速率
br=sr.*ml; %每载波的比特率
gilen=32; %保护间隔(点数)
%------------主循环部分---------
nloop=10000 %仿真循环次数
noe=0; %误码率
nod=0; %传输的数据数量
eop=0; %误组数
nop=0; %传输的分组数
for iii=1:nloop
%--------------发送部分--------
%--------------产生数据--------
seldata=rand(1,para*nd*ml)>0.5;%(均匀分布的随机矩阵函数;para*nd*ml每次产生的数据个数)
%seldata得到的实际上是右边那个逻辑表达式的结果,rand产生的值如果大于0.5,则seldata为1,如果小于0.5,则seldata为0
%---------------------串并变换-------------
paradata=reshape(seldata,para,nd*ml);
%变换方式:前128bit变为第一列,随后的128bit为第二列,依此类推
%----------------------QPSK调制-------------
[ich,qch]=qpskmod(paradata,para,nd,ml);%(同向分量,正交分量)
%-------------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+qch.^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)-------------
%即使的误码和数据
noe2=sum(abs(demodata1-seldata));
%将接受解调后的信号与原始信号相比较,累计不一样的
nod2=length(seldata); %发送信号总长度
%累计误码数和总的数据
noe=noe+noe2;
%因为是进行了nloop次的循环,所以把每次循环的数据和误码数积累起来
nod=nod+nod2;
%计算误组率(PER)(每次循环作为一个分组)
if noe~=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;%总的误码率
save ofdm.mat
%------------------------结束---------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -