導航:首頁 > 源碼編譯 > mmse信道估計演算法

mmse信道估計演算法

發布時間:2023-11-28 21:56:01

1. MMSE信道估計

在線性最小均方誤差估計(LMMSE)中,採用的准則函數是統計均方誤差,首先將待定信道估計值表示為:

其中W是待定的加權系數矩陣,這樣就是要估計這些權系數,LMMSE估計的准則函數如下:

對W求偏導,並令其等於0,利用正交性原理,可得:



從而得到G的LMMSE為

最後得到H的估計為

下圖是在EVA信道條件下,信道估計技術與均衡技術的性能比較圖,其中調制方式為16-QAM,編碼採用1/2碼率的Turbo碼。

由圖可見,在多徑信道條件下,LMMSE信道估計性能還是明顯要優於LS信道估計。也可以看到在低信噪比條件下,性能並沒有很大改善,這時雜訊的影響佔了主要因素。如果在AWGN信道條件下,由於Turbo碼的存在,LS信道估計的性能在信噪比12dB的情況下已經不出現誤碼率,此時兩種信道估計的曲線相差不大,因此在本系統的信道條件下(信道條件為室內信道,信噪比14dB以上),採用LS信道估計已足夠。另外,這里由於天線間的干擾不存在,所以MMSE均衡和ZF均衡性能曲線幾乎重合。

考慮到可能存在的定時誤差,將導致相位偏移,相位偏差是關於k的線性函數。採用跟蹤導頻做信道估計時,忽略相位雜訊的影響,採用線性內插時可將所有的相位偏移准確的估計出來,此時在頻域採用線性內插最合適。在室內信道條件下,能保證信噪比大於14dB,此時信道編碼可以完全正確解碼,因此頻域的信道估計方法採用LS演算法

在白高斯信道條件下,如果不存在定時誤差,估計出的信道應該是信道響應的實部近似平坦,虛部為零;若存在定時誤差,會使得估計出的信道有一定的相位偏轉,兩種情況下信道估計結果如下圖所示

上圖為信道估計值的星座圖,下圖為時域圖,時域圖中上圖為頻域內插之後的信道估計值的實部,下圖為虛部,前600個子載波為正頻率,後600個子載波為負頻率。第一幅圖為定時准確的情況,可見信道估計值仍然存在相位雜訊;第二幅圖是定時點出現誤差的情況,此時引入的相位偏差會疊加到相位雜訊上,如果定時偏差在3個樣點以內,將引入小於2pi的相位偏轉,該圖的定時偏差剛好為3個樣點。

實際信道為室內信道,時域上信道變化緩慢,因此可採用最鄰近插值的方法估計其他未插導頻的符號。此時認為在一個時隙內的信道響應近似不變。

因此信道估計演算法頻域採用線性插值,時域採用鄰近插值。位於天線埠2上的導頻處未插入任何導頻信息,可以利用此特性來做信噪比估計,即使用每個時隙第6個符號上的導頻計算信號功率,第7個符號上的導頻計算雜訊功率。

考慮到存在一定的相位雜訊,使得每個符號的星座圖有一定的相位偏轉,一個主要的相位雜訊是殘余頻偏的影響。假設在頻偏補償之後殘余頻偏還有f,則使用上述時域信道內插方法使得這些頻偏會累計到一個時隙上。假設最後的殘余頻偏為f_delta,則一個時隙內每個符號殘余相偏為

由於時域上信道估計是直接擴展得到的,所以殘余相偏會因為時間的累計而增加。累計的間隔為一個OFDM符號長度(加CP)。整個下行子幀所有OFDM符號的相位偏轉如下圖所示:

每一個OFDM符號經歷相同的相位偏轉,當頻偏補償效果理想殘余頻偏為10Hz時,最大相偏約為0.01pi,實際信道下一個時隙的每個符號的星座圖相偏如下所示

2. 請問如何做信道估計中的MMSE估計

MMSE估計就是最小均方誤差估計,通過求得一個合適的信道沖擊響應(CIR),使得通過CIR計算出的接收數據與實際數據的誤差的均方和最小。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
我上個月剛做過基於塊狀導頻信息的LTE物理層上行信道的頻域信道估計以及信道均衡。

部分演算法如下(以下是基於單載波的)

假設循環前綴已經消除了實踐彌散信道帶來的符號間干擾,保證了子載波之間的正交性。並且信道為慢衰落信道,在一個OFDM符號內,可以認為保持不變。

均衡器接收到的信號可以表示為
y(t)=x(t)*h(t)+n(t)

