Minimize intersection area between contours

조회 수: 3 (최근 30일)
Carola Forlini
Carola Forlini 2023년 8월 31일
댓글: William Rose 2023년 9월 1일
Hi,
I have obtained contours plotted in the time-frequency domain for two signals (focus on blue and violet contours).
I would like to estimate the timelag which correspond to the "perfect" overlapping of the contours from the two signals.
I am thinking to obtain this value by defining the difference between the overlapping areas and stop when this values is ~ 0.
Any suggestions on how to build the algorithm?
Thank you,
Carola
  댓글 수: 2
Mathieu NOE
Mathieu NOE 2023년 8월 31일
why not take the x distance between the centroids of the areas ?
William Rose
William Rose 2023년 8월 31일
@Mathieu NOE, great idea.

댓글을 달려면 로그인하십시오.

채택된 답변

William Rose
William Rose 2023년 8월 31일
What is th eformat of the contour lines? That may affect what algorithm to create.
c1=[90+15*cos(2*pi*(0:20)'/20),.4+.15*sin(2*pi*(0:20)'/20+pi/4)]+randn(21,2)*[1,0;0,.01];
c2=[100+15*cos(2*pi*(0:20)'/20),.4+.16*sin(2*pi*(0:20)'/20+pi/4)]+randn(21,2)*[1,0;0,.01];
c1(21,:)=c1(1,:); c2(21,:)=c2(1,:); % make last point=first, so contour is closed
plot(c1(:,1),c1(:,2),'-r',c2(:,1),c2(:,2),'-b');
xlim([0,200]); ylim([.2,.6]); grid on;
xlabel('Time (s)'); ylabel('Frequency (Hz)')
Find the intersection.
p1=polyshape(c1); p2=polyshape(c2); pInt=intersect(p1,p2);
hold on; plot(pInt,'FaceColor','m')
Compute and display the area of the intersection, just to show it can be done:
aInt=area(pInt); fprintf('Area of intersection=%.2f.\n',aInt);
Area of intersection=2.28.
Vary the time offset and compute area in each case; find the time offset with the maximum area of hte intersection.
tOff=-50:50;
N=length(tOff);
M=length(c2);
aInt=zeros(N,1);
for i=1:N
c2shift=c2+[tOff(i)*ones(M,1),zeros(M,1)]; % shift contour 2
aInt(i)=area(intersect(polyshape(c1),polyshape(c2shift))); % area of intersection
end
figure; plot(tOff,aInt,'-k.'); grid on; xlabel('tOff (s)'); ylabel('Area')
Find the time offset associated with the max area of intersection.
[~,idx]=max(aInt); tBest=tOff(idx);
fprintf('Best time offset of c2=%d.\n',tBest)
Best time offset of c2=-10.
OK.
  댓글 수: 5
William Rose
William Rose 2023년 8월 31일
@Carola Forlini, I am curious: why do you want to find the time offset that maximizes the overlap of the time-frequency (T-F) contours of two signals? What aspect of the signals are you trying to detect? Depending on your answer, there may be better ways of getting the information you want. Would the time at which the corss-correlation is maximal be equally useful?
The total power in the signal for each time slice of your T-F plot is equal to the sum of the T-F values along that "column" (i.e. time slice) of the plot. (This is true due to Parseval's theorem.) You can compute the power-weighted mean "time" of signal x1(t) , whose T-F array is Z1(t,f), from Z1. Or you could find hte mean time by using the time domain signal, x1(t) itself. We assume x1 has mean=0.
Do likewise for t2. Find their difference. Does that get at what you want?
We have discussed three versions of "delta t" which represent something about the time offset of two signals, x1(t) and x2(t), whose T-F arrays are Z1(t,f) and Z2(t,f). The three quantitities are
  • time offset that maximizes overlap of T-F contours
  • time offset that maximizes the cross correlation
  • time difference between the power-weighted mean times
I predict that the three quantities will be quite similar for various signal pairs. But I could be wrong, so you'd have to check it out with real and/or simulated data.
William Rose
William Rose 2023년 9월 1일
@Carola Forlini, you are welcome.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by