periodic function with n cycles

Hi, I need to create a periodic function and plot it.
F(x)=sqrt(3) + *Sin(t -2*pi/3) --> 0<t<pi/3
F(x)=Sin(t) --> pi/3 <t<2*pi/3
repeat the signal 0<t<3*pi with the period 2*pi/3 Then plot(t,Fx)
------
At the moment I use the following code
>> t1=0:.01:pi/3;
>> t2=pi/3:.01:2*pi/3;
A=sqrt(3) + sin(t1*2*pi- 2*pi/3);
B=sin(t2);
plot(t1,A,t2,B)
This method is produce the answer a one cycle. However it is quite difficult to repeat the pattern for multiple times.
Can any one n please suggest way of doing this

 Accepted Answer

Andrei Bobrov
Andrei Bobrov on 8 Dec 2013
Edited: Andrei Bobrov on 10 Dec 2013
t = 0:pi/100:6*pi;
t1 = rem(t,2*pi/3);
l = t1 < pi/3 ;
F = @(t,l)sqrt(3)*l + sin((2*pi*l + ~l).*t -2*pi/3*l);
out = F(t1,l);
plot(t,out)
ADD
t = 2*pi*(0:.0005:1).';
t1 = rem(t,2*pi/3);
l1 = t1 < pi/3;
l0 = ~l1;
y = zeros(numel(t),2);
y(l1,1) = sqrt(3) + sin(t1(l1) - 2*pi/3);
y(l0,1) = sin(t1(l0));
y(l1,2) = sin(t1(l1) - 2*pi/3);
y(l0,2) = sin(t1(l0)) - sqrt(3);
yy = sin([t,bsxfun(@plus,t,[1, -1]*2*pi/3)]);
plot(t,[y,yy]);

2 Comments

Thanks. I modified further so that I can vary the frequency of the generated wave. Fyi. updated Code
f= 2; %frequency in Hz
x=linspace(0,1,1001);
t=x.';
w=2*pi*f;
T=1/f;
t1 = rem(t,T/3);
l1 = t1 < T/6;
l0 = ~l1;
y = zeros(numel(t),2);
y(l1,1) = sqrt(3) + sin(w*t1(l1) - 2*pi/3);
y(l0,1) = sin(w*t1(l0));
y(l1,2) = sin(w*t1(l1) - 2*pi/3);
y(l0,2) = sin(w*t1(l0)) - sqrt(3);
yy = sin([w*t,bsxfun(@plus,w*t,[1, -1]*2*pi/3)]);
plot(t,[y,yy]); grid on;
Hi,
I want to use this method to develop a periodic window to apply to a time function. The thing I could't understand is the second added part:
t = 2*pi*(0:.0005:1).';
t1 = rem(t,2*pi/3);
l1 = t1 < pi/3;
l0 = ~l1;
y = zeros(numel(t),2);
y(l1,1) = sqrt(3) + sin(t1(l1) - 2*pi/3);
y(l0,1) = sin(t1(l0));
y(l1,2) = sin(t1(l1) - 2*pi/3);
y(l0,2) = sin(t1(l0)) - sqrt(3);
yy = sin([t,bsxfun(@plus,t,[1, -1]*2*pi/3)]);
plot(t,[y,yy]);
do we need to add it?

Sign in to comment.

More Answers (2)

t1=0:.01:pi/3;
t2=pi/3:.01:2*pi/3;
A=sqrt(3) + sin(t1*2*pi- 2*pi/3);
B=sin(t2);
t=[t1 t2],
y=[A,B]
plot(t,y)
m=5 % Repetition
n=numel(t);
tt=0:0.01:n*m*0.01-0.01
yy=repmat(y,1,m)
plot(tt,yy)

4 Comments

This is exactly I was after.
Thank You
Hi, I modified further to obtain the necessary periodic wave form.
Now I want to set a frequency (say 5hz) to the base sinusoidal wave. Hence the generated ripple has a frequency 6 times the base.
Please suggest a way to achieve this
clc;
clear all;
t1=0:.01:pi/3;
t2=pi/3:.01:2*pi/3;
fc=5; %frequncy of base sinusoid
%Positive limit
Ap=sqrt(3) + sin(t1- 2*pi/3);
Bp=sin(t2);
%Negative Limit
An=sin(t1- 2*pi/3);
Bn=sin(t2) -sqrt(3);
t=[t1 t2];
yp=[Ap,Bp];
yn=[An,Bn];
%plot(t,y)
m=3 ; % Repetition
n=numel(t);
tt=0:0.01:n*m*0.01-0.01;
yy_p=repmat(yp,1,m);
yy_n=repmat(yn,1,m);
max_shoothru=[yy_p;yy_n];
%3 phase voltage waveforms
A_ph=sin(tt);B_ph=sin(tt+2*pi/3);C_ph=sin(tt-2*pi/3);
waves=[A_ph;B_ph;C_ph];
plot(tt,max_shoothru,tt,waves);
grid on;
Andrei Bobrov
Andrei Bobrov on 10 Dec 2013
Edited: Andrei Bobrov on 10 Dec 2013
Hi Rashmil! See my variant of your problem (after ADD in my answer)
truely thanks,it helps a lot!

Sign in to comment.

sixwwwwww
sixwwwwww on 8 Dec 2013
Edited: sixwwwwww on 8 Dec 2013
you can do it as follow:
count = 1;
for t = 0:pi/3:pi - pi/3
if mod(count, 2) == 1
x = linspace(t, t + pi/3);
y = sqrt(3) + sin(x * 2 * pi - 2 * pi/3);
plot(x, y), hold on
count = count + 1;
else
x = linspace(t, t + pi/3);
y = sin(x);
plot(x, y), hold on
count = count + 1;
end
end
Maybe following link is also helpful for you:

2 Comments

It seems like the variable count does not have any effect on the output.
ie If I want to have 5 cycles of the, count=5? but the output remains unchanged.
It was selected to choose between the plots curve should be plotted. It doesn't have effect on output actually. The output is controlled by the range in the for loop:
for t = 0:pi/3:pi - pi/3
changing pi - pi/3 to pi - pi/3 will give more periods of the plot

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!