# Generate triangle input with curve edge

11 views (last 30 days)

Show older comments

##### 1 Comment

### Accepted Answer

Image Analyst
on 7 Jan 2013

Here, try this demo that I've posted before. I added the last short section that uses conv() to smooth out the triangle wave just for you.

format longg;

format compact;

clc; % Clear command window.

workspace; % Make sure the workspace panel is showing.

fontSize = 15;

% Define some parameters that define the triangle wave.

elementsPerHalfPeriod = 30; % Number of elements in each rising or falling section.

amplitude = 5; % Peak-to-peak amplitude.

verticalOffset = -2; % Also acts as a phase shift.

numberOfPeriods = 4; % How many replicates of the triangle you want.

% Construct one cycle, up and down.

risingSignal = linspace(0, amplitude, elementsPerHalfPeriod);

fallingSignal = linspace(amplitude, 0, elementsPerHalfPeriod);

% Combine rising and falling sections into one single triangle.

oneCycle = [risingSignal, fallingSignal(2:end-1)] + verticalOffset;

x = 0 : length(oneCycle)-1;

% Now plot the triangle.

subplot(3, 1, 1);

plot(x, oneCycle, 'bo-');

grid on;

title('One Cycle of the Triangle', 'FontSize', fontSize);

% Enlarge figure to full screen.

set(gcf, 'units','normalized','outerposition',[0 0 1 1]);

% Give a name to the title bar.

set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')

% Now replicate this cycle several (numberOfPeriods) times.

triangleWaveform = repmat(oneCycle, [1 numberOfPeriods]);

x = 0 : length(triangleWaveform)-1;

% Now plot the triangle wave.

subplot(3, 1, 2);

plot(x, triangleWaveform, 'bo-');

grid on;

title('Several Cycles of the Triangle', 'FontSize', fontSize);

% Now blur it to smooth it out:

windowWidth = 9;

smoothTriangleWave = conv(triangleWaveform, ones(1,windowWidth)/windowWidth, 'same');

subplot(3, 1, 3);

plot(x, smoothTriangleWave, 'bo-');

grid on;

title('Smoothed Triangle Wave', 'FontSize', fontSize);

##### 4 Comments

Rey Kelvin Peralta
on 26 Jul 2015

### More Answers (2)

Azzi Abdelmalek
on 7 Jan 2013

fs=1000;

ts=1/fs

te=ts/30;

t=-ts/2:te:ts/2

y=(ts/2-abs(t))*fs*4-1

close,plot(t,y)

bym
on 8 Jan 2013

you can use the answer to this question http://www.mathworks.com/matlabcentral/answers/57604-help-with-plotting-triangular-wave and just use fewer terms for example:

clc;clear;close all

t = linspace(0,pi);

x = zeros(3,100);

c = 0;

terms = [1,3,5];

for m = terms

c = c+1;

n = (1:2:2*m-1);

for k=n

x(c,:) = x(c,:)+cos(k.*pi.*t)./k.^2;

end

end

plot(t,x)

##### 0 Comments

### See Also

### Community Treasure Hunt

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

Start Hunting!