diff --git a/SAR.m b/SAR.m index 9d1fc9ac79e1ed03d8ac7589b37665c35530e302..8965062f97c10b1f0dc0c5b4c955370f2b735571 100644 --- a/SAR.m +++ b/SAR.m @@ -1,14 +1,14 @@ % Question 1 : -%[x1,fe1]=audioread("C:\Users\samue\OneDrive\Documents\Cours\cours IMT atlantique\A1\elec inge\traitement du signal\SAR\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano1.wav"); -%[x2,fe2]=audioread("C:\Users\samue\OneDrive\Documents\Cours\cours IMT atlantique\A1\elec inge\traitement du signal\SAR\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav"); +[x1,fe1]=audioread("C:\Users\samue\OneDrive\Documents\Cours\cours IMT atlantique\A1\elec inge\traitement du signal\SAR\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano1.wav"); +[x2,fe2]=audioread("C:\Users\samue\OneDrive\Documents\Cours\cours IMT atlantique\A1\elec inge\traitement du signal\SAR\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav"); -[x,fe]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_celtic-harp-a3.wav"); +%[x,fe]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_celtic-harp-a3.wav"); soundsc(x,fe); -L1 = length(x1); -X1 = fftshift(fft(x1)); -f1 = (-L1/2 : L1/2 - 1)*(fe1/L1); +L1 = length(x1) +X1 = fftshift(fft(x1)) +f1 = (-L1/2 : L1/2 - 1)*(fe1/L1) figure; plot(f1, log(abs(X1)),'r'); @@ -19,11 +19,11 @@ ylabel("log|X(f)|") % Question 2 : -[x1,fe1]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano1.wav"); -[x2,fe2]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav"); +%[x1,fe1]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano1.wav"); +%[x2,fe2]=audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav"); -soundsc(x1,fe1); -soundsc(x2,fe2); +%soundsc(x1,fe1); +%soundsc(x2,fe2); L1 = length(x1); L2 = length(x2); @@ -43,10 +43,9 @@ xlabel("fréquence en Hz"); ylabel("10*log|X(f)|"); -% Question 3 : +%Question 3 : freq_r=[220;442;663;885;1108;1331;1556;1782;2009]; -amplitude = []; % Durée et fréquence d'échantillonnage Fe = 44100; % fréquence d'échantillonnage (standard audio) @@ -58,7 +57,7 @@ s = zeros(size(t)); % Ajouter les sinusoïdes for k = 1:length(freq_r) - s = s + amplitude * sin(2*pi*freq_r(k)*t); + s = s + sin(2*pi*freq_r(k)*t); end % Normaliser pour éviter la saturation (valeurs entre -1 et 1) @@ -71,49 +70,21 @@ soundsc(s, Fe); % Question 4 : -% Define ADSR parameters -A = 0.1; % Attack time (seconds) -D = 0.005; % Decay time (seconds) -S = 0.8; % Sustain level (0 to 1) -R = 0.75; % Release time (seconds) - -fs = 44100; % Sampling frequency (Hz) - - -% Total duration of the envelope -totalTime = A + D + R; - -% totalTime = totalTime * 6; % Extend the envelope for 6 seconds -t = linspace(0, totalTime, totalTime * fs); - - -% Generate ADSR envelope -attack = linspace(0, 1, A * fs); -decay = linspace(1, S, D * fs); -release = linspace(S, 0, R * fs); - - -% Combine all segments -adsrEnvelope = [attack, decay, release]; - +function s = signal(t, freq_r) + s = zeros(size(t)); + for k = 1:length(freq_r) + s = s + sin(2*pi*freq_r(k)*t); + end +end -% Plot the envelope figure; -plot(t, adsrEnvelope); -xlabel('Time (s)'); -ylabel('Amplitude'); -title('ADSR Envelope'); - - -[xA, feA] = audioread("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav"); - - - -% Apply the ADSR envelope to the audio signal -adsrSignal = xA(1:length(adsrEnvelope)) .* adsrEnvelope'; -sound(adsrSignal, feA); +plot(t, signal(t, freq_r)) -audiowrite("C:\Users\camil\Documents\IMT_A\semestre_6\electrical engineering\tp-audio-ee-etudiant-c24leray\src\wav\single_tone_piano2.wav", adsrSignal, fe); +t = [0.1 0.3 0.5 0.7 1]; % Temps en secondes +env = [signal(0.1) signal(0.3) signal(0.5) signal(0.7) signal(1)]; % Valeurs d'amplitude correspondantes +t_total = length(s)/Fe; % Durée totale du signal en secondes +t_interpolated = linspace(0, t_total, length(s)); % Temps interpolé +env_interpolated = interp1(t, env, t_interpolated); % Enveloppe interpolée -% Question 5 : \ No newline at end of file +s_envelope = s .* env_interpolated; % Signal avec enveloppe ADSR \ No newline at end of file diff --git a/question_21.asv b/question_21.asv index bf76cfc959a12d3680fe04587952c7dbe38ed2d4..39cb74bcb0ed337ae10e6e9513677697e6960aa7 100644 --- a/question_21.asv +++ b/question_21.asv @@ -1,14 +1,15 @@ -fs = 10e3; % Fréquence d'échantillonnage -T = 2*pi; +fe = 10e3; % Fréquence d'échantillonnage +T = 1/10; +Te=1/fs; t = -1:1/fs:1; % Durée du signal x_1 =square(2*pi*t/T); %fft -X_1 = 10*log10(abs(fftshift(fft(x)))); +X_1 = 10*log10(abs(fftshift(fft(x_1)))); N =length(t) ; -freq = (-N/2:N/2-1)*(1/(T*N)); +freq = (-N/2:N/2-1)*(1/(Te*N)); figure; stem(freq, X_1, '.') % Tracé du signal @@ -32,39 +33,35 @@ title('spectre du signal en dent de scie'); %question 2.2------------------------------------------ -% Paramètres -T = 2*pi; -N = 1000; -t = linspace(-T/2, T/2, N); - -% Signal carré en entrée (amplitude ±1) -x = sign(sin(2*pi*t/T)); - % Filtrage : y(k) = 1/2 (x(k) + x(k-1)) -y = zeros(size(x)); -y(2:end) = 0.5 * (x(2:end) + x(1:end-1)); +b=[1/2,1/2]; +a=1; +y = filter(a,b,x_1); + % FFT -X = fftshift(fft(x))/N; -Y = fftshift(fft(y))/N; -f = (-N/2:N/2-1)*(1/(T/N)); % Axe fréquentiel -omega = 2*pi*f*(T/N); % Fréquence angulaire en rad/sample +X1 = 20*log10(abs(fftshift(fft(x_1)))); +Y = 20*log10(abs(fftshift(fft(y)))); +f = (-N/2:N/2-1)*(1/(Te/N)); % Axe fréquentiel +f_lin=linspace(-1/(2*Te),1/(2*Te),N); +disp(f_lin) + % Réponse théorique du filtre -H = abs(cos(omega/2)); +H = (1/2*abs(1+exp(-2*1i*pi*f_lin*Te))).^2; % Affichage figure; subplot(3,1,1); -plot(t, x); title('Signal d''entrée x(k)'); +plot(t, x_1); title('Signal d''entrée x(k)'); subplot(3,1,2); plot(t, y); title('Signal filtré y(k)'); subplot(3,1,3); -plot(f, abs(Y), 'b', 'DisplayName', '|Y(f)|'); +plot(f_lin, abs(Y), 'b', 'DisplayName', '|Y(f)|^2'); hold on; -plot(f, abs(X).*H, 'r--', 'DisplayName', '|X(f)| × |H(f)| (théorique)'); +plot(f_lin, abs(X2).*H, 'r', 'DisplayName', '|X(f)|^2 × |H(f)|^2 (théorique)'); legend; xlabel('Fréquence (Hz)'); title('Spectre de sortie comparé à la théorie'); xlim([-10 10]); diff --git a/question_21.m b/question_21.m index 0edf22b9cb66f653a12f7c6748ecc9605ef75fc6..757b2982857f1cd470cfd85f0e34677e2e54518e 100644 --- a/question_21.m +++ b/question_21.m @@ -1,14 +1,15 @@ -fs = 10e3; % Fréquence d'échantillonnage +fe = 10e3; % Fréquence d'échantillonnage T = 1/10; +Te=1/fs; t = -1:1/fs:1; % Durée du signal x_1 =square(2*pi*t/T); %fft -X_1 = 10*log10(abs(fftshift(fft(x)))); +X_1 = 10*log10(abs(fftshift(fft(x_1)))); N =length(t) ; -freq = (-N/2:N/2-1)*(1/(T*N)); +freq = (-N/2:N/2-1)*(1/(Te*N)); figure; stem(freq, X_1, '.') % Tracé du signal @@ -33,31 +34,41 @@ title('spectre du signal en dent de scie'); %question 2.2------------------------------------------ % Filtrage : y(k) = 1/2 (x(k) + x(k-1)) -y = zeros(size(x_1)); -y(2:end) = 0.5 * (x_1(2:end) + x_1(1:end-1)); +b=[1/2,1/2]; +a=1; +y = filter(b,a,x_1); + % FFT -X2 = fftshift(fft(x_1))/N; -Y = fftshift(fft(y))/N; -f = (-N/2:N/2-1)*(1/(T/N)); % Axe fréquentiel -omega = 2*pi*f*(T/N); % Fréquence angulaire en rad/sample +X1 = 20*log10(abs(fftshift(fft(x_1)))); +Y = 20*log10(abs(fftshift(fft(y)))); + +f_lin=linspace(-1/(2*Te),1/(2*Te),N); +disp(f_lin) + % Réponse théorique du filtre -H = abs(cos(omega/2)); +H = (1/2*abs(1+exp(-2*1i*pi*f_lin*Te))).^2; % Affichage figure; -subplot(3,1,1); -plot(t, x_1); title('Signal d''entrée x(k)'); +subplot(2,1,1); +plot(f_lin, X1); +title('Signal d''entrée |X(f)|^2') +xlabel('Fréquence (Hz)') +ylabel('|X(f)|^2') -subplot(3,1,2); -plot(t, y); title('Signal filtré y(k)'); -subplot(3,1,3); -plot(f, abs(Y), 'b', 'DisplayName', '|Y(f)|'); +subplot(2,1,2); + +stem(f_lin, abs(Y), 'b.', 'DisplayName', '|Y(f)|^2'); hold on; -plot(f, abs(X2).*H, 'r', 'DisplayName', '|X(f)| × |H(f)| (théorique)'); -legend; xlabel('Fréquence (Hz)'); +stem(f_lin, abs(X1).*H, 'r.', 'DisplayName', '|X(f)|^2 × |H(f)|^2 (théorique)'); +legend; xlabel('Fréquence (Hz)'); ylabel('|Y(f)|^2') title('Spectre de sortie comparé à la théorie'); -xlim([-10 10]); +xlim([-5000 5000]); + + +%question 2.3 +sound(y,fe)