how can i plot a rectangular train wave ???
    6 views (last 30 days)
  
       Show older comments
    
hi.i want to plot a rectangular train wave with a given width and frequency.the wave should have positive value around the origin(i mean it should not start from the origin).what should i do???
4 Comments
  Azzi Abdelmalek
      
      
 on 2 Dec 2012
				It' called square but there is some work to do, because it's default period is 2pi, and ...
  Image Analyst
      
      
 on 2 Dec 2012
				square() is not a built-in function unless you have the Signal Processing Toolbox. As far as I can tell it's not part of base MATLAB. I'll add that toolbox to the "Products" below.
Answers (3)
  Image Analyst
      
      
 on 2 Dec 2012
        If you don't have the Signal Processing Toolbox, which has the square() function, then you could do it with repmat():
clc; % Clear command window.
% Create the signal using repmat().
halfWidth = 10;
oneCycle = [ones(1, halfWidth), zeros(1, halfWidth)]
numberOfCycles = 5;
fullSignal = repmat(oneCycle, [1, numberOfCycles])
% Signal has now been created, plot it.
plot(fullSignal, 'LineWidth', 5);
ylim([0 1.5]);
grid on;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
1 Comment
  Naga Sai
 on 23 May 2017
				how to create a square wave with out using repmat() or other functions of matlab
  Azzi Abdelmalek
      
      
 on 2 Dec 2012
        
      Edited: Azzi Abdelmalek
      
      
 on 2 Dec 2012
  
      You can use the function square which generate a 2pi periodic square wave signal
w=50               % positive signal width in percentage
F=1                % signal frequency
T=1/F              % signal period 
w0=2*pi*F          % signal pulse
ts=T/50            % sample time
np=2               % number of period = np*2
t=-np*T:ts:np*T;   % time vector allowing np*2 period
y=square(w0*(t-T*w/200),w)
close;plot(t,y,'r')
Note that y is varying from -1 to 1, if you want vaiation from 0 to 1
 y=(y+1)/2;
you can also add an amplitude
 y=Amp*y
If you have'nt a function square, it's easy to create
function y=square(t,p)
% t: time vector
% p: width in percentage
% the period by default is 2*pi
tt=mod(t,2*pi)
idx1=find(tt<=2*pi*p/100)
y=-ones(1,numel(t))
y(idx1)=1
1 Comment
  yaseen
 on 23 Sep 2022
        w=50               % positive signal width in percentage
F=1                % signal frequency
T=1/F              % signal period 
w0=2*pi*F          % signal pulse
ts=T/50            % sample time
np=2               % number of period = np*2
t=-np*T:ts:np*T;   % time vector allowing np*2 period
y=square(w0*(t-T*w/200),w)
close;plot(t,y,'r')
1 Comment
  Image Analyst
      
      
 on 24 Sep 2022
				This is not an original answer - it's just a repost of @Azzi Abdelmalek's code.  Was posting it a mistake, like you were intending to run it rather than offer it as an Answer of your own creation?  Do you want me to delete it for you?
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




