OFDM信道估计论文(IP大作业)分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OFDM信道估计算法研究
摘要—正交频分复用(OFDM,Orthogonal Frequency Division Multiplexing)技术是一种无线环境下的高速多载波传输技术,它通过将频率选择性衰落信道在频域内转换成平坦信道,从而减少多径影响,成为第四代(4G)移动通信系统的核心技术。
信道估计技术是OFDM系统的研究热点之一。
信道估计算法大致可分为基于导频的信道估计和盲估计。
文中研究了LS和MMSE基于导频的信道估计算法,并对两种算法进行了分析和性能比较。
此外,还研究了不同的插值算法对OFDM系统的误码性能影响。
仿真结果表明MMSE算法较LS算法可以更加准确的跟踪信道的变化,从而保证更加准确地估计出信道信息,而高阶的插值算法能有效提高系统误码性能。
ABSTRACT—OFDM is an effective technique for high-rate multi-carrier wireless transmission system. It reduces the effects of the multi-path fading by converting a frequency-selective channel into a parallel collection of frequency flat sub-channels. And OFDM is the key technique of the fourth generation of communications. Channel estimation has attracted widespread attention. There are two estimation techniques: pilot-aided and blind channel estimation. Different pilot-aided channel estimations LS and MMSE in OFDM systems is presented and analyzed in this paper. In addition, the performance of the SER is presented in different interpolation algorithms. The simulation results show that MMSE outperforms LS and high-order interpolation algorithm can improve the system performance.
1 引言
未来的无线多媒体业务要求数据传输速率较高,同时又要求保证质量,这就要求所采用的调制解调技术既要有较高的信元速率,又要有较长的码元周期。
基于这样的考虑,产生了OFDM技术[1]。
OFDM的主要思想是:将信道分成若干正交子信道,将高速数据信号合成并行的低速子数据流,调制到每个子信道上进行传输,有效地抵抗无线移动环境中的频率选择性衰落,减少多径的影响[2]。
然而要想完全实现OFDM技术所带来的性能的提高,还需要进行相关技术的实现,而信道估计就是其中之一[3]。
信道估计是通信领域的一个研究热点,它是进行相关检测,解调,均衡的基础。
由于OFDM多载波的出现,这位信道技术应用提供了新的空间。
从最早的
无分集的单载波信道估计到现在有分集的多载波信道估计,从时域或频域信道估计到现在的时频域二维估计,信道估计的性能在不断提高。
本文就基于导频的信道估计做了详细的阐释,给出了典型估计方法LS 和MMSE 的比较和仿真。
在此基础上,研究了不同差值算法对系统误码性能的影响,并得出相关结论。
2 信道估计原理及方法
信道估计从大的角度可以分为基于导频的信道估计和盲估计。
所谓的非盲估计指在估计阶段首先利用导频来获得导频位置的信道信息,然后为下面获得整个数据传输阶段的信道信息做好准备;盲估计是指在不使用导频信息,通过使用相应信息处理技术获得信道的估计值。
与基于导频的信道估计技术相比,盲信道估计使系统的传输效率大大提高,然而由于盲信道估计算法一般收敛速度较慢,这阻碍了它在实际系统中的应用。
在基于OFDM 的无线通信系统中,由于传输速率较高,并且使用相干检测技术获得较高的性能,因而通常使用非盲估计便可获得较好的估计效果,这样可以更好的跟踪无线信道的变化,提高接收机的性能。
基于导频的信道估计是指在数据发射时,将收发双方已知的导频符号离散的安插在有效数据之中,从时域和频域这一二维结构看去,只要在两个方向的导频密度满足采样定理,就可以精确估计信道的时变和衰落特性。
利用导频进行信道估计的一大优点就是能够适应快衰落信道。
2.1 OFDM 导频结构
根据导频排列的不同,导频结构可以分为三种:块状类型、梳状类型和格状类型[4]。
2.1.1 块状类型
图2.1所示为块状类型的导频排列。
在这种类型中,周期性地发射OFDM 符号以进行信道估计,其中每个导频符号上的所有子载波都用做导频。
利用这些导频进行时域插值,沿时间轴估计信道,令t S 表示导频符号的周期。
为跟踪时变信道特性,导频插入周期必须与相干时间保持一致,导频符号的周期必须满足:
1t Doppler
S f
(2-1)
其中,Doppler f 为多普勒频移。
图2.1 块状类型的导频排列图 2.2 梳状类型的导频排列图 由于导频是周期性地插入导频符号所有的子载波中,所以块状导频的排列适用于频率选择性信道,而不适用于快衰落信道。
2.1.2梳状类型
图2.2所示为梳状类型的导频排列。
在这种类型中,在每个OFDM 符号的子载波上周期性地放置导频信号,然后利用这些导频信号进行频域插值,沿频率轴进行信道估计。
令f S 为导频在频率上的周期。
为了跟踪频率选择性信道的特性,放置的导频符号的频率必须与相干带宽保持一致。
以进行信道估计,其中每个导频符号上的所有子载波都用做导频。
利用这些导频进行时域插值,沿时间轴估计信道,令f S 表示导频符号的周期。
为跟踪时变信道特性,导频插入周期必须与相干时间保持一致,导频符号的周期必须满足:
max
1
f S σ≤
(2-2)
其中max σ为最大时延扩展。
与块状类型的导频排列不同,梳状类型的导频排列适用于快衰落信道,而不是频率选择性信道。
2.1.3格状类型
图2.3所示为格状类型的导频排列。
在这种类型中,以给定的周期沿时间轴和频率轴两个方向插入导频。
导频分散在时间和频率轴上,使信道估计在时域和频域上的差值更为便利。
令t S 和f S 分别表示导频符号在时间和频率上的周期。
为了跟踪信道的时变和频率选择特性,导频符号的排列必须同时满足:
1t Doppler
S f ≤
和max
1
f S σ≤
(2-3)
图2.3 梳状类型的导频排列
格状导频可以很好地跟踪时变和频率选择性信道。
2.2 信道估计算法
最小二乘(LS )和最小均方误差(MMSE )技术被广泛应用于信道估计。
假设所有子信道是正交的,没有ICI ,我们将N 个子载波上的导频符号表示成矩阵形式:
[0]
00
0[1]00
[1]X X X N ⎡⎤⎢⎥
⎢
⎥=⎢⎥⎢⎥
-⎣⎦
X (2-4) 其中,[]X k 为第k 个子载波上的符号。
给定第k 个子载波的信道增益为[]H k ,接收到的训练符号为[]Y k ,噪声为
[]Z k ,ˆH
为H 的信道估计,则有, [0][0]
00
[0][0][1]0[1][1][1]0
[1]0
[1][1][1]Y X H Z Y X H Z Y N X N H N Z N ⎡⎤⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=+⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥
----⎣⎦⎣⎦⎣⎦⎣⎦
Y
(2-5)
2.2.1 LS 信道估计
为得到信道估计ˆH
,LS 信道估计需要最小化下面的代价函数: 2
^^
()J =-H Y XH
^
^
()()H
=--Y XH Y XH
^
^^
^
H
H H
H
H
H
=--+Y Y Y X H H X Y H X X H (2-6) 通过最小化代价函数,得到LS 信道估计的解为:
^11()H H LS --==H X X X Y X Y (2-7)
LS 信道估计的均方误差(MSE )为:
^
^
{()(}H
LS LS LS MSE E =--H H H H
11{()()}H E --=--H X Y H X Y 11{()()}H E --=X Z X Z
2
2Z X
σσ= (2-8)
由式(2-8)可以看出LS 估计增强了噪声。
2.2.2 MMSE 信道估计
MMSE 信道估计的核心思想是使信道估计的均方误差最小化。
信道估计的均方误差可以表示为:
2
^
^
2
(){}{}J E E ==-H e H H (2-9)
此处ˆH
是对LS 的估计信道进行加权得到的,即: -1ˆ=H
WX Y (2-10) 其中W 为加权矩阵。
由于估计误差向量ˆ
=e H -H 与-1X Y 正交,即:
11ˆ{()}{()()}0H H E E --=-=e X Y H H
X Y (2-11)
由式(2-11)可得:
1111{()}{()()}H H E E ----=W H X Y X Y X Y (2-12)
以上基于导频的信道估计算法给出的仅是导频插入点的信道状态信息,为获取全部的信道状态信息,还需要进一步的插值算法处理,常用的插值算法有线性插值、二次插值、三次样条插值及高斯插值等。
实际系统中这些插值算法的实现靠滤波器完成。
3 仿真及结果
该节对上节所介绍的信道估计算法进行了仿真分析,并研究了不同插值算法下,使用LS 信道估计算法的系统误码性能。
具体仿真环境及参数设置如表3.1所示。
表3.1 仿真环境及参数设置
带宽
1MHz 调制方式 BPSK 子载波个数 64 最大频移 70Hz 导频图案 块状 信道多径数 5
信道模型 多径衰落信道
CP 数目 16
性能衡量指标
均方误差(MSE )和误码率
(BER )
2
345678910
10-3
10
-2
10
-1
10
SNR ( dB )
M S E -均方误差
SNR and square MSE for an OFDM system with MMSE/LS estimator
mmse-mse-ave ls-mse-ave
图3.1 不同信道估计算法下的均方误差
图3.1是对LS 和MMSE 估计算法的均方误差的对比分析。
由于LS 算法在进行信道估计时没有考虑加性噪声的影响,造成了信道估计结果偏差较大。
从图中可以看出,在取得相同估计性能的条件下,MMSE 算法对信噪比的要求比LS 算法要低将近5dB 。
2
3456789101112
10
-1.4
10
-1.3
10
-1.2
10
-1.1
SNR ( dB )
S E R
plot of SNR and SER for an OFDM system with MMSE/LS estimator
SER-ls
SER-mmse
图3.2 不同信道估计算法下的误码性能
图3.2是基于块状导频方案下的信道估计算法的误符号性能。
由于MMSE 算法较LS 算法可以更加准确的跟踪信道的变化,从而保证的接收信息的可以更加准确的获取出来,误符号性能优于LS 算法。
510152025303540
10-2
10
-1
10
SNR ( dB )
B E R ( d B )
SNR and BER for an OFDM system in different insert algorithm
LS-Linear
LS-SecondOrder LS-Spline
图3.3 不同插值算法下的误码性能
图3.3是对不同插值算法下的误码性能的对比分析。
从仿真结果可以看出高阶插值算法带给系统更好的误符号性能。
总结
本文首先介绍了OFDM 中的信道估计算法,重点研究了LS 和MMSE 基于导频的信道估计算法,给出了两种算法的算法设计,并分析比较了算法性能。
此外,还研究了不同的插值算法对OFDM 系统的误码性能影响。
最后对两种算法的性能进行了MATLAB 仿真,仿真结果表明MMSE 算法较LS 算法可以更加准确的跟踪信道的变化,从而保证更加准确地估计出信道信息,而高阶的插值算法能有效提高系统误码性能。
参考文献
[1] 高蕊.LTE 物理层上行关键技术研究.西安:西安科技大学.2009:11~14
[2] 王东.基于OFDM 系统的信道估计算法的研究.西安:西安电子科技大学.2008 [3] 张继东,郑宝玉..基于导频的OFDM 信道估计及其研究进展.通信学报.2003.11 [4] 孙锴,黄威 译.MIMO-OFDM 无线通信技术及MATLAB 实现.北京:电子工业出版社,2013年6月
附录 仿真代码
(1)对比MSE 性能仿真代码:
clc;
clear all;
%产生一个原始的训练序列
%选用BPSK调制,符号:+1/-1
X=zeros(64,64);
d=rand(64,1);
for i=1:64
if(d(i)>=0.5)
d(i)=+1;
else
d(i)=-1;
end
end
for i=1:64
X(i,i)=d(i);
end
%计算矩阵G(信道矩阵)
tau=[0.5 3.5];%The fractionally spaced taps..
%Generation of the G matrix...
for k=1:64
s=0;
for m=1:2
s=s+(exp(-j*pi*(1/64)*(k+63*tau(m))) * (( sin(pi*tau(m)) /
sin(pi*(1/64)*(tau(m)-k)))));
%Go through the above cited paper for the theory behind the formula end
g(k)=s/sqrt(64);
end
G=g';%Thus, the channel vector is evaluated..
H=fft(G);% In the freq domain..
u=rand(64,64);
F=fft(u)*inv(u);% 'F' is the twiddle factor matrix.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Evaluation of the autocovariance matrix(自协方差矩阵) of G-Rgg %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gg=zeros(64,64);
for i=1:64
gg(i,i)=G(i);
end
gg_myu = sum(gg, 1)/64;
gg_mid = gg - gg_myu(ones(64,1),:);
sum_gg_mid= sum(gg_mid, 1);
Rgg = (gg_mid' * gg_mid- (sum_gg_mid' * sum_gg_mid) / 64) / (64 - 1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Running for a dozen trials to try and average out the results..
for m=1:12
for n=1:5
SNR_send=2*n;
XFG=X*H;
n1=ones(64,1);
n1=n1*0.000000000000000001i;
%Just to ensure that the function awgn adds 'complex gaussian noise'.. noise=awgn(n1,SNR_send);
variance=var(noise);
N=fft(noise);
Y=XFG+N;
%Evaluating the mean squared error for the LS estimator..
mean_squared_error_ls=LS_MSE_calc(X,H,Y);
%Evaluating the mean squared error for the MMSE estimator..
mean_squared_error_mmse=MMSE_MSE_calc(X,H,Y,Rgg,variance);
SNR(n)=SNR_send;
mmse_mse(m,n)=mean_squared_error_mmse;
ls_mse(m,n)=mean_squared_error_ls;
end;
end;
ls_mse
mmse_mse
mmse_mse_ave=mean(mmse_mse);
ls_mse_ave=mean(ls_mse);
%作图:
semilogy(SNR,mmse_mse_ave,'-r*');
hold on;
semilogy(SNR,ls_mse_ave,'-b*');
grid on;
xlabel('SNR(dB)');
ylabel('MSE-¾ù·½Îó²î');
legend('mmse-mse-ave','ls-mse-ave');
title('SNR and square MSE for an OFDM system with MMSE/LS estimator');
(2)对比SER仿真代码:
clc;
clear all;
%Generation of a naive training sequence..
%Assuming BPSK modulation ...symbols:+1/-1
X=zeros(64,64);
d=rand(64,1);
for i=1:64
if(d(i)>=0.5)
d(i)=+1;
else
d(i)=-1;
end
end
for i=1:64
X(i,i)=d(i);
end
%Calculation of G[The channel Matrix]
%The channnel is...
tau=[0.5 3.5]; %The fractionally spaced taps..
%Generation of the G matrix...
for k=1:64
s=0;
for m=1:2
s=s+(exp(-j*pi*(1/64)*(k+63*tau(m))) * (( sin(pi*tau(m)) /
sin(pi*(1/64)*(tau(m)-k)))));
%Go through the above cited paper for the theory behind the formula end
g(k)=s/sqrt(64);
end
G=g'; %Thus, the channel vector is evaluated..
H=fft(G); % In the freq domain..
XFG=X*H;
n1=ones(64,1);
n1=n1*0.000000000000000001i;%Just to ensure that the function awgn adds 'complex gaussian noise'..
noise=awgn(n1,8); %Assuming the 'channel learning' is happening at 8db..
variance=var(noise);
N=fft(noise);
Y=XFG+N; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Evaluation of the autocovariance matrix of G-Rgg %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gg=zeros(64,64);
for i=1:64
gg(i,i)=G(i);
end
gg_myu = sum(gg, 1)/64;
gg_mid = gg - gg_myu(ones(64,1),:);
sum_gg_mid= sum(gg_mid, 1);
Rgg = (gg_mid' * gg_mid- (sum_gg_mid' * sum_gg_mid) / 64) / (64 - 1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%OK..Now that we have the ingredients ready,lets move on and evaluate the estimated channels by the use of the LS and the MMSE algorithms.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EVALUATION OF Hls
%Hmmse=inv(X)*Y; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H_ls=(inv(X)) * Y;
Hls=zeros(64,64);
for i=1:64
Hls(i,i)=H_ls(i);
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EVALUATION OF Hmmse
%Hmmse=F*Rgg*inv(Rgy)*Y; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
u=rand(64,64);
F=fft(u)*inv(u); %The 64 X 64 twiddle factor matrix..
I=eye(64,64);
Rgy=Rgg * F'* X';
Ryy=X * F * Rgg * F' *X' + variance * I;
for i=1:64
yy(i,i)=Y(i);
end
Gmmse=Rgy * inv(Ryy)* Y;
H_mmse=fft(Gmmse);
for i=1:64
Hmmse(i,i)=H_mmse(i);
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Fine..the channels have been estimated , now is the time for real time simulations..
for n=1:6
SNR_send=2*n;
error_count_ls=0; %Clear the error_count..
error_count_mmse=0; %Clear the error_count..
%Sending around 1000 data vectors through the channel
%Roughly like 1000 simulations per SNR reading..
for c=1:1000
%Generate Random Data[i/p matrix..]
X=zeros(64,64);
d=rand(64,1);
for i=1:64
if(d(i)>=0.5)
d(i)=+1;
else
d(i)=-1;
end
end
for i=1:64
X(i,i)=d(i);
end
XFG=X*H; %Let it go through the actual channel...
n1=ones(64,1);
n1=n1*0.000000000000000001i;%Just to ensure that the function awgn adds 'complex gaussian noise'..
noise=awgn(n1,SNR_send);
variance=var(noise);
N=fft(noise);
Y=XFG+N; %o/p got by the receiver...
%The receiver begins.... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I:LS ESTIMATOR BASED RECEIVER: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %I(k) represents the decision matrix..
I=inv(Hls)* Y;
for k=1:64
if(real(I(k))>0)%Putting it through a slicer
I(k)=1;
else
I(k)=-1;
end
end
for k=1:64
if(I(k)~=d(k))
error_count_ls=error_count_ls+1;
end
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I:MMSE ESTIMATOR BASED RECEIVER: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %I(k) represents the decision matrix..
I=inv(Hmmse)* Y;
for k=1:64
if(real(I(k))>0)%Putting it through a slicer
I(k)=1;
else
I(k)=-1;
end
end
for k=1:64
if(I(k)~=d(k))
error_count_mmse=error_count_mmse+1;
end
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End %End of the 1000 run simulation..
ser_ls(n)=error_count_ls/64000;
ser_mmse(n)=error_count_mmse/64000;
ser_ls
ser_mmse
SNR(n)=SNR_send;
end;
%作图:
semilogy(SNR,ser_ls,'-r*');
hold on;
semilogy(SNR,ser_mmse,'-b*');
grid on;
xlabel('SNR ( dB )');
ylabel('SER');
legend('SER-ls','SER-mmse');
title('plot of SNR and SER for an OFDM system with MMSE/LS estimator');。