% Pat O'Keefe
% Project 1
% Part 4a

close all;
clear all;

% define sampling rate and set up a time vector
Fs = 8000;
TotalTime = 4;
t = -TotalTime/2+1/Fs:1/Fs:TotalTime/2;

earDistance = .17; % distance between ears

c = 345; %speed of sound

freq = 350; % frequency of the source

vSource = 15; % velocity of the source

distance1 = vSource*t+earDistance/2; % horizontal position of source w.r.t. observer
distance2 = vSource*t-earDistance/2;

envelope1 = 1.0./distance1; % envelope of the sound
envelope2 = 1.0./distance2;

% initialize vector
f = zeros(1,length(t));


% apply doppler effect and limit envelope
for i = 1:length(t)
    if t(i)<=0
        f(i) = freq*c/(c-vSource);
    else
        f(i) = freq*c/(c+vSource);
    end

    if abs(envelope1(i)) > 0.5
        if( sign(envelope1(i)) ~= 0)
            envelope1(i) = 0.5*sign(envelope1(i));
            envelope2(i) = 0.5*sign(envelope2(i));
        else
            envelope1(i) = 0.5;
            envelope2(i) = 0.5;
        end
    end

end

% turn into final sound and normalize
x(:,1) = envelope1.*cos(2*pi*f.*t);
x(:,2) = envelope2.*cos(2*pi*f.*t);

x(:,1) = x(:,1)./max(x(:,1));
x(:,2) = x(:,2)./max(x(:,2));


figure(1)
plot(t,vSource*ones(1,length(t))); grid on;
title('Velocity of Source Relative to Observer - Part 4a');xlabel('Time (sec)');ylabel('Velocity');

figure(2)
plot(t,envelope1);grid on;hold on;
plot(t,envelope2,'r');
legend('Observer 1','Observer 2');
title('Signal Envelope - Part 4a');xlabel('Time (sec)');ylabel('Amplitude');

figure(3)
plot(t,f);grid on;
title('Apparent Frequency of Source - Part 4a');xlabel('Time (sec)');ylabel('Frequency (Hz)');

sound(x,Fs);