天天看点

时延估计 matlab,LMS自适应时延估计matlab程序

目前在做个超声波方便的东西,就是计算固定的距离的两点之间超声波的传播时间,因为我以前也没学过自适应滤波的知识,matlab也不怎么懂,所以现在就碰到一些困难。

附件是我用来仿真的一个MATLAB程序,这是参考自适应滤波程序来的,程序就存在问题,对LMS自适应时延估计算法里 for 循环的编写不怎么明白,还有输出的权值w是一个多维的矩阵,那怎么来求峰值时刻呢?还有对信号插值,插值后数据的计算,比如说时间间隔是1ms,但是我要到us级的精度,插值后怎样来按us间隔来计数?期望师兄师姐们帮我看看程序,指导我!期待你的回复!万分感激!

程序:

%  该程序参考时域LMS算法(用统计的方法仿真得出不同步长下的收敛曲线),计算信号之间的时延

clear                     %   清空变量空间

close all

g=100;                    %   统计仿真次数为g

N=1024;                   %   输入信号抽样点数N

k=128;                    %   时域抽头LMS算法滤波器阶数

u=0.001;

for q=1:g

n=1:N;

a=1;

s1=a*sin(0.05*pi*n);            %   输入单频信号s1 周期为40

s2=a*sin(0.05*pi*(n-22));       %   输入时延后的单频信号s2,时延为90

%时域波形

figure(1);

subplot(211)

plot(n,real(s1));                  %   信号s1时域波形

title('信号s1时域波形');

xlabel('n');

ylabel('s1');

axis([0,N,-a-1,a+1]);

subplot(212);

plot(n,real(s2));

title('信号s2时域波形');           % 信号s2时域波形

xlabel('n');

ylabel('s2');

axis([0,N,-a-1,a+1]);

%采样

n_interp=1:0.001:N;                       %插值后要保持数据的长度一致

s1_interp=interp1(n,s1,n_interp,'spline');

s2_interp=interp1(n,s2,n_interp,'spline');

% 设置初值

y=zeros(N,1);            %   输出信号y

%y(1:k)=s1(1:k);         %   将输入信号xn的前k个值作为输出y的前k个值

w=zeros(k,N);            %   设置抽头加权初值

e=zeros(N,1);            %   误差信号

x=zeros(k,1);

% 用LMS算法迭代滤波

for i=1:N-1

x=s1(i:-1:i-k+1);        %这行命令存在问题

y(i)=w(1:k,i)'*x;

e(i)=s2(i)-y(i);

w=w+u*e(i)*s1;

end

end

figure(2);

subplot(211);

plot(e)

title('误差收敛情况')

subplot(212);

plot(w)

title('权值信号')

axis([0,k,-0.5,0.5])

[C,I]=max(w);

I

%for b=1:N-k

%bi(b)=sum(pp(:,b))/g;              %   求误差的统计平均

%end

%figure(3);                         %   算法收敛曲线

%n=1:N-k;

%plot(n,10*log10(bi));

%hold off                           %   将每次循环的图形显示结果保存下来

[本帖最后由 cwjy 于 2010-5-22 20:24 编辑]

时延估计 matlab,LMS自适应时延估计matlab程序

2010-5-22 16:46 上传

点击文件名下载附件

1.71 KB, 下载次数: 22426