声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1385|回复: 5

[综合讨论] LMS、RLS和SMI这三个程序该如何改

[复制链接]
发表于 2007-4-29 08:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
现有三个程序,都是基于均匀线阵的,大家讨论一下该如何改成非均匀的
%LMS
clear all;
close all;
clc;
f1=0;
f2=0;
f3=2;
f4=130;
global f0;
f0=100e6;
d1=60*pi/180;
d2=-60*pi/180;
d3=-40*pi/180;
d4=20*pi/180;
SP=1000;%采样点数
N=16;%阵元数
A=[conj(exp(j*(0:N-1)*pi*sin(d1)));conj(exp(j*(0:N-1)*pi*sin(d2)));conj(exp(j*(0:N-1)*pi*sin(d3)));conj(exp(j*(0:N-1)*pi*sin(d4)))]';%A为阵列
Ts=1/(300e3);%采样率300kHz
y1=50*Ts;
y2=100*Ts;
y3=120*Ts;
y4=200*Ts;
t=linspace(Ts,SP*Ts,SP);
Ps4=0;
K=200;
%w=zeros(N,K);
for n=1:SP
   S1(1,n)=s(t(1,n)-y1)*exp(-j*2*pi*f1*t(1,n));%直达波
   S2(1,n)=s(t(1,n)-y2)*exp(-j*2*pi*f2*t(1,n));%地反射
   S3(1,n)=s(t(1,n)-y3)*exp(-j*2*pi*f3*t(1,n));%地物反射
   S4(1,n)=s(t(1,n)-y4)*exp(-j*2*pi*f4*t(1,n));%目标反射
   Ps4=Ps4+(abs(S4(1,n)))^2;
end
Ps=N^2*Ps4/SP;
S=[S1;S2;S3;S4];
M=[1e5 1e2 1e3 1];%幅度
M=diag(M);
SNR=2;

Pn=Ps/(10^(N*SNR/10));%噪声功率
Wc=zeros(N,200);
e=zeros(SP,1);%%%%
y=zeros(SP,1);%%%%
S1=1e5*S1;
for i=1:200
noise=wgn(N,SP,10*log10(Pn),'complex');
X=A*M*S+noise;
    %d=zeros(1,SP);
    w1=zeros(N,1);
    y(1)=w1'*X(:,1);
    e(1)=S1(:,1)-y(1);
  for n=2:SP
     w1=w1+0.00000000000005*X(:,n-1)*conj(e(n-1));
     y(n)=w1'*X(:,n);
     e(n)=S1(1,n)-y(n);
     
  end
  
  Wc(:,i)=w1;
  
%   figure;%%%
%   plot(1:SP,abs(e));%%%
%   title('error');%%%
  
end
  Wc=sum(Wc,2)/200;%求均值
Y=Wc'*X;
cc=0;
for d=-pi/2:0.01:pi/2
    cc=cc+1;
A1(:,cc)=[exp(j*(0:N-1)*pi*sin(d))].';
y_d(1,cc)=Wc'*A1(:,cc);
end
d=-pi/2:0.01:pi/2;
d=d.*(180/pi);
subplot(121);
plot(d,10*log10(abs(y_d).^2));grid on;
title('阵列输出功率增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出功率增益(dB)');
subplot(122);
plot(d,abs(y_d));grid on;
title('阵列输出幅度增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出幅度增益(dB)');

