Generate triangle input with curve edge
3 次查看(过去 30 天)
显示 更早的评论
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.
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
采纳的回答
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
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.
Rey Kelvin Peralta
2015-7-26
I already did sir thank you here is the link http://www.mathworks.com/matlabcentral/answers/231216-can-anybody-help-me-smoothen-out-the-edges-on-my-3d-plot
更多回答(2 个)
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)
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)
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!