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

1 件のコメント

Image Analyst
Image Analyst 2013 年 12 月 8 日
Sounds like your homework. Is it?

サインインしてコメントする。

 採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 12 月 8 日
編集済み: Andrei Bobrov 2013 年 12 月 10 日

1 投票

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 件のコメント

Rashmil Dahanayake
Rashmil Dahanayake 2013 年 12 月 10 日
編集済み: Rashmil Dahanayake 2013 年 12 月 10 日
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;
Behrang Hoseini
Behrang Hoseini 2022 年 5 月 22 日
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?

サインインしてコメントする。

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 12 月 8 日

3 投票

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 件のコメント

Rashmil Dahanayake
Rashmil Dahanayake 2013 年 12 月 9 日
This is exactly I was after.
Thank You
Rashmil Dahanayake
Rashmil Dahanayake 2013 年 12 月 9 日
編集済み: Rashmil Dahanayake 2013 年 12 月 10 日
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 2013 年 12 月 10 日
編集済み: Andrei Bobrov 2013 年 12 月 10 日
Hi Rashmil! See my variant of your problem (after ADD in my answer)
zhenning li
zhenning li 2020 年 11 月 1 日
truely thanks,it helps a lot!

サインインしてコメントする。

sixwwwwww
sixwwwwww 2013 年 12 月 8 日
編集済み: sixwwwwww 2013 年 12 月 8 日

0 投票

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 件のコメント

Rashmil Dahanayake
Rashmil Dahanayake 2013 年 12 月 9 日
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.
sixwwwwww
sixwwwwww 2013 年 12 月 9 日
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

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by