CSI笔记【12】:阵列信号处理及MATLAB实现(第2版)阅读随笔(四)
CSI筆記【12】:陣列信號處理及MATLAB實現(xiàn)(第2版)閱讀隨筆(四)
- Chapter6 陣列信號處理常用MATLAB代碼
- (1).LCMV波束形成MATLAB程序:
- (2).LMS自適應(yīng)波束形成MATLAB程序:
- (3).root-MUSIC算法MATLAB程序:
- (4).譜峰搜索傳播算子算法MATLAB程序:
- Reference
Chapter6 陣列信號處理常用MATLAB代碼
(1).LCMV波束形成MATLAB程序:
“線性約束最小方差準則(LCMV)”在對有用信號形式和信號來向完全未知情況下,在某種約束條件下使陣列輸出的方差最小。
"LCMV"方法的代價函數(shù)可以表示為 J(ω)=ωHRωJ(\omega)=\omega^HR\omegaJ(ω)=ωHRω,約束條件為 ωHa(θ)=f\omega^Ha(\theta)=fωHa(θ)=f。取 f=1f=1f=1,得到最佳解為 ω=R?1c[cHR?1c]?1\omega=R^{-1}c[c^HR^{-1}c]^{-1}ω=R?1c[cHR?1c]?1。
clc; close all clear all; M=18; % 天線數(shù) L=100; % 快拍數(shù) thetas=10; % 信號入射角度 thetai=[-30 30]; % 干擾入射角度 n=[0:M-1]'; % 構(gòu)造一個一維列矩陣 vs=exp(-1i*pi*n*sin(thetas/180*pi)); % 信號方向矢量 vi=exp(-1i*pi*n*sin(thetai/180*pi)); % 干擾方向矢量 f=16000; % 載波頻率 t=[0:1:L-1]/200; % 構(gòu)造時間變量 snr=10; % 信噪比 inr=10; % 干噪比 xs=sqrt(10^(snr/10))*vs*exp(1i*2*pi*f*t); % 構(gòu)造有用信號 xi=sqrt(10^(inr/10)/2)*vi*[randn(length(thetai),L)+1i*randn(length(thetai),L)]; % 構(gòu)造干擾信號 noise=[randn(M,L)+1i*randn(M,L)]/sqrt(2); % 噪聲 X=xi+noise; % 含噪信號 R=X*X'/L; % 構(gòu)造協(xié)方差矩陣 wop1=inv(R)*vs/(vs'*inv(R)*vs); % 波束形成 sita=48*[-1:0.001:1]; % 掃描方向范圍 v=exp(-1i*pi*n*sin(sita/180*pi)); % 掃描方向向量 B=abs(wop1'*v); % 求不同角度的增益 plot(sita,20*log10(B/max(B)),'k'); title('波束圖');xlabel('角度/degree');ylabel('波束圖/dB'); grid on axis([-48 48 -50 0]); hold off figure1 LCMV波束形成算法仿真結(jié)果(2).LMS自適應(yīng)波束形成MATLAB程序:
“最小均方算法(LMS)”采用迭代模式,在每個迭代步驟 nnn 時刻的權(quán)向量加上一個校正量后,即組成 n+1n+1n+1 時刻的權(quán)向量,用它逼近最佳權(quán)向量。
clear all close all clc M=16; % 天線數(shù) K=2; % 信源數(shù) theta=[0 30]; % 信號入射角度 d=0.3; % 天線間距 N=500; % 采樣數(shù) Meann=0; varn=1; % 噪聲均值、方差 SNR=20; INR=20; pp=zeros(100,N);pp1=zeros(100,N); rvar1=sqrt(varn)*10^(SNR/20); % 信號功率 rvar2=sqrt(varn)*10^(INR/20); % 干擾功率 for q=1:100s=[rvar1*exp(1i*2*pi*(50*0.001*[0:N-1]));rvar2*exp(1i*2*pi*(100*0.001*[0:N-1]+rand))]; % 生成源信號A=exp(-1i*2*pi*d*[0:M-1].'*sin(theta*pi/180)); % 方向向量e=sqrt(varn/2)*(randn(M,N)+1i*randn(M,N)); % 噪聲Y=A*s+e; % 接收信號% LMS算法L=200;de=s(1,:);mu=0.0005;w=zeros(M,1);for k=1:Ny(k)=w'*Y(:,k); % 預(yù)測下一個采樣和誤差e(k)=de(k)-y(k); % 誤差w=w+mu*Y(:,k)*conj(e(k)); % 調(diào)整權(quán)向量end end% 波束形成 beam=zeros(1,L); for i=1:La=exp(-1i*2*pi*d*[0:M-1].'*sin(-pi/2+pi*(i-1)/L));beam(i)=20*log10(abs(w'*a)); end% 作圖 figure angle=-90:180/200:(90-180/200); plot(angle,beam); grid on xlabel('方向角/degree'); ylabel('幅度響應(yīng)/dB'); figure for k=1:Nen(k)=(abs(e(k))).^2; end semilogy(en);hold on xlabel('迭代次數(shù)'); ylabel('MSE');運行結(jié)果:
figure2 LMS自適應(yīng)波束形成算法仿真結(jié)果 figure3 LMS自適應(yīng)波束形成算法誤差圖(3).root-MUSIC算法MATLAB程序:
求根"MUSIC",即"root-MUSIC"算法是"MUSIC"算法的一種多項式求根形式,其基本思想是"Pisarenko"分解。相比于"MUSIC"算法,"root-MUSIC"算法無須譜峰搜索,降低了復(fù)雜度。
clear all close all derad=pi/180; % 角度->弧度 radeg=180/pi; % 弧度->角度 twpi=2*pi; kelm=8; % 陣元數(shù) dd=0.5; % 陣元間距 d=0:dd:(kelm-1)*dd; iwave=3; % 信源數(shù) theta=[10 20 30]; % 波達方向 snr=10; % 信噪比 n=200; % 采樣數(shù) A=exp(-1i*twpi*d.'*sin(theta*derad)); % 方向向量 S=randn(iwave,n); % 信源信號 X0=A*S; % 接收信號 X=awgn(X0,snr,'measured'); % 添加噪聲 Rxx=X*X'; % 計算協(xié)方差矩陣 InvS=inv(Rxx); [EVx,Dx]=eig(Rxx); % 特征值分解 EVAx=diag(Dx)'; [EVAx,Ix]=sort(EVAx); % 特征值從小到大排序 EVAx=fliplr(EVAx); % 左右翻轉(zhuǎn),從大到小排序 EVx=fliplr(EVx(:,Ix));% root-MUSIC Unx=EVx(:,iwave+1:kelm); % 噪聲子空間 syms z; pz=z.^([0:kelm-1]'); pz1=(z^(-1)).^([0:kelm-1]); fz=z.^(kelm-1)*pz1*Unx*Unx'*pz; % 構(gòu)造多項式 a=sym2poly(fz); % 符號多項式->數(shù)值多項式 zx=roots(a); % 求根 rx=zx'; [as,ad]=(sort(abs((abs(rx)-1)))); DOAest=asin(sort(-angle(rx(ad([1,3,5])))/pi))*180/pi運行結(jié)果:
DOAest=9.9925 20.1515 29.9966(4).譜峰搜索傳播算子算法MATLAB程序:
譜峰搜索傳播算子算法利用方向向量和 QQQ 矩陣的正交性構(gòu)造譜函數(shù),通過一維譜峰搜索,得到波達方向估計。相比于“MUSIC”算法,它無須對接數(shù)據(jù)的協(xié)方差矩陣進行特征值分解,降低了復(fù)雜度。算法的主要步驟如下:
運行結(jié)果:
figure4 譜峰搜索傳播算子算法仿真運行結(jié)果Reference
[1] 陣列信號處理及MATLAB實現(xiàn)(第2版)?\copyrightc? 張小飛 李建峰 徐大專 等 著.
總結(jié)
以上是生活随笔為你收集整理的CSI笔记【12】:阵列信号处理及MATLAB实现(第2版)阅读随笔(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小谈一下Qt的绘制引擎(结尾有彩蛋)
- 下一篇: PLM Agile BOM表结构笔记