Periodic
function – some codes without special
toolboxes in
Matlab
A periodic
function is a function that
repeats its values in
regular periods or intervals.
Some examples are the trigonometric
functions,
which repeat their values every 2π
radians. Periodic functions are used in math and science in general to
describe
waves, oscillations or other events that behave the same through
periods or
cycles along
time.
A function f(x)
is said to be periodic if this is true:
for
all values of x.
The least positive constant T
with this property is called the period.
A function with period T will
repeat
on intervals of length T. These
intervals are referred to as periods.
In
this article, we’re
going to develop and plot two common periodic
functions (square and
sawtooth waves) without using any special Matlab
toolbox,
so that we could use or translate these algorithms into any other
programming
language.
Square wave
A
square wave is similar
to a sinusoidal waveform
but with
very abrupt changes,
very typically encountered in electronics and
signal
processing. An ideal square wave is a periodic function that changes or
alternates regularly and
suddenly between
only two levels.
Square waves are
encountered in switching circuits (digital
electronics) and are generated by binary (only two-value) logic
devices. They
are often used as timing references or ‘clock signals’, because their
transitions are appropriate for triggering logic circuits at exactly
determined
intervals.
Our first approach for
this wave will be a typical scalar
function. We can use for-loops to inspect every value (xi)
of the input vector. If we detect that xi
is in the first half of
the period, we’ll set a ‘high’ value; if xi
is in the last half of the period,
we’ll set a ‘low’ value for the
function.
Our function generates a
square wave with period 2π for
the elements of time
vector x. Function
sq_w(x) is like
sin(x), only it creates a square wave with peaks of +1 to -1 instead of
a sine
wave.
function y =
sq_w(x)
%
We'll inspect every value of the vector
for i = 1 :
length(x)
% Total length of high and low
values are pi
t = ceil(x(i)/pi);
if mod(t, 2)==0
% if x(i) is in the last half,
we set a -1
y(i) = -1;
else
% if x(i) is in the first
half, we set a +1
y(i) = 1;
end
end
We can call our function
like this, from another script (maybe
called ‘test_sq_w.m’) or from the command window:
clear,
clc, close all
x = -8 :
.01 : 8;
y =
sq_w(x);
plot(x,y)
axis([-8
8 -1.5 1.5])
xlabel('x')
ylabel('Square
Wave')
The result is:
The second approach is
smarter. We don’t use for-loops and so
the function is called to be vectorized. We use only three lines of
code:
function y =
sq_w(x)
%
we set a default value of 1
y =
ones(1, length(x));
%
we find elements in the second half of the period by
% dividing
every cycle in two. The first half is odd,
% the
second half is even
t =
mod(ceil(x/pi), 2) == 0;
%
we set a -1 only for elements in the second
% half of every period
y(find(t))
= -1;
We
call it with our
function above ‘test_sq_w.m’ and the
result is exactly the same as the shown before.
Our third approach is
much simpler. We use the standard
‘sin(x)’ function but change all the function’s positive values to 1
and all
the negative values to -1.
function y =
sq_w(x)
y =
sin(x);
%
we find positive elements and represent them as 1
y(find(y
>= 0)) = 1;
%
we find negative elements and represent them as -1
y(find(y
< 0)) = -1;
If we
test the function,
the result is the same as before.
Sawtooth wave
The sawtooth wave is
another periodic function and a
kind of non-sinusoidal waveform. It
is named a sawtooth due to its resemblance to the teeth on the edge of
a saw. The
common use is that a sawtooth wave goes upward and then sharply drops.
An application of the
sawtooth wave is the form of the
vertical and horizontal signals used to generate a trace on CRT-based
televisions or monitor screens. Oscilloscopes also use a sawtooth wave
for
their horizontal deflections.
Our sawtooth function has
the same phase and period as a
sine function.
Function
sawtooth_w(x)
generates a sawtooth wave with period 2π for the elements of time vector x. sawtooth_w(x) is like
sin(x), only it
creates a wave with peaks of +1 to -1 instead of a sine wave.
Basically,
we want y = x
(a very informal way to describe it) but reset or repeated every
period. We have to take into
account that
the output value repeats every 2π
cycle.
function y =
sawtooth_w(x)
%
We find the period number of every element
%
in the input vector
tn
=
ceil((x+pi)/(2*pi));
%
and we subtract that corresponding period from
%
the base value. We want final values from -1 to 1
y = ((x
- tn*2*pi) + 2*pi)/pi;
We
run our function, like this (with a script named ‘test_saw_w.m’):
clear,
clc, close all
x = -6 :
.01 : 6;
y =
sawtooth_w(x);
plot(x,
y)
axis([-6
6 -1.5 1.5])
xlabel('x')
ylabel('Sawtooth
Wave')
and
the Matlab resulting plot is:
|