MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

# Generate triangle input with curve edge

Asked by K on 7 Jan 2013

Hello, Does anyone have an idea, how can I generate triangle wave input with curve edge. That's mean the edge is not sharp but smooth.

http://imageshack.us/photo/my-images/341/92145559.png/

## Products

No products are associated with this question.

Answer by 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);
```

## 1 Comment

K on 8 Jan 2013

Thank you for your help. It is very usefull.

Answer by 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)
```

## 1 Comment

K on 7 Jan 2013

Thank you for your answer. However, what I am trying to do is a triangle with a curvy edge instead of sharp/pointy edge.

Answer by proecsm 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)```