选择某一波的初至波形

45视图(30天)
我想选择第一个到达一个特定波(横波)波波列记录的传感器。通常,第一个到达强,但有时它可以受到噪音的存在或其他波形到达(压缩波)在横波到来之前。没有特定频率的波形记录。输入频率是6 MHz和输出信号如下图所示:
红色的线条代表的第一剪切波的到来。波波列,可以看到开始的降价毫秒(x轴)压缩波。
我用“平滑”过滤器来抚平波形,然后使用findchangepts最高波动性的变化波形窗口55 - 80毫秒(轴)检测第一个到达。它适用于大多数场合但失败当有更高的平滑的波形的斜率变化超过实际初至。像下图:
第一个到达高峰时也在这种情况下,实际上是约70微秒。请建议最好的办法是什么检测第一次使用Matlab的到来。
我的代码是这样的:
file_abs = abs(文件(:,i));%所有负振幅恢复积极的价值观
file_smooth =平滑(file_abs, 0.04,“rloess”);%“平滑”滤波器应用到波形
ipt = (1250 + (findchangepts (file_smooth (1250:1800),“统计”,“rms”,“MaxNumChanges”2)))*间隔;%采取相应轴值50 - 75毫秒的时间框架(轴)
如果(大小(ipt, 1) = = 1)
如果(ipt (1) > min_tt)
输出(i, iter) = ipt (1);
结束
结束
如果(大小(ipt, 1) = = 2)
如果(ipt (2) < max_tt)
输出(i, iter) = ipt (2);
结束
结束
我有一些350万输入文件为每个测量。所以手工马克第一次到达是不可能的。需要尽可能自动化。
4评论
Pritesh Bhoumick
Pritesh Bhoumick 2017年4月5日
@Joseph——我不能假定一个阈值,因为它会为每一个波形是不同的。一些波形有很强的振幅而有些虚弱。此外,一些有较高的噪声幅值和一些不该。如果连一个噪声峰值高振幅为0.05,它将作为第一个到达。会非常棘手的采取这种方式!

登录置评。

答案(1)

格雷格·迪翁
格雷格·迪翁 2017年4月6日
我可以(黑色)感受当通过AR建模情况正在改变。基本上一个滑动窗口的方法,试图比较窗口(双向)预测。没有什么特别的,使用FILLGAPS。这是一个动画使用订单的100 120个样本两侧的窗口。如果你玩/重叠顺序你可以得到工作。
i = 1:尺寸(文件,2)
分析(文件(:,我),100年,1.2);
结束
函数分析(波,秩序,ovlp)
范围= 1200:10:2200;
errdata = 0(元素个数(范围),2);
j = 1:元素个数(范围)
i =范围(j);
killwave =波;
killwave(我+顺序)=南;
recwave = fillgaps (killwave圆(ovlp *订单),顺序);
errdata (j, 1) =我;
errdata (j, 2) = rms(波(我+顺序)-recwave(我+顺序))/ rms(波(我+顺序));
次要情节(2,1,1)
情节(errdata (1: j, 1) +订单/ 2,errdata (1: j, 2));
轴([1 2500 0 3]);
次要情节(2,1,2)
情节([波recwave]);
drawnow
结束
结束
7评论
格雷格·迪翁
格雷格·迪翁 2017年4月19日
好的。我调整一下,它试图在正向和反向预测方向和比较实际。如果你看到一个更大的错误那么机会模型改变了这一点。随意玩训练点的数量和模型阶……请检查(玩订单号码和培训)的长度。好运!
i = 1:尺寸(数据,2)
分析(文件(:,i), 150150);
结束
函数分析(波、ntrain顺序)
范围= 1200:10:2200;
errdata = 0(元素个数(范围),1);
j = 1:元素个数(范围)
i =范围(j);
subsetleft =波(i + (1: ntrain));
subsetright =波(i + ntrain + (1: ntrain));
guessright = arpredict (subsetleft、ntrain、订单);
guessleft = flipud (arpredict (flipud (subsetright) ntrain,顺序));
errdata (j) = (abs (subsetleft - guessleft)) +和总和(abs ((subsetright - guessright)));
结束
次要情节(2,1,1)
情节(波);
次要情节(2,1,2);
情节(范围、errdata);
xlim([1元素个数(波)]);
drawnow
结束
函数y = arpredict (x, n,顺序)
a = arburg (x, min(长度(x) 1、订单));
如果任何(isnan (a))
y = 0 (n, 1);
其他的
子= filtic (1, x(结束:1:1));
y =过滤器(1一个零(n, 1),子);
结束

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!