两种OFDM系统信道估计算法的比较研究及MATLAB仿真-毕业论文 联系客服

发布时间 : 星期二 文章两种OFDM系统信道估计算法的比较研究及MATLAB仿真-毕业论文更新完毕开始阅读49a2c2d97cd184254a353589

齐鲁工业大学 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