PDA

查看完整版本 : [MATLAB毕业设计] MATLAB测距


fyccc736
2009-04-16, 16:42
背景:本设计基于Matlab仿真平台,采用.m文件形式,利用声卡对音频范围的信号进行发射,接收及测距。其主要功能模块包括音频扩频测试信号的产生及发送;信号的实时接收;信号处理以及结果的图示显示等。要求对不同的测试信号和不同处理方法的测距性能进行比较研究.测量距离5cm --- 2m 误差 < 1%

才学习用MATLAB,做这个简直一头雾水。有兴趣和懂的可以单独联系我:(:confused:
QQ:1063267784
有这么一段参考,我就是调不对啊:(:(
function sonar_anal(fig)
% SONAR_ANAL is a callback for the sonar demo (tof.m).

% user data
ud=get(fig,'userdata');
ai=ud.ai;
ao=ud.ao;
h=ud.h;
txt=h.text1;

% measurement
y=getdata(ai); % get response when done

x=ud.x; % excitation chirp
N=ai.samplespertrigger; % record length
Fs=ai.samplerate; % samples/sec (Hz)
c=ud.c; % wave speed (m/sec)

% analysis
X=fft(x); Y=fft(y); % forward transforms
Z=conj(X).*Y; % freq-domain equiv xcorr (circ)

% Hilbert transform => envelope
pos=2:N/2; Z(pos)=2*Z(pos); % double positive frequencies
neg=(N/2+1):N; Z(neg)=0; % zero out neg frequencies

z=fftshift(abs(ifft(Z))); % inverse transform

i=(1:N)'; % sample index
t=(i-1-N/2)/Fs; % time index (sec)

z(t>6/c)=0; % ignore insane distances (>6m)

[pk,loc]=max(z); % height & location of peak
if length(loc)>1 % tie breaker
if max(diff(loc))==1 % fence strattler
lag=mean(t(loc)); % split the difference
else % real competition
lag=t(loc(1)); % early bird gets the worm
end
else % no contest
lag=t(loc); % time delay (sec)
end
d=lag*c; % distance (m)

% display results
%disp(sprintf('t=%.2fmsec d=%.3fm,%.1fin',lag*1e3,d,d/0.0254))
plot(t*c,z/pk), axis([0 6 0 1])
hold on, plot(d,mean(z(loc))/pk), hold off
set(h.text1,'string',sprintf('Distance = %.1f m',d))

% repeat
if strcmp(get(h.Stop,'Enable'),'on') % repeating measurements
putdata(ao,x) % preload output buffer
start([ai ao]) % do it again!
else % single measurement
set(h.Repeat,'enable','on') % enable Repeat button
end