Extrapolating intersection points (signal processing/curve fitting)
4 次查看（过去 30 天）
I have a data set which consists of a series of adjacent dips. Below I have plotted the data using the line style specifier '-o' which connects two adjacent points using a line. I want to determine the points where the red line (some arbitrary threshold) intersects the blue line. How can this be achived?
In other words, I am looking for the simplest way to extrapolate my data at a certain threshold value. I believe a linear fit using polyfit can be used to find the straight line between two neighbours. But I am not sure how it can be applied to this problem.
Any suggestions would be greatly appreciated.
P. S. I am including my sample data which can be accessed through:
M = csvread('DS0006.csv');
time = M(:,1); waveform = M(:,2);
waveform = smooth(time,waveform,5,'moving'); plot(time,waveform, 'o-');
Star Strider 2019-5-6
M = xlsread('DS0006.csv');
time = M(:,1);
waveform = M(:,2);
threshold = 3.2;
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
thrx = zci(waveform-threshold); % Approximate Indices Of ‘threshold’ Equality
for k1 = 1:numel(thrx)
ixr = thrx(k1):thrx(k1)+1; % Index Range For Linear Interpolation
dm = [time(ixr) [1; 1]]; % Design Matrix
bv = dm \ waveform(ixr); % Parameter Vector
xi(k1) = (threshold-bv(2)) / bv(1); % Interpolate To Find ‘x’ At ‘threshold’
plot(time, waveform, '.-')
plot(xlim, [1 1]*threshold, '-r')
plot(xi, threshold*ones(size(xi)), 'xg', 'MarkerSize',10)
This produces interpolations of the x-values (the ‘xi’ vector) where your data crosses the ‘threshold’ value. It uses simple linear interpolation and is reasonably fast and efficient.
John D'Errico 2019-5-6
编辑：John D'Errico 2019-5-6
Download Doug Schwarz's utility: intersections.
But this has nothing to do with extrapolation. It just requres you to find the intersections between two pairs of line connected curves.