Generate triangle input with curve edge

조회 수: 18 (최근 30일)
K
K 2013년 1월 7일
댓글: Rey Kelvin Peralta 2015년 7월 26일
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.

채택된 답변

Image Analyst
Image Analyst 2013년 1월 7일
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
Image Analyst
Image Analyst 2015년 7월 25일
Post your 1-D or 2-D data/image in a new question. I can't really visualize what you're asking - it's far, far too general to be answered.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Azzi Abdelmalek
Azzi Abdelmalek 2013년 1월 7일
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
K
K 2013년 1월 7일
Thank you for your answer. However, what I am trying to do is a triangle with a curvy edge instead of sharp/pointy edge.

댓글을 달려면 로그인하십시오.


bym
bym 2013년 1월 8일
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)

태그

Community Treasure Hunt

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

Start Hunting!

Translated by