% lemez_elemzes.m
% Megütött lemez hangelemzése és -szintézise
% Kétcsatornás felvétel: 
%   1. csatorna: gyorsulásérzékelõ
%   2. csatorna: mikrofon

%% Felvétel betöltése
clear;
% y: jel, fs: mintavételi freki [Hz]
[y, fs] = audioread('lemez_000.wav');
% Idõtentely létrehozása
n = size(y, 1);
t = (0 : n-1).' / fs;

% Frekvenciavektor
f = (0 : n-1).' / n * fs;
% Spektrum
Y = fft(y, [], 1);

%% Jel ábrázolása
figure;
subplot(2, 1, 1);
plot(t, y);
xlabel('Idõ [s]');
ylabel('Jel [-]');

subplot(2, 1, 2);
plot(f, 20*log10(abs(Y)));
xlabel('Frekvencia [Hz]');
ylabel('Amplitúdó [dB]');
xlim([0 4e3]);
%% Mikrofonjel szûrése
% (Felüláteresztõ szûrõ 50 Hz-tõl, épületzajok kiszûrésére)
[b, a] = butter(3, 50/(fs/2), 'high');
y_filt = filter(b, a, y, [], 1);

%% Effektív érték számítása 
T_rms = 0.01;
y_rms = running_rms(y_filt, fs, T_rms);

figure;
semilogy(t, y_rms);
xlabel('Idõ [s]');
ylabel('Effektív érték [-]');

%% Analízis komponensenként + szintézis
% Mikrofoncsatorna kiválasztása
ch_idx = 2;
% Szintetizálandó frekvenciák (spektrumkép alapján)
center_vec = [118 269 485 507 653];
% Sávszélesség csatornánként [Hz]
bw = 15;
% Idõeltolás (nagyjából itt van az ütés)
t0 = 0.7;

% Elõfoglalás a szûrt és szintetizált jeleknek
y_meas = zeros(n, 1);
y_synth = zeros(n, 1);

% Analízis / szintézis sávonként
for i = 1 : length(center_vec)
    % Sávszûrés az aktuális sávra
    center = center_vec(i);
    [b, a] = butter(3, (center+bw*[-1 1])/(fs/2));
    y_one = filter(b, a, y_filt);

    % Effektív érték számítása
    T_rms = 0.1;
    y_rms = running_rms(y_one, fs, T_rms);

    % Lecsengési idõ illesztése
    t_lim = [2 6];
    sel = t > t_lim(1) & t < t_lim(2);
    p = polyfit(t(sel), log(y_rms(sel, ch_idx)), 1);
    tau = -1 / p(1);
    
    % Amplitúdó meghatározása (sqrt(2) az effektív érték miatt)
    A = sqrt(2) * exp(polyval(p, 0));
    
    % Szintetizált lecsengõ jel (t0-ban 0 fázis)
    y_s = A * sin(2*pi*(t-t0)*center) .* exp(-t/tau);
    y_s(t < t0) = 0;
    
    % Tárolás
    y_meas = y_meas + y_one(:, ch_idx);
    y_synth = y_synth + y_s;

    fprintf('Component %d, f = %.1f Hz, A = %.2f, tau = %.3f s\n', ...
        i, center, A, tau);
end

%% Ábrázolás
figure;
plot(t, y_meas);
hold on;
plot(t, y_synth);
xlabel('Idõ [s]');
ylabel('Jelalak [-]');
legend({'Mért jel (szûrt)', 'Szintetizált jel'});

%% Meghallgatás
soundsc([y_meas; y_synth], fs);
