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

Learn moreOpportunities for recent engineering grads.

Apply Today
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.

*No products are associated with this question.*

Answer by Image Analyst on 7 Jan 2013

Accepted answer

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);

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)

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)

## 1 Comment

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/58191#comment_121312

It is best to show a sample of your desired output.

http://www.mathworks.com/matlabcentral/answers/7924-where-can-i-upload-images-and-files-for-use-on-matlab-answers