Coincidence detector in Matlab

7 views (last 30 days)
Mail Abos
Mail Abos on 12 Mar 2013
How to make coincidence detector on MATLAB In the picture, signal 5 is result of coincidence detector for signal 1 and signal 3
Signal 6 is result of coincidence detector for signal 2 and signal 4.
Thank you.
  2 Comments
Matt Kindig
Matt Kindig on 12 Mar 2013
Are you doing this in Matlab itself or Simulink?

Sign in to comment.

Accepted Answer

Matt Kindig
Matt Kindig on 12 Mar 2013
Edited: Matt Kindig on 12 Mar 2013
How about something like this? (I assume all signals are sampled synchronously).
edges1 = find(diff(Signal1) > 0); %get rising edges on Signal 1
edges3 = find(diff(Signal3) > 0); %get rising edges on Signal 3
commonEdges = intersect(edges1, edges3); %these are the indices of the coincident edges.
Note that this assumes that the rising edges are at identical locations. If there is any timing errors, this simple approach won't work.
  2 Comments
Mail Abos
Mail Abos on 13 Mar 2013
Edited: Mail Abos on 13 Mar 2013
We already try like this, but we get error problem, please help.
dt = 1e-9; % time increment (in seconds)
maxtime = 20e-6; % maximum length of signal (in seconds)
time = 0:dt:maxtime; % time samples (in seconds)
wavelength = 2e-6; % distance between beginning of each pulse
wavewidth = 0.5e-6; % width of each pulse
rectpulse = ones(1,round(wavewidth/dt)); % Define width of rectangle pulse
operator = zeros(size(time)); % Set operator to zeros
operator(mod(time,wavelength)==0) = 0.75; % Place 0.75 at each pulse location
rectsignal = conv(operator,rectpulse); % Convolve rectpulse w/ operator
rectsignal1 = rectsignal(1,1:length(time)); % Remove any extra
subplot(2,1,1); plot(time,rectsignal1);
title('signal1');
dt = 1e-9; % time increment (in seconds)
maxtime = 20e-6; % maximum length of signal (in seconds)
time = 0:dt:maxtime; % time samples (in seconds)
wavelength = 3e-6; % distance between beginning of each pulse
wavewidth = 0.5e-6; % width of each pulse
rectpulse = ones(1,round(wavewidth/dt)); % Define width of rectangle pulse
operator = zeros(size(time)); % Set operator to zeros
operator(mod(time,wavelength)==0) = 0.75; % Place 0.75 at each pulse location
rectsignal = conv(operator,rectpulse); % Convolve rectpulse w/ operator
rectsignal2 = rectsignal(1,1:length(time)); % Remove any extra
subplot(2,1,2); plot(time,rectsignal2);
title('signal2');
edges1 = find(diff(rectsignal1) > 0); %get rising edges on Signal 1
edges3 = find(diff(rectsignal2) > 0); %get rising edges on Signal 2
commonEdges = intersect(edges1, edges3); %these are the indices of the coincident edges
subplot(2,1,3); plot(commonEdges)
Error using subplot (line 308) Index exceeds number of subplots.
Matt Kindig
Matt Kindig on 14 Mar 2013
Is the subplot error you've indicated here your only problem? The error is thrown because
subplot(2,1,3)
attempts to create a 2x1 grid of two subplots. However, you are attempting to call subplot 3 (which does not exist). Change your subplot call to subplot(3,1,3) and it will work.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!