[ 本帖最后由 eight 于 2007-11-15 13:03 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-4-29 08:43 | 显示全部楼层

%RLS,forgeting facter==1

%RLS,forgeting facter==1
clear all;
close all;
clc;
f1=0;
f2=0;
f3=2;
f4=130;
global f0;
f0=100e6;
d1=60*pi/180;
d2=-60*pi/180;
d3=-40*pi/180;
d4=20*pi/180;
SP=2000;%采样点数
N=16;%阵元数
A=[conj(exp(j*(0:N-1)*pi*sin(d1)));conj(exp(j*(0:N-1)*pi*sin(d2)));conj(exp(j*(0:N-1)*pi*sin(d3)));conj(exp(j*(0:N-1)*pi*sin(d4)))]';%A为阵列
Ts=1/(300e3);%采样率300kHz
y1=500*Ts;
y2=100*Ts;
y3=120*Ts;
y4=200*Ts;
t=linspace(Ts,SP*Ts,SP);
Ps1=0;
K=200;
%w=zeros(N,K);
for n=1:SP
   S1(1,n)=s(t(1,n)-y1)*exp(-j*2*pi*f1*t(1,n));%目标反射
   S2(1,n)=s(t(1,n)-y2)*exp(-j*2*pi*f2*t(1,n));%地反射
   S3(1,n)=s(t(1,n)-y3)*exp(-j*2*pi*f3*t(1,n));%地物反射
   S4(1,n)=s(t(1,n)-y4)*exp(-j*2*pi*f4*t(1,n));% 直达波
   Ps1=Ps1+(abs(S1(1,n)))^2;
end
Ps=N^2*Ps1/SP;
S=[S1;S2;S3;S4];
M=[1e5 1e4 1e4 1];%幅度
M=diag(M);
SNR=2;

Pn=Ps/(10^(N*SNR/10));%噪声功率
S1=1e5*S1;
for i=1:200

noise=wgn(N,SP,10*log10(Pn),'complex');
X=A*M*S+noise;

I=eye(N);
p=(1/0.004)*I;
    w1=zeros(N,1);
    e=zeros(1,SP);
    e(1,1)=S1(1,1);
  for n=2:SP
      kg=p*X(:,n)/(1+X(:,n)'*p*X(:,n));
      e(n)=conj(S1(1,n))-X(:,n)'*w1;
      Wc(:,i)=w1+kg*(e(n));
      p=p-kg*X(:,n)'*p;
      w1=Wc(:,i);   
  end
  
end
  Wc=sum(Wc,2)/200;%求均值
Y=Wc'*X;
cc=0;
for d=-pi/2:0.01:pi/2
    cc=cc+1;
A1(:,cc)=[exp(j*(0:N-1)*pi*sin(d))].';
y_d(1,cc)=Wc'*A1(:,cc);
end
d=-pi/2:0.01:pi/2;
d=d*180/pi;
subplot(121);
plot(d,10*log10(abs(y_d).^2));grid on;
title('阵列输出功率增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出功率增益(dB)');
subplot(122);
plot(d,abs(y_d));grid on;
title('阵列输出幅度增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出幅度增益(dB)');
 楼主| 发表于 2007-4-29 08:44 | 显示全部楼层

%SMI算法

%SMI算法
clear all;
close all;
clc;
f1=0;
f2=0;
f3=2;
f4=130;
global f0;
f0=100e6;
d1=60*pi/180;
d2=-60*pi/180;
d3=-40*pi/180;
d4=20*pi/180;
SP=2000;%采样点数
N=16;%阵元数
A=[conj(exp(j*(0:N-1)*pi*sin(d1)));conj(exp(j*(0:N-1)*pi*sin(d2)));conj(exp(j*(0:N-1)*pi*sin(d3)));conj(exp(j*(0:N-1)*pi*sin(d4)))]';%A为阵列
Ts=1/(300e3);%采样率300kHz
y1=500*Ts;
y2=100*Ts;
y3=120*Ts;
y4=200*Ts;
t=linspace(Ts,SP*Ts,SP);
Ps1=0;
for n=1:SP
   S1(1,n)=s(t(1,n)-y1)*exp(-j*2*pi*f1*t(1,n));%目标直达
   S2(1,n)=s(t(1,n)-y2)*exp(-j*2*pi*f2*t(1,n));%地反射
   S3(1,n)=s(t(1,n)-y3)*exp(-j*2*pi*f3*t(1,n));%地物反射
   S4(1,n)=s(t(1,n)-y4)*exp(-j*2*pi*f4*t(1,n));%反射波  
   Ps1=Ps1+(abs(S1(1,n)))^2;
end
Ps=N^2*Ps1/SP;
S=[S1;S2;S3;S4];
M=[1e5 1e2 1e2 1];%幅度
M=diag(M);
SNR=2;
S1=1e5*S1;
for c=1:200
Pn=Ps/(10^(N*SNR/10));%噪声功率
W=wgn(N,SP,10*log10(Pn),'complex');
X=A*M*S+W;
R=X*X'/SP;
Rd=X*S1'/SP;
Wc(:,c)=inv(R)*Rd;%权向量
end
Wc=sum(Wc,2)/200;%求均值
Y=Wc'*X;
cc=0;
for d=-pi/2:0.01:pi/2
    cc=cc+1;
A1(:,cc)=[exp(j*(0:N-1)*pi*sin(d))].';
y_d(1,cc)=Wc'*A1(:,cc);
end
d=-pi/2:0.01:pi/2;
d=d.*(180/pi);
subplot(121);
plot(d,10*log10(abs(y_d).^2));grid on;
title('阵列输出功率增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出功率增益(dB)');
subplot(122);
plot(d,abs(y_d));grid on;
title('阵列输出幅度增益方向图');
xlabel('到达角(deg)');
ylabel('阵列输出幅度增益(dB)');
 楼主| 发表于 2007-4-29 08:44 | 显示全部楼层

function output=s(t)

function output=s(t)
%%%%%%%%%%%%%%%%%LFM%%%%%%%%%%%%%%%%%%%%%
% global b;
% global T;
% F=1;
% global f0;
% if  t>0&t<T
% output=exp(j*(2*pi*f0*t+b*t^2));%信号源
% else
%     output=0;
% end
%%%%%%%%%%%%%%%%%FM调频广播%%%%%%%%%%%%%
F=1;
Mf=3;
W=2*pi*15e3;%带宽180kHz
global f0;
if  t>0
output=F*exp(j*(2*pi*f0*t+Mf*sin(W*t)));
else
     output=0;
end
% %%%%%%%%%%%%%%%电视伴音信号%%%%%%%%%%%
%  F=1;
% Mf=50/15;
% global f0;
% W=2*pi*15e3;
% if t>0
% output=F*exp(j*(2*pi*f0*t+Mf*sin(W*t)));
% else
%     output=0;
% end
% %%%%%%%%%%%%%%电视图象信号%%%%%%%%%%%
% F=1;
% global f0;
% W1=2*pi*3e6;W2=2*pi*0.5e3;
% if t>=0
%     output=F*(1+sin(W1*t)+sin(W2*t))*exp(j*(2*pi*f0*t));
% else
%     output=0;
% end
发表于 2007-11-13 18:19 | 显示全部楼层

谢谢你的程序

谢谢楼主的程序,我毕业设计要写智能天线的波束形成算法仿真,就有你这三个程序的比较,哈哈,真是太感谢你了
但是,你的程序是不是有点bug,就是那个输入信号,就是我们的有用信号,怎么运行时老报错!
发表于 2007-11-15 13:04 | 显示全部楼层
建议楼主多看看本版的置顶帖
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-29 22:18 , Processed in 0.051781 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表