add wave genration functions

This commit is contained in:
Arthur Lu 2021-12-01 15:17:58 -08:00
parent 13c52f8c7a
commit 2ce7e6a7a4
5 changed files with 67 additions and 0 deletions

15
src/generate_sine.m Normal file
View File

@ -0,0 +1,15 @@
function x = generate_sine(amplitude, frequency, phase, fs, duration)
%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;
for i = 1:n
t = i * dt;
x(i) = A * sin(2 * pi * f * t - p);
end
end

20
src/generate_square.m Normal file
View File

@ -0,0 +1,20 @@
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;
for i = 1:n
t = i * dt;
st = mod(f * t - p, 1);
if(st < duty)
x(i) = A;
else
x(i) = -A;
end
end
end

19
src/generate_triangle.m Normal file
View File

@ -0,0 +1,19 @@
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;
for i = 1:n
t = i * dt;
st = mod(f * t - p, 1);
if(st < duty)
x(i) = A*(1/duty * st - 0.5);
else
x(i) = A*(-(1/(1-duty))*st + (duty/(1-duty)) + 1 - 0.5);
end
end
end

5
src/play_wave.m Normal file
View File

@ -0,0 +1,5 @@
function play_wave(wave, fs)
%PLAY_WAVE:Arthur Lu plays a wave as sound
sound(wave, fs)
end

8
src/plot_wave.m Normal file
View File

@ -0,0 +1,8 @@
function plot_wave(waveform, fs, duration)
%PLOT_WAVE:Arthur Lu plots a waveform
x = linspace(0, duration, fs * duration);
plot(x, waveform);
xlabel("time");
ylabel("amplitude");
end