www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/LS_QR_16.m
clc clear all close all fs=20e6; % sampling freq fc=0; % N=1200; NN=700; load s1.mat % 训练序列 load s2.mat % interfere signal,AM load s4.mat % load s6.mat sss=[s4(1:NN) s1(1:N) s4(1:1e4)]; % 发射数据 s1训练序列,s4有用信息 s3=hilbert(s2); % change to complex %s3、s6干扰信号 sir=-10; pii=10^(-sir/20); s=[sss;pii*s3(1:N+NN+1e4)]; %s3干扰信号 % a1=60; %有用信号方向 % a2=20; % 干扰信号方向 20 % fai1=40;%有用信号俯仰角 % fai2=10;% 干扰信号俯仰角 10 a1=120; %有用信号方向 120 a2=90; % 干扰信号方向 90 fai1=20;%有用信号俯仰角 20 fai2=60;% 干扰信号俯仰角 60 NTrial=1 %试验次数 for nTrial = 1:NTrial M=4; a11=exp(-j*pi*[0:M-1]'*(cos(a1*pi/180)*cos(fai1*pi/180))); a22=exp(-j*pi*[0:M-1]'*(sin(fai1*pi/180))); a=kron(a11,a22); %有用信号导向矢量 b11=exp(-j*pi*[0:M-1]'*(cos(a2*pi/180)*cos(fai2*pi/180))); b22=exp(-j*pi*[0:M-1]'*(sin(fai2*pi/180))); b=kron(b11,b22); %干扰信号导向矢量 % c=exp(-j*pi*[0:M-1]'*sin((a1+5)*pi/180)); A=[a,b]; snr=10; % snr: in dB % randn('state',000) x=A*s+10^(-snr/20)*randn(4*M,N+NN+1e4); x=floor(2^10*x); K=400; %一个周期的采样点 K1=128; K2=250; % 参与LS运算的快拍数 gold_rate=6.4*1e6; w0=eye(4*M,1); t1=0; % 采样开始时刻, 20 samples shift T1=5e-3; % 采样持续时间 m=0; %--------xiangguan LS ------------ for n=1:6 y=w0'*x(:,1+(n-1)*K:K+(n-1)*K); [yy,ptinit1]=xiangguan(y,fs,gold_rate,1,K,8,K1); % ptinit1=ptinit1+3; aa(n)=max(abs(yy)); if aa(n)>4 delay1(n)=ptinit1/fs; sr=signalgen(1,t1,fs,T1,delay1(n),fc,gold_rate,K1); break end end % end of xiangguan r=sr(1:K2); ADData=x(:,1+(n-1)*K:K2+(n-1)*K); SprMseqLocal=r; NLS=K2; NULA=4*M; RxFloor = ADData(:,1:NLS)*ADData(:,1:NLS)'; pFloor = ADData(:,1:NLS)*SprMseqLocal(1:NLS)'; %%%%%%%%%%%%%%%%%%均方域矩阵直接求逆%%%%%%%%%% p=x(:,1+(n-1)*K:K2+(n-1)*K)*r'; R_1=floor((x(:,1+(n-1)*K:K2+(n-1)*K))*(x(:,1+(n-1)*K:K2+(n-1)*K))'); w_shift=0; w=((2^w_shift*inv(R_1))*p); % tic w_cholesky=zxg_16(R_1,p,NLS); % toc %% 按行逐列地清零,变成三角阵,与快拍进来的次序等同(行Nrow>列Nclo) ADData1 = ADData.'; Rx =ADData1(1:NLS, 1:NULA); sHous = floor(Rx'*SprMseqLocal(1:NLS)'/2^4); % 需要取共轭 %%%------------------------------定点--------------------------------- [Nrow, Nclo] = size(Rx); Q = eye(Nrow); T = zeros(2); B = Rx(1, :); %%%%%%%%%%%%%%%%%%%%%%%%%----- Householder变换-----%%%%%%%%%%%%%%%%%%%%%%%%% H = eye(Nrow); NA = 16; B = Rx; % B = floor(2^NA * B); B = floor(B); for k=1:Nclo e1 = [1; zeros(Nrow-k,1)]; alpha1 = norm(B(k:Nrow, k))*B(k, k)/norm(B(k:Nrow, k)'*e1); % 使得alpha1*B(:,1)'*e1为实数 alpha1 = floor(alpha1); b1(k) = log2(max(max(abs(alpha1)))); u1_tmp = B(k:Nrow, k) - alpha1*e1; u1_tmp = floor(u1_tmp); b2(k) = log2(max(max(abs(u1_tmp)))); u1 = u1_tmp; b3(k) = log2(max(max(abs(u1)))); H1 = zeros(Nrow); H1(1:k-1, 1:k-1) = 2^NA * eye(k-1); % H1(k:Nrow, k:Nrow) = 2^NA * (eye(Nrow-k+1) - 2*u1*u1'/(norm(u1_tmp))^2); H1(k:Nrow, k:Nrow) = 2^NA * eye(Nrow-k+1) - 2^NA *2*u1*u1'/(norm(u1_tmp))^2; H1(k:Nrow, k:Nrow) = floor(H1(k:Nrow, k:Nrow)); H = floor(H1*H/2^NA); B = floor(H1*B/2^NA); end R=B; Q=H; maxv=max(max(Q*R-Rx)); %%%---------------------------共同部分----------------------------------------- %%% 前向回代求y C = R'; C = C(1:Nclo, 1:Nclo); %NA为C扩大的倍数 NB=7; yHous = zeros(Nclo, 1); yHous(1) = 2^NB * sHous(1)/C(1, 1); yHous(1) = floor(2^NB*yHous(1)); b5(1) = log2(max(max(abs(yHous(1))))); for k=2:Nclo yHous(k) = floor(2^NB*2^NB*sHous(k)/C(k,k)-C(k,1:k-1)*yHous(1:k-1)/C(k,k)); % yHous(k) = 2^NB*sHous(k)/C(k,k)-C(k,1:k-1)*(yHous(1:k-1)/2^NB)/C(k,k); % yHous(k) = floor(2^NB * yHous(k)); b5(k) = log2(max(max(abs(yHous(k))))); end %%后向回代求w WHous = zeros(Nclo,1); NC = 18; WHous(Nclo) = yHous(Nclo)/R(Nclo, Nclo); WHous(Nclo) = floor(2^NC * WHous(Nclo)); for k = Nclo-1:-1:1 WHous(k) = floor(2^NC * (yHous(k)/R(k, k))-R(k, k+1:Nclo)*(WHous(k+1:Nclo)/R(k, k))); b6(k) = log2(max(max(abs(WHous(k))))); end WHous = conj(WHous); w44=reshape(WHous,4,4); Q=300; theta=linspace(0,pi,Q); fai=linspace(0,pi/2,Q); A=exp(-j*pi.*[0:M-1]'*(kron(cos(theta),cos(fai)))); B=exp(-j*pi.*[0:M-1]'*(kron(ones(1,Q),sin(fai)))); for i=1:4 Grow(i,:)=conj(w44(i,:))*A; Gcol(i,:)=w44(:,i)'*B; end GROW=sum(Grow); GCOL=sum(Gcol); G1=GROW.*GCOL; G1=reshape(G1,Q,Q); figure(1), mesh(theta*180/pi,fai*180/pi,20*log10(abs(G1)./max(max(abs(G1))))) ylabel('仰角 (度)'); xlabel('方位角 (度)'); zlabel('增益 (dB)'); hold on plot3([a1,a1],[fai1,fai1],[-50,0],'k','linewidth',1.5) plot3([a2,a2],[fai2,fai2],[-50,0],'linewidth',1.5) w_QR=WHous/norm(WHous); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% w44_1=reshape(w_cholesky,4,4); for i=1:4 Grow_1(i,:)=conj(w44_1(i,:))*A; Gcol_1(i,:)=w44_1(:,i)'*B; end GROW_1=sum(Grow_1); GCOL_1=sum(Gcol_1); G1_1=GROW_1.*GCOL_1; G1_1=reshape(G1_1,Q,Q); figure(2), mesh(theta*180/pi,fai*180/pi,20*log10(abs(G1_1)./max(max(abs(G1_1))))) ylabel('仰角 (度)'); xlabel('方位角 (度)'); zlabel('增益 (dB)'); hold on plot3([a1,a1],[fai1,fai1],[-50,0],'k','linewidth',1.5) plot3([a2,a2],[fai2,fai2],[-50,0],'linewidth',1.5) w_ls=w_cholesky/norm(w_cholesky); SINR_LS_QR(nTrial) = 10*log10((norm(w_QR'*a))^2/(((norm(w_QR'*b))^2*10^((-sir)/10)+10^(-snr/10)))); SINR_LS_cholesky(nTrial) =10*log10((norm(w_ls'*a))^2/(((norm(w_ls'*b))^2*10^((-sir)/10)+10^(-snr/10)))); end