Skip to content
Snippets Groups Projects
Commit 5e97e405 authored by DUBOC Marc's avatar DUBOC Marc
Browse files

Upload New File

parent 586591e8
No related branches found
No related tags found
No related merge requests found
% Charger les fichiers audio des pianos
[piano1, fs_piano1] = audioread('wav/single_tone_piano1.wav');
[piano2, fs_piano2] = audioread('wav/single_tone_piano2.wav');
% Calculer la transformée de Fourier
N_piano1 = length(piano1);
N_piano2 = length(piano2);
fft_piano1 = fft(piano1);
fft_piano2 = fft(piano2);
% Décaler les fréquences
fft_piano1_shifted = fftshift(fft_piano1);
fft_piano2_shifted = fftshift(fft_piano2);
% Calculer les fréquences correspondantes
frequencies_piano1 = (-N_piano1/2:N_piano1/2-1)*(fs_piano1/N_piano1);
frequencies_piano2 = (-N_piano2/2:N_piano2/2-1)*(fs_piano2/N_piano2);
% Convertir en décibels
amplitude_db_piano1 = 20*log10(abs(fft_piano1_shifted));
amplitude_db_piano2 = 20*log10(abs(fft_piano2_shifted));
% Visualiser les spectres
figure;
plot(frequencies_piano1, amplitude_db_piano1, 'b');
hold on;
plot(frequencies_piano2, amplitude_db_piano2, 'r');
title('Spectres d''amplitude des pianos');
xlabel('Fréquence (Hz)');
ylabel('Amplitude (dB)');
legend('Piano 1', 'Piano 2');
xlim([-fs_piano1/2 fs_piano1/2]);
% Déterminer la fréquence fondamentale
[~, idx_piano1] = max(amplitude_db_piano1);
[~, idx_piano2] = max(amplitude_db_piano2);
f1_piano1 = frequencies_piano1(idx_piano1);
f1_piano2 = frequencies_piano2(idx_piano2);
fprintf('Fréquence fondamentale du piano 1 : %.2f Hz\n', f1_piano1);
fprintf('Fréquence fondamentale du piano 2 : %.2f Hz\n', f1_piano2);
% Calculer l'inharmonicité
n = 1:10; % Considérons les 10 premières harmoniques
inharmonicity_piano1 = zeros(size(n));
inharmonicity_piano2 = zeros(size(n));
for i = 1:length(n)
f_n_theoretical1 = n(i) * f1_piano1;
f_n_theoretical2 = n(i) * f1_piano2;
% Trouver la fréquence mesurée la plus proche
[~, idx_measured1] = min(abs(frequencies_piano1 - f_n_theoretical1));
[~, idx_measured2] = min(abs(frequencies_piano2 - f_n_theoretical2));
f_n_measured1 = frequencies_piano1(idx_measured1);
f_n_measured2 = frequencies_piano2(idx_measured2);
% Calculer l'inharmonicité en cents
inharmonicity_piano1(i) = 1200 * (log2(f_n_measured1) - log2(f_n_theoretical1));
inharmonicity_piano2(i) = 1200 * (log2(f_n_measured2) - log2(f_n_theoretical2));
end
fprintf('Inharmonicité du piano 1 (en cents) :\n');
disp(inharmonicity_piano1);
fprintf('Inharmonicité du piano 2 (en cents) :\n');
disp(inharmonicity_piano2);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment