multipath.m
资源名称:MIMO-OFDM.rar [点击查看]
上传用户:look542
上传日期:2009-06-04
资源大小:784k
文件大小:3k
源码类别:
传真(Fax)编程
开发平台:
Matlab
- function output = multipath(input,Doppler_freq,factor,frame_Num, frame_idx)
- % 函数功能:使用Jakes模型,对输入的信号加上多径效应和多普勒频移. 注意:未加高斯白噪声
- % 输入:1) input,输入信号样点序列,行向量,样点间隔20ns(系统基带采样速率假定为50MHz)
- % 2) Doppler_freq,多普勒频移(Hz)
- % 3) factor, 对输入时域样点序列进行分块,多个时域样点使用1个瑞利衰落系数。 这个变量为块的样点个数。
- % 使用Jakes模型产生瑞利衰落序列, 当多普勒频移较小时,时域很多个样点都近似相等。目的是减小运算量和存储空间。
- % 如多普勒频移为100Hz, 则相干时间为10ms. 而样点间隔为20ns, 则10ms/20ns = 5*10^5个样点信道变化不大。
- % 如果为多载波CDMA系统或OFDM系统,建议factor值为一个OFDM符号的样点数(包括CP)
- % 4) frame_Num,为总的仿真的帧数目
- % 5) frame_idx,为当前帧的序号,从1到frame_Num
- % 输出:output,输出信号样点序列,行向量,样点间隔20ns , 系统带宽50MHz
- % 样点间隔20ns
- deltaT = 20*10^(-9);
- % 每个时域样点块的时间宽度.
- T_block = deltaT*factor;
- % 信道的功率时延谱
- % 城区指数衰落信道,等间隔取0us~ 5us 共6条径
- atten_power = exp(-[0:5]);
- path_delay = [0:5]*50; % 20ns样点间隔
- % 求信号幅度衰减,并归一化总功率
- atten = sqrt( atten_power );
- atten = atten./sqrt(sum(atten.*conj(atten)));
- % 输出样值序列
- output = zeros( 1,length(input) + max(path_delay) );
- % 相干时间对应的样点数
- Tc = round( (1/Doppler_freq)/deltaT );
- % 计算如果每个点都加1个瑞利衰落系数,总共需要的瑞利衰落样点数
- % 原则: 每条径使用的瑞利衰落系数要独立, 也就是截取Jakes模型时, 径和径之间的截取间隔要等于或
- % 大于相干时间对应的样点数. 我们截取时是等于相干时间对应样点数.
- len = length(input) + Tc * length(path_delay) * frame_Num;
- % 如果考虑分块和需要多产生一些样点以方便截取,调用Jakes模型程序需要产生的瑞利衰落样点数
- % 乘15*Tc的目的是为了方便舍去Jakes模型产生的瑞利衰落系数前面幅度较大的部分
- fading_len = ceil(( len + 15*Tc)/ factor);
- if frame_idx == 1
- % Jakes模型产生瑞利衰落序列
- fading = Tap_Rayleigh_Jakes(Doppler_freq,T_block,fading_len);
- % 截取Jakes模型产生瑞利衰落序列 ,舍去Jakes模型产生的瑞利衰落系数前面幅度较大的部分,
- % 从10倍相干时间对应的样点数处开始截取
- fading_trunc = fading( ceil(( 10*Tc + 1)/factor) : ceil((len + 10*Tc + 1)/factor) );
- % 将Jakes模型产生的序列进行功率归一化
- fading_jakes = fading_trunc./sqrt( sum(fading_trunc.*conj(fading_trunc)) / length(fading_trunc) );
- % 为程序运行速度考虑,每帧都生成一次衰落系数序列,运行速度比较慢。可以在第1帧生成衰落系数序列
- % 并保存下来,然后每帧,读取保存的数据,截取即可
- save fading_jakes.mat fading_jakes;
- else
- load fading_jakes.mat;
- end
- for i = 1:length(path_delay)
- % 每条径, 对瑞利衰落序列进行截取. 每条径截取间隔为相干时间, 长度为输入样点长度.
- fading_path = fading_jakes( ceil( ( (i-1)*Tc + (frame_idx-1)*Tc + 1)/ factor ) :...
- ceil( ( (i-1)*Tc + (frame_idx-1)*Tc + length(input) ) / factor ) );
- % 把瑞利衰落序列扩展为每个样点1个衰落系数
- fading_path2 = reshape( repmat(fading_path ,factor ,1 ), 1 ,length(fading_path)*factor );
- % 输入序列点乘上瑞利衰落序列, 再乘上对应径的幅度衰落因子atten(i)
- tmp_output = atten(i)*fading_path2(1:length(input)).*input;
- % 多条径叠加在一起,输出
- output = output + [zeros(1,path_delay(i)) tmp_output zeros(1,max(path_delay)-path_delay(i))];
- end