function [s, t] = csinplot(amp,fre,phs,trange, fs, arange)
% This fucntion creates a sinudoid based on the following input
% parameters:
%
% [s, t] = csinplot(AMP, FRE, PHS, TRANGE, FS, ARANGE)
%
% AMP is the amplitude of the sinusoid
% FRE is the frequency of the sinusoid in Hz
% PHS is the phase of the sinusoid in radians
% TRANGE is a 2 point vector for the start and stop points in seconds
% FS is the sampling frequency of the sine in samples per second (usually
% at least 20 points per period will make for a smooth plot, therefore, FS
% should be 10 times bigger than FRE).
% ARANGE is a 2 point vector that clips the waveform in amplitude. The lower
% point first and then the higher. If you don't want clipping, set the ARANGE
% points bigger than the signal range.
%
% This output will be a labeled plot in a figure window, and the signal
% vector S with time axis points T in seconds.
% Written by Kevin D. Donohue 9/23/04 (donohue@engr.uky.edu)
% Create Time axis:
tindex = (round(trange(1)*fs):round(trange(2)*fs)); % convert time range to
% integer samples
t = tindex/fs; % Divide by sampling frequency to get actual time sample values
s = amp*sin(2*pi*fre*t+phs); % Compute unclipped sine points
% Apply clip from below
lowindex = find(s < arange(1)); % Find the index values of all sample points below low clip
if ~isempty(lowindex) % if points exist in this range ...
s(lowindex) = arange(1); % Assign all points below, to the clip value
end
% Apply clip from above
highindex = find(s > arange(2)); % Find the index values of all sample points above high clip
if ~isempty(highindex) % if points exist in this range ...
s(highindex) = arange(2); % Assign all points above, to the clip value
end
% Comment out lines below to not plot result in function
figure % Open a new figure window
plot(t,s)
xlabel('Seconds')
ylabel('Amplitude')
title(['Sine waveform at ', num2str(fre) , ' Hertz'])