⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 channel.m

📁 本程序实现802.11a中信道的建模,语言为matlab
💻 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 + -