Skip to content
Snippets Groups Projects
Commit ccc73d0a authored by YE Victor's avatar YE Victor
Browse files

Upload New File

parent bef2e89b
No related branches found
No related tags found
No related merge requests found
%Q1.3
% Charger un son
fichier = fullfile('wav', 'single_tone_piano1');
[signal, Fs] = audioread(fichier);
%Passer en mono si nécessaire
if size(signal,2) == 2
signal = mean(signal,2);
end
duration = 1; % en secondes
N = min(length(signal), round(duration*Fs));
signal = signal(1:N);
% Calculer la FFT
Y = fft(signal);
Nfft = length(Y);
f = (0:Nfft-1)*(Fs/Nfft);
% Utiliser uniquement la moitié du spectre
Y_half = Y(1:floor(Nfft/2));
f_half = f(1:floor(Nfft/2));
% Trouver la fréquence fondamentale automatiquement
[~, idx_fundamental] = max(abs(Y_half));
f0 = f_half(idx_fundamental);
fprintf('Fréquence fondamentale estimée : %.2f Hz\n', f0);
% Calculer les 8 premières harmoniques
harmonics_freqs = f0 * (1:8);
harmonics_amps = zeros(1,8);
for k = 1:8
% Trouver l'index dans f_half le plus proche de l'harmonique k
[~, idx] = min(abs(f_half - harmonics_freqs(k)));
harmonics_amps(k) = abs(Y_half(idx));
end
% Durée du son synthétisé
t = (0:1/Fs:duration)';
% Synthèse du son
synth_signal = zeros(size(t));
for k = 1:8
synth_signal = synth_signal + harmonics_amps(k) * sin(2*pi*harmonics_freqs(k)*t);
end
% Normaliser pour éviter la saturation
synth_signal = synth_signal / max(abs(synth_signal));
% Écouter le son synthétisé
sound(synth_signal, Fs);
% Afficher les harmoniques trouvées
disp('Fréquences et amplitudes des 8 premières harmoniques :');
for k = 1:8
fprintf('Harmonique %d : %.2f Hz, amplitude = %.4f\n', k, harmonics_freqs(k), harmonics_amps(k));
end
% Pour enregistrer dans un fichier si besoin
audiowrite('synth_piano.wav', synth_signal, Fs);
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment