我正在努力寻找如何在我的数据集中找到特定点。例如,我有一个示波器的测量数据,存储为我在Matlab中导入的.csv
文件。绘制后,它看起来像这样:
我的问题是:如何在数据集中找到特定点A-H? 有时噪音很高,Matlab给出了最大值和最小值的错误x(时间)值。有什么建议吗?
我现在使用的代码如下所示:
/////////////////////////////////////////////// //
clear all;
Data = csvread('Data.csv',100,0);
Data = Data(1:end-203,:);
mean_Data = mean(Data(:,2));% macht offset weg
Data_withoutoffset = Data(:,2)-mean_Data;
a = 1;
b = [1/4 1/4 1/4 1/4];
Data_smooth = filter(b,a,Data_withoutoffset)
[maxBBpks,maxBB] = findpeaks(Data_smooth,'MinPeakDistance',1000,'MinPeakHeight',0.5);
Data_inverted = -Data_smooth;
[minBBpks,minBB] = findpeaks(Data_inverted,'MinPeakDistance',1000,'MinPeakHeight',0.5);
figure
hold on
plot(Data_withoutoffset); grid on
plot(maxBB,Data_withoutoffset(maxBB),'rv','MarkerFaceColor','r');
plot(minBB,Data_withoutoffset(minBB),'rs','MarkerFaceColor','b');
ax = axis; axis([ax(1:2) -11 11])
title('Oscilloskop Signal')
xlabel('Samples'); ylabel('Voltage(mV)')
legend('Signal','Max','Min');
/////////////////////////////////////////////// ////
我在信号开始时切了一点,最后确保我有正确的信号。
我还可以给你我的第一个数据集(我可以通过邮件发送),因为图片只是理论上信号的样子。实际上噪音更大。
以下是实际数据的图表
感谢您的帮助
答案 0 :(得分:-1)
看起来潜在的解决方案可能有两个步骤。
<强>过滤强> 由于噪声看起来很尖锐,您可以使用低通滤波器去除大部分峰值。调整滤波器以专门针对出现的噪声频率是值得的。看起来你现在正在使用名义价值。
dV或d | dV |阈值强>
通过查看信号的数值导数,可以更容易地识别与快速转换的开始/结束相关联的时间。您可以在Matlab中使用dV = diff(V)
执行此操作。看起来你的点也在高加速度的区域(噪音实际上并没有太大地伤害这个度量)。您可以使用d2V = diff(dV)
和dadV = diff(abs(dV))
来查看加速度/幅度,您可能会发现所有关键点都在此图中清晰显示。