Asked by Onur Öçalan
on 16 Dec 2011

Hi everybody;

I want to create a rectangular wave with a specific function. For example,

the wavelength of the wave = 20 milliseconds

the wave width = 1.2 milliseconds

How do I do with Matlab ?

Please help...

Thanks.

Answer by Paulo Silva
on 16 Dec 2011

Here's my crazy way to do it, I'm assuming some values for example the sampling time. This way doesn't require any toolboxes, another way to do it easily would be to use the Control System Toolbox™ gensig function that I usually use.

l=20e-6;

w=1.2e-6;

Ts=1e-9;

t=0:Ts:l; %generate the time vector

s=0:Ts:w; %generate a piece of the wave, the one with zeros

s0=s*0;

%generate another piece of the wave, the one with ones

s1=s*0+1;

s=[s s1]; %combine them for one period of the wave

s=repmat(s,1,round(l/(2*w)+1)); %create the entire wave from that first piece

%view the wave

plot(t,s((1:size(t,2))))

ylim([-0.5 1.5])

Sean de Wolski
on 16 Dec 2011

certainly works!

Onur Öçalan
on 17 Dec 2011

http://imageshack.us/photo/my-images/714/20111217100355.jpg/

I want just like it...

Thanks.

Paulo Silva
on 18 Dec 2011

l=20e-6;

w=1.2e-6;

Ts=1e-9;

t1=0:Ts:w;

t0=w+Ts:Ts:l-Ts;

s1=ones(size(t1));

s0=zeros(size(t0));

s=[s1 s0];

N=2; %How many repetitions of the wave

ss=repmat(s,1,N);

t=0:Ts:N*l-Ts;

plot(t,ss)

ylim([-0.5 1.5])

Sign in to comment.

Answer by Dr. Seis
on 17 Dec 2011

signal_length = 20e-6; % length of signal in seconds

wave_length = 1.2e-6; % wavelength of rectangle pulse in seconds

amplitude = 0.75; % amplitude of wave

dt = 1e-9; % time increment in seconds

time = 0:dt:signal_length; % time samples in seconds

% Define the rectangle signal timeseries

rectsignal = sign(sin(2*pi*time/wave_length)).*ones(size(time))*amplitude;

% Plot the timeseries

plot(time,rectsignal,'r-');

Dr. Seis
on 17 Dec 2011

The above basically provides a squared-off sine wave. Is this what you want?

Onur Öçalan
on 17 Dec 2011

http://imageshack.us/photo/my-images/714/20111217100355.jpg/

I want just like it...

Thanks.

Sign in to comment.

Answer by Dr. Seis
on 18 Dec 2011

This should work:

dt = 1e-9; % time increment (in seconds)

maxtime = 200e-6; % maximum length of signal (in seconds)

time = 0:dt:maxtime; % time samples (in seconds)

wavelength = 20e-6; % distance between beginning of each pulse

wavewidth = 1.2e-6; % width of each pulse

rectpulse = ones(1,round(wavewidth/dt)); % Define width of rectangle pulse

operator = zeros(size(time)); % Set operator to zeros

operator(mod(time,wavelength)==0) = 1; % Place 1 at each pulse location

rectsignal = conv(operator,rectpulse); % Convolve rectpulse w/ operator

rectsignal = rectsignal(1,1:length(time)); % Remove any extra traces

plot(time,rectsignal); % Plot the signal

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## Dr. Seis (view profile)

## Direct link to this comment

https://kr.mathworks.com/matlabcentral/answers/24159-generate-square-wave#comment_52980

## Onur Öçalan (view profile)

## Direct link to this comment

https://kr.mathworks.com/matlabcentral/answers/24159-generate-square-wave#comment_53017

## Onur Öçalan (view profile)

## Direct link to this comment

https://kr.mathworks.com/matlabcentral/answers/24159-generate-square-wave#comment_53027

Sign in to comment.