y(t)為均衡器接收到的信號,h(t)為系統等效的沖擊響應,x(t)為原始的輸入信號,n(t)為系統中的雜訊。

信道估計的任務就是在已知發送參考信息的情況下,對接受到的參考信息進行分析,選擇合適的演算法得到參考信息的信道沖擊響應,即h(t),而數據信息的信道沖擊響應則可以通過插值得到。

1) 最小二乘估計(LS)
該演算法的目的是

有正交性原理,則可得LS估計

該估計為無偏估計,每估計一個新到衰落系數只需一次乘法,缺點是受雜訊影響較大。

2) 線性最小均方誤差估計(MMSE)
LMMSE估計屬於統計估計,需要對信道的二階統計量進行估計,利用信道相關性可以置信道雜訊提高估計性能。以最小均方誤差(MMSE)為准則,如下式:

為了降低計算的復雜度,一般將 用它的期望值 代替,信道性能不會產生明顯惡化,則上式可變為

其中 為一個僅與調試的星座的大小有關的值, 為平均信噪比。
該演算法的復雜度較高,隨著X的改變, 須不斷更新。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

不知道你的是物理模型和數據結構是什麼樣的,頻域估計還是時域估計,基於導頻信息還是盲信道估計?

____________________________________________
有點悲劇,Word裡面的公式我不知道怎麼插進來

3. MATLAB 程序詳解(關於波束形成)

