我目前正在做一篇需要超声波脉冲速度(UPV)的论文。 UPV很容易通过机器获得,但我们获得的数据没有UPV,因此我们的任务是手动获取。
基本上在数据中我们有2个通道,一个用于发射器换能器,另一个用于接收器换能器。
我们需要从发射器的波发射时间和到达接收器的时间。
使用matlab,我尝试了finddelay
和xcorr
,但没有得到正确的结果。
这是我想要得到的分数的图片。该图是发射器(蓝色)和接收器(红色)
所以我试图在图片中找到两点,但借助于matlab。两者将确定时间并进一步确定UPV。 我是一个相对新的MATLAB用户,所以你的帮助会很有帮助。
这是我试过的代码
[cc, lags] = xcorr(signal1,signal2);
d2 = -(lags(cc == max(cc))) / Fs;
@xenoclast你好!到目前为止,我使用的代码就是这些。
close all
clc
Fs = input('input Fs = ');
T = 1/Fs;
L = input('input L = ');
t = (0:L-1)*T;
time = transpose(t);
i = input('input number of steploads = ');
% construct test sequences
%dataupv is the signal1 & datathesis is the signal2
for m=1:i
y1 = (dataupv(:,m) - mean(dataupv(:,m))) / std(dataupv(:,m));
y2 = (datathesis(:,m) - mean(datathesis(:,m))) / std(datathesis(:,m));
offset = 166;
tt = time;
% correlate the two sequences
[cc, lags] = xcorr(y2, y1,);
% find the in4dex of the maximum
[maxval, maxI] = max(cc);
[minval, minI] = min(cc);
% use that index to obtain the lag in samples
lagsamples(m,1) = lags(maxI);
lagsamples2(m,1) = lags(minI);
% plot again without timebase to verify visually
end
与我在视觉上检查波浪时相比,结果值减去了70个样本。延迟导致244但在视觉上应该是176这里是数据(有19组数据,但我只使用第1列)https://www.dropbox.com/s/ng5uq8f7oyap0tq/datatrans-dec-2014.xlsx?dl=0 https://www.dropbox.com/s/1x7en0x7elnbg42/datarec-dec-2014.xlsx?dl=0
答案 0 :(得分:0)
您的示例代码没有指定Fs
,所以我不确定,但我猜测这是一个采样率问题。所有交叉相关的例子都是从根据他们通常称为Fs
的特定采样率构建测试序列开始的,而不是与测试音的频率混淆,你可能会看到它被称为Fc
如果您根据Fs
和Fc
构建测试信号,那么这样可以正常工作,但是当您从仪器获得实际数据时,它们通常会将数据和时基作为两个向量,因此你必须从时基计算出采样率。这可能与工作频率或信号分量不同,因此这里很容易混淆。
但是,问题的第二部分只需要采样率,即可及时计算出偏移量。首先,您必须获得样本中的偏移量,并且更容易验证。
如果您删除' / Fs'您的示例将为您提供样本中的偏移量术语,您可以通过绘制没有时基的两个信号并检查样本位置来验证它。
我确定你已经看过几十个例子,但是这里有一个试图不把这个问题与收费率混淆的问题 - 你会注意到它无处可去指定了'采样率'是的,它只是与样本相关联(尽管如果你将y1
定义中的5视为以Hz为单位的频率,那么你将能够推断出一个)。
% construct test sequences
offset = 23;
tt = 0:0.01:1;
y1 = sin(2*pi*5*tt);
y2 = 0.8 * [zeros(1, offset) y1];
figure(1); clf; hold on
plot(tt, y1)
plot(tt, y2(1:numel(tt)), 'r')
% correlate the two sequences
[cc, lags] = xcorr(y2, y1);
figure(2); clf;
plot(cc)
% find the index of the maximum
[maxval, maxI] = max(cc);
% use that index to obtain the lag in samples
lagsamples = lags(maxI);
% plot again without timebase to verify visually
figure(3); clf; hold on
plot(y1)
plot(y2, 'r')
plot([offset offset], [-1 1], 'k:')
一旦你获得了样本中的偏移量,你就可以推导出所需的转换因子,但是如果你有来自仪器的时基数据那么任何两个连续条目的差异的倒数就会给你。
更新
当您关联这两个信号时,您可以将其视为覆盖它们并将相应元素的乘积相加。这给你一个单一的价值。然后您通过样本移动一个信号并再次执行。继续,直到你完成两个信号的每个可能的安排。
每一步获得的值是相关性,但是“延迟”是指。从一个信号一直到左边开始计算,另一个信号只用一个样本重叠。您将第二个信号一直滑过,直到它只与样本重叠另一端。因此,相关返回的值的数量与两个原始信号的长度有关,并且将相关输出中的任何给定点(例如最大值)与产生它的两个信号的排列相关联,这要求你做涉及这些长度的计算。 xcorr
函数通过输出跟踪两个信号对齐的lags
变量使这变得更容易。人们也可以将此作为偏移来讨论,所以要注意这一点。