Create an index based Schmitt Trigger

Hello, I have a function that mimics a Schmitt Trigger to translate an analog sine wave into a digital square wave. So far, I have accomplished this with a for loop and the function works as planned. However, since I have a significant amount of data to process, I would like to do this index based for speed. I cannot think of a way to make this index based so the function performes faster.
My function is below, any suggestions on how to make this index based? Is it possible?
Thanks.
function [y] = Schmitt_Trigger(x,tL,tH)
%x is the input array that contains the analog sine wave to process.
%tL is the lower bound of the hysteresis and tH is the upper bound.
N = length(x);
y = zeros(1,N);
for i = 2:N
y(i) = y(i-1);
if y(i-1) == 0 && x(i)>tH
y(i) = 1;
end
if y(i-1) == 1 && x(i)<tL
y(i) = 0;
end
end
end

Réponses (1)

Yash
Yash le 20 Juil 2025
Modifié(e) : Yash le 20 Juil 2025

0 votes

Check out these implementations of Schmitt Trigger:
In your implementation, if the crossings are well separated and the input isn't nosiy, you can use a logical mask and the function "find" to get the crossing points and reconstruct the output.

Catégories

Produits

Modifié(e) :

le 20 Juil 2025

Community Treasure Hunt

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

Start Hunting!

Translated by