From 23eaa67d253ac834b60e2bcf4da6f3ffc24cde9c Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Fri, 3 Dec 2021 20:05:38 -0800 Subject: [PATCH] additional comments for : generate_sine, generate_square, generate_triangle, from Benjamin Liou --- src/generate_sine.m | 33 ++++++++++++++++++++--------- src/generate_square.m | 45 +++++++++++++++++++++++++++++----------- src/generate_triangle.m | 46 +++++++++++++++++++++++++++++++---------- 3 files changed, 91 insertions(+), 33 deletions(-) diff --git a/src/generate_sine.m b/src/generate_sine.m index 4add313..86a86fc 100644 --- a/src/generate_sine.m +++ b/src/generate_sine.m @@ -1,15 +1,28 @@ function x = generate_sine(amplitude, frequency, phase, fs, duration, duty) -%GENERATE_SINE:Arthur Lu returns a matrix of sampled sine wave, where the -%phase shift is in number of periods - x = zeros(1, fs * duration); - A = amplitude; - f = frequency; - p = phase; - n = fs * duration; - dt = 1 / fs; +% GENERATE_SINE: returns a matrix of sampled sine wave + +% CONTRIBUTORS: +% Arthur Lu: Original author +% Benjamin Liou: refactoring and annotations + +% DOCUMENTATION: +% phase shift is in number of periods +% fs is the sampling frequency: how many sample points per second +% duration is time in seconds +% duty does not apply for sinusoids + + + % initialize local variables from input arguments + n = fs * duration; % number of samples (length of matrix) + dt = 1 / fs; % sampling period: time between two sample points + + % initialize a one dimensional zero matrix to be populated + x = zeros(1, n); + + % populate the matrix for i = 1:n - t = i * dt; - x(i) = A * sin(2 * pi * f * t - p); + t = i * dt; % time at the i'th sample + x(i) = amplitude * sin(2 * pi * frequency * t - phase); end end diff --git a/src/generate_square.m b/src/generate_square.m index bf3134e..1abc6f3 100644 --- a/src/generate_square.m +++ b/src/generate_square.m @@ -1,19 +1,40 @@ function x = generate_square(amplitude, frequency, phase, fs, duration, duty) -%GENERATE_SINE:Arthur Lu returns a matrix of sampled sine wave, where the -%phase shift is in number of periods - x = zeros(1, fs * duration); - A = amplitude; - f = frequency; - p = phase; - n = fs * duration; - dt = 1 / fs; +% GENERATE_SQUARE: returns a matrix of sampled square wave + +% CONTRIBUTORS: +% Arthur Lu: Original author +% Benjamin Liou: refactoring and annotations + +% DOCUMENTATION: +% phase shift is in number of periods +% fs is the sampling frequency: how many sample points per second +% duration is time in seconds +% duty cycle should be a number between 0 and 1. + % duty of 0 or less would return -amplitude for all sample points + % duty of 0.25 would return +amplitude for first quarter of each cycle + % then return -amplitude for the remaining three-fourths + % duty of 1 would return all +amplitude + + +% initialize local variables from input arguments + n = fs * duration; % number of samples (length of matrix) + dt = 1 / fs; % sampling period: time between two sample points + + % initialize a one dimensional zero matrix to be populated + x = zeros(1, n); + + % populate the matrix for i = 1:n - t = i * dt; - st = mod(f * t - p, 1); + t = i * dt; % time at the i'th sample + + % periodic ramp from 0 to 1 + % progression through a cycle + st = mod(frequency * t - phase, 1); + if(st < duty) - x(i) = A; + x(i) = amplitude; else - x(i) = -A; + x(i) = -amplitude; end end end diff --git a/src/generate_triangle.m b/src/generate_triangle.m index 94b78ad..f1a50ca 100644 --- a/src/generate_triangle.m +++ b/src/generate_triangle.m @@ -1,19 +1,43 @@ function x = generate_triangle(amplitude, frequency, phase, fs, duration, duty) -%GENERATE_SINE:Arthur Lu returns a matrix of sampled sine wave, where the -%phase shift is in number of periods - x = zeros(1, fs * duration); - A = amplitude; - f = frequency; - p = phase; - n = fs * duration; - dt = 1 / fs; +% GENERATE_TRIANGLE: returns a matrix of sampled square wave + +% CONTRIBUTORS: +% Arthur Lu: Original author +% Benjamin Liou: refactoring and annotations + +% DOCUMENTATION: +% phase shift is in number of periods +% fs is the sampling frequency: how many sample points per second +% duration is time in seconds +% duty cycle should be a number between 0 and 1. + % duty of 0.25 would have positive slope for first quarter of each cycle + % then have negative slope for the remaining three-fourths + + + +% initialize local variables from input arguments + n = fs * duration; % number of samples (length of matrix) + dt = 1 / fs; % sampling period: time between two sample points + + % initialize a one dimensional zero matrix to be populated + x = zeros(1, n); + + % populate the matrix for i = 1:n t = i * dt; - st = mod(f * t - p, 1); + + % periodic ramp from 0 to 1 + % progression through a cycle + st = mod(frequency * t - phase, 1); + if(st < duty) - x(i) = A*(1/duty * st - 0.5); + slope = amplitude / duty; + intercept = -0.5 * amplitude; + x(i) = slope * st + intercept; else - x(i) = A*(-(1/(1-duty))*st + (duty/(1-duty)) + 1 - 0.5); + slope = -amplitude / (1 - duty); + intercept = amplitude*( duty/(1-duty) + 0.5); + x(i) = slope * st + intercept; end end end \ No newline at end of file