Cut Sinusoidal signal in a integer number of periods
Show older comments
Hey guys,
I have an measurement of three sinusoidal signals.
But it is enough to only work with one in this case.
The measurement doesn´t have an int number of periods and i need to cut for my further work.
To make it more clear here is an picutre:
In this case we have 4 periods.

So i have to find the first negative to positive zero corssing and the last negative to positive zero crossing.
I found this code in the forum but it don´t work with my files but maby it can help u ?!
t = linspace(0,10*pi,200);
x = sin(t);
mcs = x .* circshift(x, [0 -1]);
zxix = find(mcs <= 0);
for k1 = 1:2:size(zxix,2)-1
zx(k1) = interp1(x(zxix(k1):zxix(k1)+1), t(zxix(k1):zxix(k1)+1), 0);
end
figure(1)
plot(t, x)
hold on
plot(zx, zeros(size(zx)), '+r', 'MarkerSize',10)
hold off
grid
I hope u can help me.
Thanks in advance
2 Comments
Accepted Answer
More Answers (1)
Here is a solution equivalent to the one of @David Sanchez, but faster when dealing with large vectors:
t = linspace(0,14*pi,1e6);
x = sin(t+1);
% Find the negative-to-positive crossings ==========================
Signx = sign(x);
zero_crossings_pos = find(diff(Signx)>0);
% =========================================================
t_crop = t(zero_crossings_pos(1)+1:zero_crossings_pos(end));
x_crop = x(zero_crossings_pos(1)+1:zero_crossings_pos(end));
plot(t,x)
hold on
plot(t_crop,x_crop)
legend('non-cropped sine','cropped sine')
xlabel('x')
ylabel('sin(x)')
title('Cropped sin')
1 Comment
Julia Gionet-Gonzales
on 19 Jun 2024
Your code is still only finding the positive zero crossing. This edit will allow you to find both.
zero_crossings_pos = find(abs(diff(Signx)) == 2);
Categories
Find more on Descriptive Statistics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