你這里有兩個程序,第二個程序與第一個實質上是一樣的,區別就是信號與導向矢量的寫法有點不同,這里我就不注釋了。還有,我下面附了一段我自己的寫的程序,裡面有SIM演算法。G-S正交化演算法等。是基於圓陣形式的,你的演算法是基於線陣的,他們程序上的區別在於導向矢量的不同。我的演算法是某項目中的,保證好使。建議學習波束形成技術,注意把程序分塊,例如分成,求導向矢量;最優權值;形成波束等等。
程序如下:
4單元均勻線陣自適應波束形成圖
clear
clc
format long;
v=1;
M=4;
N=1000;%%%%%%%快拍數
f0=21*10^3;%%%%%%%%%%%信號與干擾的頻率
f1=11*10^3;
f2=15*10^3;
omiga0=2*pi*f0;%%%%%%%信號與干擾的角頻率
omiga1=2*pi*f1;
omiga2=2*pi*f2;
sita0=0.8; %信號方向
sita1=0.4; %干擾方向1
sita2=2.1; %干擾方向2
for t=1:N %%%%%%%%%%%%信號
adt(t)=sin(omiga0*t/(N*f0));
a1t(t)=sin(omiga1*t/(N*f1));
a2t(t)=sin(omiga2*t/(N*f2));
end
for i=1:M %%%%%%%%%%%%信號的導向矢量:線陣的形式
ad(i,1)=exp(j*(i-1)*pi*sin(sita0));
a1(i,1)=exp(j*(i-1)*pi*sin(sita1));
a2(i,1)=exp(j*(i-1)*pi*sin(sita2));
end
R=zeros(M,M);
for t=1:N
x=adt(t)*ad+a1t(t)*a1+a2t(t)*a2; %陣列對信號的完整響應
R=R+x*x';%信號的協方差矩陣
end
R=R/N;%%%%%%%%%協方差矩陣,所有快拍數的平均
miu=1/(ad'*inv(R)*ad);%%%%%%這個貌似是LMS演算法的公式,具體我記不太清,這里是求最優權值,根據這個公式求出,然後加權
w=miu*inv(R)*ad;
%%%%%%形成波束%%%%%%%%%%%%%%%%%%%
for sita=0:pi/100:pi
for i=1:M
x_(i,1)=exp(j*(i-1)*pi*sin(sita));
end
y(1,v)=w'*x_;%%%%%%%對信號進行加權,消除干擾
v=v+1;
end
y_max=max(y(:));%%%%%%%%%%%%%%%歸一化
y_1=y/y_max;
y_db=20*log(y_1);

sita=0:pi/100:pi;
plot(sita,y)
Xlabel(『sitaa』)
Ylabel(『天線增益db』)

4單元均勻線陣自適應波束形成
目標
clear
clc
format long;
v=1;
M=4;陣元數
N=100;
f0=21*10^3;
omiga0=2*pi*f0;
sita0=0.6;%信號方向
for t=1:N
adt(t)=sin(omiga0*t/(N*f0));
end
for i=1:M
ad(i,1)=exp(j*(i-1)*pi*sin(sita0));
end
R=zeros(4,4);
r=zeros(4,1);
for t=1:N
x=adt(t)*ad;
R=R+x*x.';
end
R=R/N;
miu=1/(ad.'*inv(R)*ad);
w=miu*inv(R)*ad;
for sita=0:pi/100:pi/2
for i=1:M
a(i,1)=exp(j*(i-1)*pi*sin(sita));
end
y(1,v)=w.'*a;
v=v+1;
end
sita=0:pi/100:pi/2;
plot(sita,y)
xlabel('sita')
ylabel('天線增益』)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%我的程序%%%%%%%%%%%%%%%
function jieshousignal
%期望信號數:1個
%干擾信號數:4個
%信噪比已知
%乾燥比已知
%方位角已知
clc;
clear all;
close all;
%//參數設置===========================================
www1=0;
www2=0;
www3=0;
% for rrr=1:16000
signal_num=1; %signal number
noise_num=5; %interference number
R0=0.6; %圓的半徑
SP=2000; %Sample number
N=8; %陣元數
snr=-10; %Signal-to-Noise
sir1=10; %Signal-to-Interference one
sir2=10; %Signal-to-Interference two
sir3=10; %Signal-to-Interf
sir4=10;
sir5=10;
%//================noise Power-to-signal Power====================
factor_noise_1=10.^(-sir1/10);
factor_noise_2=10.^(-sir2/10);
factor_noise_3=10.^(-sir3/10);
factor_noise_4=10.^(-sir4/10);
factor_noise_5=10.^(-sir5/10);
factor_noise_targe=10.^(-snr/10);

% //======================== ===============

d1=85*pi/180;%%干擾1的方位角
d2=100*pi/180;%干擾2的方位角
d3=147*pi/180;%干擾3的方位角
d4=200*pi/180;%干擾4的方位角
d5=250*pi/180;%干擾5的方位角
d6=150*pi/180;%目標的方位角

e1=15*pi/180;%%干擾1的俯仰角
e2=25*pi/180;%干擾2的俯仰角
e3=85*pi/180;%干擾3的俯仰角
e4=50*pi/180;%干擾4的俯仰角
e5=70*pi/180;%干擾5的俯仰角
e6=85*pi/180;%目標的俯仰角
% //====================目標信號==========================
t=1:1:SP;
fc=2e7;
Ts=1/(3e10);
S0=5*cos(2*pi*fc*t*Ts);%目標信號
for kk=1:N
phi_n(kk)=2*pi*(kk-1)/N;
end

%//====================操縱矢量==========================================
A=[conj(exp(j*2*pi*R0*cos(d6-phi_n)*sin(e6)));conj(exp(j*2*pi*R0*cos(d1-phi_n)*sin(e1)));conj(exp(j*2*pi*R0*cos(d2-phi_n)*sin(e2)));conj(exp(j*2*pi*R0*cos(d3-phi_n)*sin(e3)));conj(exp(j*2*pi*R0*cos(d4-phi_n)*sin(e4)));conj(exp(j*2*pi*R0*cos(d5-phi_n)*sin(e5)))]';
A1=[conj(exp(j*2*pi*R0*cos(d1-phi_n)*sin(e1)));conj(exp(j*2*pi*R0*cos(d2-phi_n)*sin(e2)));conj(exp(j*2*pi*R0*cos(d3-phi_n)*sin(e3)));conj(exp(j*2*pi*R0*cos(d4-phi_n)*sin(e4)));conj(exp(j*2*pi*R0*cos(d5-phi_n)*sin(e5)))]';

% //==========================================================Power of the interference
% // depending on the signal power and SIR
Ps1=0;
Ps2=0;
Ps3=0;
Ps4=0;
Ps5=0;
S1=zeros(1,SP);
S2=zeros(1,SP);
S3=zeros(1,SP);
S4=zeros(1,SP);
S5=zeros(1,SP);

Ps0=S0*S0'/SP; % signal power
Ps1=Ps0*factor_noise_1;
Ps2=Ps0*factor_noise_2;
Ps3=Ps0*factor_noise_3;
Ps4=Ps0*factor_noise_4;
Ps5=Ps0*factor_noise_5;
% //==========================干擾信號的隨機包絡=========================
S1=normrnd(0,sqrt(Ps1/2),1,SP)+j*normrnd(0,sqrt(Ps1/2),1,SP);
S2=normrnd(0,sqrt(Ps2/2),1,SP)+j*normrnd(0,sqrt(Ps2/2),1,SP);
S3=normrnd(0,sqrt(Ps3/2),1,SP)+j*normrnd(0,sqrt(Ps3/2),1,SP);
S4=normrnd(0,sqrt(Ps4/2),1,SP)+j*normrnd(0,sqrt(Ps4/2),1,SP);
S5=normrnd(0,sqrt(Ps5/2),1,SP)+j*normrnd(0,sqrt(Ps5/2),1,SP);
%//
S=[S0;S1;S2;S3;S4;S5];
SS1=[S1;S2;S3;S4;S5];

X=A*S;%信號加干擾
XX2=A1*SS1; %接收到的干擾
Pw_noise=sqrt(Ps0*factor_noise_targe/2);
a1=randn(N,SP);
a2=randn(N,SP);
a1=a1/norm(a1);
a2=a2/norm(a2);
W=Pw_noise*(a1+sqrt(-1)*a2);
X=X+W;

% //--------------------------SMI演算法----------------------------------------
Rd=X*S0'/SP;
R=X*X'/(SP*1);
Wc_SMI=pinv(R)*Rd./(Rd'*pinv(R)*Rd);%權向量
Wc_SMI=Wc_SMI/norm(Wc_SMI);
Y_SMI=Wc_SMI'*X; %SMI演算法恢復出來的信號

%//-------------------------------------GS演算法------------------
m=1;
for i=1:400:2000
X2(:,m)=XX2(:,i);
m=m+1;
end
a=zeros(1,8);
phi_n=zeros(1,8);
phi=0:pi/180:2*pi;
theta=0:pi/180:pi/2;
for kk=1:8
a(kk)=1;
phi_n(kk)=2*pi*(kk-1)/8;
end

x1=zeros(1,8);
x2=zeros(1,8);
x3=zeros(1,8);
x4=zeros(1,8);
x5=zeros(1,8);
x1=X2(:,1)';
x2=X2(:,2)';
x3=X2(:,3)';
x4=X2(:,4)';
x5=X2(:,5)';

Z1=x1;
Z1_inner_proct=Z1.*conj(Z1);
Z1_mode=sqrt(sum(Z1_inner_proct));
Y1=Z1./Z1_mode;

Inner_proct=sum(x2.*conj(Y1));
Z2=x2-Inner_proct*Y1;

Z2_inner_proct=sum(Z2.*conj(Z2));
Z2_mode=sqrt(Z2_inner_proct);
Y2=Z2./Z2_mode;

Inner_proct1=sum(x3.*conj(Y1));
Inner_proct2=sum(x3.*conj(Y2));
Z3=x3-Inner_proct1*Y1-Inner_proct2*Y2;

Z3_inner_proct=sum(Z3.*conj(Z3));
Z3_mode=sqrt(Z3_inner_proct);
Y3=Z3./Z3_mode;

Inner_proct1_0=sum(x4.*conj(Y1));
Inner_proct2_0=sum(x4.*conj(Y2));
Inner_proct3_0=sum(x4.*conj(Y3));
Z4=x4-Inner_proct1_0*Y1-Inner_proct2_0*Y2-Inner_proct3_0*Y3;

Z4_inner_proct=sum(Z4.*conj(Z4));
Z4_mode=sqrt(Z4_inner_proct);
Y4=Z4./Z4_mode;

Inner_proct1_1=sum(x5.*conj(Y1));
Inner_proct2_1=sum(x5.*conj(Y2));
Inner_proct3_1=sum(x5.*conj(Y3));
Inner_proct4_1=sum(x5.*conj(Y4));
Z5=x5-Inner_proct1_1*Y1-Inner_proct2_1*Y2-Inner_proct3_1*Y3-Inner_proct4_1*Y4;

Z5_inner_proct=sum(Z5.*conj(Z5));
Z5_mode=sqrt(Z5_inner_proct);
Y5=Z5./Z5_mode;
%Y1
%Y2
%Y3
%Y4
%Y5
w0=zeros(1,8);
w=zeros(1,8);
for mm=1:8;
w0(mm)=exp(-j*2*pi*R0*cos(d6-phi_n(mm))*sin(e6));
end
dd1=sum(w0.*conj(Y1))*Y1;
dd2=sum(w0.*conj(Y2))*Y2;
dd3=sum(w0.*conj(Y3))*Y3;
dd4=sum(w0.*conj(Y4))*Y4;
dd5=sum(w0.*conj(Y5))*Y5;
w=w0-dd1-dd2-dd3-dd4-dd5;
Wc_GS=w;
Wc_GS=Wc_GS/(norm(Wc_GS));
Y_GS=Wc_GS*X; %GS演算法恢復出來的圖像

%//----------------------------------MMSE演算法-----------------------
Rd=X*S0'/SP;
R=X*X'/(SP*1);
Wc_MMSE=pinv(R)*Rd;
Wc_MMSE=Wc_MMSE/norm(Wc_MMSE);
Y_MMSE=Wc_MMSE'*X; %MMSE演算法恢復出來的信號
S0=S0/norm(S0);
Y_GS=Y_GS/norm(Y_GS);
Y_SMI=Y_SMI/norm(Y_SMI);
Y_MMSE=Y_MMSE/norm(Y_MMSE);

% figure(1)
% plot(real(S0));
% title('原始信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(2)
% plot(real(Y_SMI));
% title('運用SMI演算法處理出的信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(3)
% plot(real(Y_GS));
% title('運用G-S演算法處理出的信號');
% xlabel('采樣快拍數');
% ylabel('信號幅度');
% figure(4)
% plot(real(Y_MMSE));
% for i=1:SP
% ss(i)=abs(S0(i)-Y_SMI(i))^2;
% end
% q_1=mean(ss);
% for i=1:SP
% ss1(i)=abs(S0(i)-Y_GS(i))^2;
% end
% q_2=mean(ss1);
% for i=1:SP
% ss2(i)=abs(S0(i)-Y_MMSE(i))^2;
% end
% q_3=mean(ss2);
%
% www1=www1+q_1;
% www2=www2+q_2;
% www3=www3+q_3;
% end
% www1/16000
% www2/16000
% www3/16000

phi=0:pi/180:2*pi;
theta=0:pi/180:pi/2;

%
% % //------------------------ 形成波束-----------------------------------------
F_mmse=zeros(91,361);
F_smi=zeros(91,361);
F_gs=zeros(91,361);
for mm=1:91
for nn=1:361
p1=sin(theta(mm));
p2=cos(phi(nn));
p3=sin(phi(nn));

q1=sin(e6);
q2=cos(d6);
q3=sin(d6);
for hh=1:8
w1=cos(phi_n(hh));
w2=sin(phi_n(hh));
zz1=q2*w1+q3*w2;
zz2=p2*w1+p3*w2;
zz=zz2*p1-zz1*q1;
F_mmse(mm,nn)= F_mmse(mm,nn)+conj(Wc_MMSE(hh))*(exp(j*2*pi*R0*(zz2*p1)));
F_smi(mm,nn)=F_smi(mm,nn)+conj(Wc_SMI(hh))*(exp(j*2*pi*R0*(zz2*p1)));
F_gs(mm,nn)=F_gs(mm,nn)+conj((Wc_GS(hh))')*(exp(j*2*pi*R0*(zz2*p1)));

end
end
end

F_MMSE=abs(F_mmse);
F_SMI=abs(F_smi);
F_GS=abs(F_gs);
figure(5)
mesh(20*log10(F_MMSE))
figure(6)
mesh(20*log10(F_SMI))
title('SMI演算法波束形成圖');
xlabel('方位角');
ylabel('俯仰角');
zlabel('幅度/dB');
figure(7)
mesh(20*log10(F_GS))
title('G-S演算法波束形成圖');
xlabel('方位角');
ylabel('俯仰角');
zlabel('幅度/dB');

4. 請問下誰有MIMO系統中的ML、MMSE或者ZF等檢測演算法的matlab代碼呀小妹急需使用,非常感謝,非常感謝呀!

pudn上面隨便咦搜就一大堆,
不過看別人的代碼真的很費勁,有些人的思維你真的沒法理解。
還不如自己搞懂公式了自己來。

閱讀全文

與mmse信道估計演算法相關的資料

熱點內容
命令方塊怎麼調鍵盤 瀏覽:841
不把密碼存在伺服器上怎麼辦 瀏覽:398
怎麼讓指令方塊的命令消失 瀏覽:543
用單片機做plc 瀏覽:404
雲伺服器進入子目錄命令 瀏覽:795
伺服器機櫃如何配電 瀏覽:578
怎麼刪除iphone資源庫里的app 瀏覽:940
pdf魚 瀏覽:648
單片機pcf8591什麼作用 瀏覽:805
sql命令學院 瀏覽:283
加密軟體在電腦那個盤 瀏覽:988
android獲取外部存儲 瀏覽:573
怎麼查自己家的伺服器地址 瀏覽:858
編程c語言工作好不好 瀏覽:569
單片機焊接地怎麼連接 瀏覽:694
游戲源碼怎麼抓 瀏覽:216
程序員幫大家引走怪物 瀏覽:16
手機網頁小游戲源碼 瀏覽:513
戰地一伺服器怎麼設置管理員 瀏覽:396
數控車床編程可以上班嗎 瀏覽:460