当前位置:首页 > 两种OFDM系统信道估计算法的比较研究及MATLAB仿真-毕业论文
齐鲁工业大学 2014 届本科毕业设计(论文)
end
........................................................qam16.m................................................................. function x=qam16(y) if y==[0 0 0 0] x=1+j; elseif y==[0 0 1 0] x=1-j; elseif y==[1 0 0 0] x=-1+j; elseif y==[1 0 1 0] x=-1-j; elseif y==[0 1 0 0] x=3+j; elseif y==[0 0 0 1] x=1+3*j; elseif y==[0 1 1 0] x=3-j; elseif y==[0 0 1 1] x=1-3*j; elseif y==[1 0 0 1] x=-1+3*j; elseif y==[1 1 0 0] x=-3+j; elseif y==[1 1 1 0] x=-3-j; elseif y==[1 0 1 1] x=-1-3*j; elseif y==[0 1 0 1] x=3+3*j; elseif y==[1 1 0 1] x=-3+3*j; elseif y==[1 1 1 1] x=-3-3*j; elseif y==[0 1 1 1] x=3-3*j; end
......................................................de_qam16.m................................................ function y=de_qam16(x) %qam解调,X1是序列长度,K1就是2^K1qam % for n=1:4:16
% x=1.4+sqrt(-1)*(-2.6); y=real(x); y1=imag(x);
if (y>=0)&(y<=2) y=1; elseif (y>2) y=3; elseif (y<-2) y=-3; else y=-1; end
if (y1>=0)&(y1<=2) y1=1; elseif (y1>2) y1=3; elseif (y1<-2) y1=-3; else y1=-1; end
x=complex(y,y1);
if x==1+j y=[0 0 0 0]; elseif x==1-j y=[0 0 1 0];
30
齐鲁工业大学 2014 届本科毕业设计(论文)
elseif x==-1+j y=[1 0 0 0]; elseif x==-1-j y=[1 0 1 0]; elseif x==3+j y=[0 1 0 0]; elseif x==1+3*j y=[0 0 0 1]; elseif x==3-j y=[0 1 1 0]; elseif x==1-3*j y=[0 0 1 1]; elseif x==-1+3*j y=[1 0 0 1]; elseif x==-3+j y=[1 1 0 0]; elseif x==-3-j y=[1 1 1 0]; elseif x==-1-3*j y=[1 0 1 1]; elseif x==3+3*j y=[0 1 0 1]; elseif x==-3+3*j y=[1 1 0 1]; elseif x==-3-3*j y=[1 1 1 1]; elseif x==3-3*j y=[0 1 1 1]; end
..................................................error_count.m.............................................. function err_num=error_count(source,receive) err_num=0; [m,n]=size(receive); for i=1:m for j=1:n
if receive(i,j) ~=source(i,j) err_num=err_num+1; end end end
..........................................................input_b.m..................................................... function x=input_b(N,NL)%N为一个ofdm符号中的子符号个数,NL为一次仿真所包含的ofdm符号数 for i=1:NL
input_0=rand(1,4*N); %输入的二进制数据序列 for j=1:4*N
if input_0(j)>0.5 input(j,i)=1; else
input(j,i)=0; end end end x=input;
31
齐鲁工业大学 2014 届本科毕业设计(论文)
................................................immse_estimation.m.............................................
function
output=lmmse_estimation(input,pilot_inter,pilot_sequence,pilot_num,trms,t_max,snr); %trms为多经信道的平均延时,t_max为最大延时,此处所有的时间都是已经对采样间隔做了归一化后的结果
beta=17/9;
[N,NL]=size(input); Rhh=zeros(N,N); for k=1:N for l=1:N
Rhh(k,l)=(1-exp((-1)*t_max*((1/trms)+j*2*pi*(k-l)/N)))./(trms*(1-exp((-1)*t_max/trms))*((1/trms)+j*2*pi*(k-l)/N)); end end
output=zeros(N,NL-pilot_num); i=1; count=0; while i<=NL
Hi=input(:,i)./pilot_sequence;
Hlmmse=Rhh*inv(Rhh+(beta/snr)*eye(N))*Hi; count=count+1;
if count*pilot_inter<=(NL-pilot_num)
for p=((count-1)*pilot_inter+1):count*pilot_inter
output(:,p)=input(:,(i+p-(count-1)*pilot_inter))./Hlmmse; end else
for p=((count-1)*pilot_inter+1):(NL-pilot_num)
output(:,p)=input(:,(i+p-(count-1)*pilot_inter))./Hlmmse; end end
i=i+pilot_inter+1; end
...................................................insert_plot.m................................................ function
[output,count,pilot_sequence]=insert_pilot(pilot_inter,pilot_symbol_bit,map_out_block) % pilot_inter为导频符号间隔,以ofdm符号个数的形式给出,为整数。间隔越大估计误差越大
% pilot_symbol_bit 采用常数导频符号,这里给出它的二进制形式
32
齐鲁工业大学 2014 届本科毕业设计(论文)
% map_out_block 映射后的一次仿真所包含的符号块 pilot_symbol=qam16(pilot_symbol_bit); %导频复符号 [N,NL]=size(map_out_block);
output=zeros(N,(NL+fix(NL/pilot_inter))); pilot_sequence=pilot_symbol*ones(N,1); count=0;%记录插入导频信号的次数 i=1;
while i<(NL+fix(NL/pilot_inter))%每隔pilot_inter个符号插入一个导频序列 output(:,i)=pilot_sequence; count=count+1;
if count*pilot_inter<=NL
output(:,(i+1):(i+pilot_inter))=map_out_block(:,((count-1)*pilot_inter+1):count*pilot_inter); else
output(:,(i+1):(i+pilot_inter+NL-count*pilot_inter))=map_out_block(:,((count-1)*pilot_inter+1):NL); end
i=i+pilot_inter+1; end
............................................lr_lmmse_estimation.m............................................. function
output=lr_lmmse_estimation(input,pilot_inter,pilot_sequence,pilot_num,trms,t_max,snr,cp);
%trms为多经信道的平均延时,t_max为最大延时,此处所有的时间都是已经对采样间隔做了归一化后的结果
beta=17/9;
[N,NL]=size(input); Rhh=zeros(N,N); for k=1:N
Forl=1:N
Rhh(k,l)=(1-exp((-1)*t_max*((1/trms)+j*2*pi*(k-l)/N)))./(trms*(1-exp((-1)*t_max/trms))*((1/trms)+j*2*pi*(k-l)/N)); end end
%以下过程是对Rhh矩阵进行特征值分解,并按特征值大小排队,选最大的16个特征值
[U,D]=eig(Rhh);%U为满秩酉阵,D是以特征值为主对角线的对角阵 dlamda=diag(D);%取D对角元素构成列向量
33
共分享92篇相关文档