Kristian
Kristian

Reputation: 1239

Matlab - how to plot step function

I am having a hard time plotting a step function. The function involves is the Haar scaling function which is defind as:

ø(x) = 1 if 0 ≤ x < 1
ø(x) = 0 otherwise

I am supposed to plot the following function:

f(x) = 2ø(4x) + 2ø(4x - 1) + ø(4x - 2) - ø(4x - 3)

This is supposed to give me a plot where f = 2 on the interval 0 ≤ x < 0.5; f = 1 on the interval 0.5 ≤ x < 0.75; f = -1 on the interval 0.75 ≤ x < 1, and f = zero otherwise.

I tried the following code:

f = @(t) 2*(4*t > 0) + 2*(4*t > 1) + (4*t > 2) - (4*t > 3);
t = linspace(-2,2,100);
stairs(t,f(t))

However, this does not give me an accurate graph. So what am I doing wrong here? Any help will be greatly appreciated!

Upvotes: 0

Views: 6557

Answers (2)

Alan
Alan

Reputation: 3417

Your implementation of f only deals with half of your specification of phi.

f = @(t) 2*(4*t > 0) + 2*(4*t > 1) + (4*t > 2) - (4*t > 3);

In each of the terms applies the inequality 0 < X, rather than 0 <= X. Also nothing is done about the X < 1 inequality.

Rather than trying to make a custom version for each term, why not code up your formula directly?

phi = @(x) x >= 0 & x < 1;
f = @(x) 2*phi(4*x) + 2*phi(4*x-1) + phi(4*x - 2) - phi(4*x - 3);

Upvotes: 4

fatihk
fatihk

Reputation: 7919

it should be:

f = @(t) 2*(4*t > 0 & 4*t < 1) + 2*(4*t > 1 & 4*t < 2) + (4*t > 2 & 4*t < 3) - (4*t > 3);

Because every segment should be defined precisely with start and end values.

Upvotes: 1

Related Questions