From b14496473b621ed154760e25620d317adcd15b55 Mon Sep 17 00:00:00 2001 From: DUBOC Marc <marc.duboc@imt-atlantique.net> Date: Fri, 2 May 2025 06:46:10 +0000 Subject: [PATCH] Upload New File --- untitled.m | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 untitled.m diff --git a/untitled.m b/untitled.m new file mode 100644 index 0000000..61ff53a --- /dev/null +++ b/untitled.m @@ -0,0 +1,69 @@ +% 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); -- GitLab