# how to generate square wave in matlab

560 views (last 30 days)
md on 16 Jun 2014
Hi,
I intend to generate a square wave with respect to time by following characteristic:
I want to generate square-wave force demand of 1 KN at 10 Hz. That means amplitude will be between 0 to 1000 and time will be between 0 to 1 (sec) with .1 interval.
Please someone help me.

Image Analyst on 16 Jun 2014
Edited: Image Analyst on 24 Nov 2020
Make one period, then use repmat() to replicate as many times as you want.
% Now make one cycle with amplitude 1000 and 200 elements.
onePeriod = 1000 * [ones(1, 100), zeros(1, 100)];
% 200 elements is supposed to be 0.1 seconds so find out delta t.
dt = 0.1 / numel(onePeriod);
% Define number of cycles.
numCycles = 10;
% Copy this period that many times.
fullWaveForm = repmat(onePeriod, [1, numCycles]);
% Make time axis from 0 to 1 second.
t = dt * (0 : (numel(fullWaveForm) - 1));
% Now plot it.
plot(t, fullWaveForm, 'b-', 'LineWidth', 2);
FontSize = 20;
xlabel('Time (seconds)', 'FontSize', FontSize);
ylabel('Amplitude', 'FontSize', FontSize);
title('Square Wave With 10 Cycles', 'FontSize', FontSize);
grid on;
##### 2 CommentsShow 1 older commentHide 1 older comment
Image Analyst on 15 Jun 2017
I don't know what that means. What is a "saturation block"? Is that Simulink? The poster said "in matlab" but if your function is for Simulink, then perhaps your post will help Simulink users.

### More Answers (4)

Rashmil Dahanayake on 16 Jun 2014
t=0:.001:1;
f=10;
sq=1000*0.5*(square(2*pi*f*t)+1);
plot(t,sq)

Bill Tubbs on 26 Mar 2020
Based on Rashmil Dahanayake's idea I made a simple function to generate regular square waves for discrete time.
function sq = square_dt(n,period)
% Square wave in discrete time
repeats = n/period;
sq = square(2*pi*linspace(0,repeats-1/n,n));
end
(Works best when period is an even number)
Example
>> square_dt(10,4)
ans =
1 1 -1 -1 1 1 -1 -1 1 1
If you want only the positive cycles, modify the code like Rashmil's:
function sq = square_dtp(n,period)
% Square wave in discrete time
repeats = n/period;
sq = (square(2*pi*linspace(0,repeats-1/n,n))+1)/2;
end
Example
>> square_dtp(10,4)
ans =
1 1 0 0 1 1 0 0 1 1

udhaya ram mohan on 18 Oct 2016
i need to generate the square wave with positive cycle only please send me a code for it
##### 1 CommentShow NoneHide None
Walter Roberson on 18 Oct 2016
Rashmil Dahanayake's Answer already only generates positive values.

pisini padmaja on 23 Nov 2020
Edited: Image Analyst on 24 Nov 2020
%square function%
clc;
clear all;
close all;
t=0:0.01:2;
x=sin(2*pi*t);
subplot(2,1,1);
plot(t,x,'g');
xlabel('time');
ylabel('amplitude');
title('square signal 318126512095');
subplot(2,1,2);
stem(t,x,'r');
xlabel('time');
ylabel('amplitude');
title('square sequence 318126512095');
##### 2 CommentsShow 1 older commentHide 1 older comment
Vedanta Mohapatra on 1 Oct 2021
You have to use signum to generate some sort of square wave

### Categories

Find more on Signal Generation and Preprocessing in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by