📄 channel.m
字号:
function[x,Rhh]=channel(traniseq,f)
%本函数输入参数traniseq为时域的样值,f为信道类型,x为输出为过信道后的时域样值, Rhh为信道自相关矩阵,输入输出都为行向量
[h,Rhh]=channelcreate(f);%产生信道的频域样值h,和其自相关矩阵Rhh
samplenumber=length(traniseq);%计算样值数目
sybolnumber=samplenumber/80-4; %计算除去帧头的ofdm符号数目
traniseqM=reshape(traniseq(321:samplenumber),80,sybolnumber);%产生数据矩阵
traniseqM=traniseqM(17:1:80,:);%去除循环前缀
FtraniseqM=fft(traniseqM);%转到频域
hM=mulivector(h.',sybolnumber);%产生信道矩阵
FtraniseqM_Passchannel=FtraniseqM.*hM ;%在频域过信道
TtraniseqM_Passchannel=ifft(FtraniseqM_Passchannel);%转到时域
CTsequence=zeros(80,sybolnumber); %定义加循环前缀矩阵
CTsequence(1:1:16,:)=TtraniseqM_Passchannel(49:1:64,:);
CTsequence(17:1:80,:)=TtraniseqM_Passchannel(1:1:64,:);%加循环前缀
data=(CTsequence(:)).'; %得到数据流
%下面得出帧头部分过信道的时域输出
%(1)产生短序列
shortTRFEQ=sqrt(13/6)*[0,0,1+j,0,0,0,-1-j,0,0,0,1+j,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,0,0,0,0,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,0,0,0,1+j,0,0,0,1+j,0,0,0,1+j,0,0];
%产生短序列的频域序列
OshortTRFEQ=[0,shortTRFEQ(28:1:53),0,0,0,0,0,0,0,0,0,0,0,shortTRFEQ(1:1:26)];%补零后的短序列的频域序列
OshortTRFEQ=OshortTRFEQ.*(h.'); %过信道
shortTRTIME=ifft(OshortTRFEQ);%产生时域的序列
shortpreamble=[shortTRTIME(1)*0.5,shortTRTIME(2:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1:1:16),shortTRTIME(1)*0.5];
%产生短序列时域表达式并加窗
%(2)产生长序列
longTRFEQ=[1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,0,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,1,1];%产生长序列的频域序列
OlongTRFEQ=[0,longTRFEQ(28:1:53),0,0,0,0,0,0,0,0,0,0,0,longTRFEQ(1:1:26)];%补零后的长序列的频域序列
OlongTRFEQ=OlongTRFEQ.*(h.');%%过信道
longTRTIME=ifft(OlongTRFEQ);%产生时域的序列
TG12=[longTRTIME(33:1:64)];%产生循环前缀
longpreamble=[TG12(1)*0.5,TG12(2:1:32),longTRTIME,longTRTIME,longTRTIME(1)*0.5];%%产生长序列时域表达式并加窗
%(3)将长短序列合并成一个完整的序列序列
preamble=[shortpreamble(1:1:160),shortpreamble(161)+longpreamble(1),longpreamble(2:1:161)];%向量为321个,
frame_head=preamble(1:1:320);
%**************************************************************************
x=[frame_head data];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -