% ------------------------------------------------------------
% DOPPLER DEMO - πηγή που έρχεται και φεύγει
%
% Η πηγή πλησιάζει τον παρατηρητή, περνάει από μπροστά του
% και μετά απομακρύνεται.
%
% Ακούγεται:
% - πιο σιγά όταν είναι μακριά
% - πιο δυνατά όταν πλησιάζει
% - αλλαγή pitch όταν περνάει
% - ξανά πιο σιγά όταν φεύγει
% ------------------------------------------------------------

clear; close all; clc;

fs = 44100;
t = 0:1/fs:8;

f0 = 700;        % πραγματική συχνότητα πηγής
c = 343;         % ταχύτητα ήχου στον αέρα
v = 35;          % ταχύτητα πηγής

% θέση πηγής στον χρόνο
x = linspace(-120, 120, length(t));   % από μακριά αριστερά σε μακριά δεξιά

% απόσταση από τον παρατηρητή
d_min = 5;                           % ελάχιστη απόσταση όταν περνάει
r = sqrt(x.^2 + d_min^2);

% ταχύτητα κατά τη διεύθυνση προς τον παρατηρητή
v_radial = -v .* x ./ r;

% Doppler συχνότητα
f_t = f0 .* c ./ (c - v_radial);

% ένταση: πιο δυνατά όταν είναι κοντά
amp = 1 ./ r;
amp = amp ./ max(amp);               % κανονικοποίηση
amp = amp.^0.7;                      % πιο φυσική μεταβολή

% δημιουργία ήχου
phase = 2*pi*cumsum(f_t)/fs;
signal = amp .* sin(phase);

% plot
figure;

subplot(2,1,1)
plot(t, f_t, 'LineWidth', 2)
grid on
xlabel('Time (s)')
ylabel('Frequency (Hz)')
title('Doppler frequency evolution')

subplot(2,1,2)
plot(t, amp, 'LineWidth', 2)
grid on
xlabel('Time (s)')
ylabel('Relative amplitude')
title('Amplitude change as source approaches and leaves')

sound(signal, fs)