diff --git a/acoustics/Problem description.pdf b/acoustics/Problem description.pdf
new file mode 100644
index 0000000..6053027
Binary files /dev/null and b/acoustics/Problem description.pdf differ
diff --git a/acoustics/Problem description.svg b/acoustics/Problem description.svg
new file mode 100644
index 0000000..30bc523
--- /dev/null
+++ b/acoustics/Problem description.svg
@@ -0,0 +1,597 @@
+
+
+
+
diff --git a/acoustics/Problem_description.png b/acoustics/Problem_description.png
new file mode 100644
index 0000000..2cec556
Binary files /dev/null and b/acoustics/Problem_description.png differ
diff --git a/acoustics/acousticsOfMirrors.m b/acoustics/acousticsOfMirrors.m
new file mode 100644
index 0000000..0eb2578
--- /dev/null
+++ b/acoustics/acousticsOfMirrors.m
@@ -0,0 +1,72 @@
+function acousticsOfMirrors
+ % Speed of longitudinal wave propagation in the considered media.
+ % we take the mean value of all source we found
+ vlWater = mean([1480,1483,1484,1493,1496]);
+ vlCopper = mean([4660,4760,4760,4660,3560]);
+ vlPCB = mean([4726,3070,2100,2460]);
+
+ % Speed of shear wave propagation in the considered media.
+ % we take the mean value of all source we found
+ vsWater = vlWater;
+ vsCopper = mean([2330,2325,2325]);
+ vsPCB = vlPCB / 2; % hypothese
+
+ % critical angles:
+ disp (strcat("critical angle of longitudinal transmission Water->Copper : ", num2str(rad2deg(criticalAngleOfTransmission(vlWater, vlCopper)))));
+ disp (strcat("critical angle of shear transmission Water->Copper : ", num2str(rad2deg(criticalAngleOfTransmission(vlWater, vsCopper)))));
+
+ % hereafter are computed the angles between the propagation direction and
+ % the normal vector of the planar boundary between media
+ % naming convention: ("P"|"S") "_" ("R"|"T") "_" is the angle between the normal vector
+ % of the boundary X and the propagation vector
+ % of the pressure (P) or shear (S) wave reflected (R) or transmitted (T) by the boundary X for the Nth time
+ % example: P_R_A_2 is the pressure wave reflected by the boundary A for the second time
+
+ incident = deg2rad(45);
+
+ % Pressure waves
+ P_T_A_1 = transmittedAngle(vlWater, vlCopper, incident);
+ P_T_A_2 = transmittedAngle(vlCopper, vlWater, P_T_A_1);
+ P_T_B_1 = transmittedAngle(vlCopper, vlPCB, P_T_A_1);
+
+ % Shear waves
+ S_R_A_1 = transmittedAngle(vlWater, vsWater, incident);
+ S_T_A_1 = transmittedAngle(vsWater, vsCopper, incident);
+ S_T_A_2 = transmittedAngle(vsCopper, vsWater, S_T_A_1);
+ S_T_B_1 = transmittedAngle(vsCopper, vsPCB, S_T_A_1);
+
+ % display in octave console
+ disp(strcat("incident : ",num2str(rad2deg(incident))));
+ disp(strcat("P_T_A_1 : ",num2str(rad2deg(P_T_A_1))));
+ disp(strcat("P_T_A_2 : ",num2str(rad2deg(P_T_A_2))));
+ disp(strcat("P_T_B_1 : ",num2str(rad2deg(P_T_B_1))));
+ disp(strcat("S_R_A_1 : ",num2str(rad2deg(S_R_A_1))));
+ disp(strcat("S_T_A_1 : ",num2str(rad2deg(S_T_A_1))));
+ disp(strcat("S_T_A_2 : ",num2str(rad2deg(S_T_A_2))));
+ disp(strcat("S_T_B_1 : ",num2str(rad2deg(S_T_B_1))));
+
+ return;
+endfunction
+
+% Share of the energy which is reflected at the boundary between two
+% media of acoustic impedences "z1" and "z2"
+function x = reflectionCoeff (z1, z2)
+ x = ((z2-z1)/(z2+z1))^2;
+ return;
+endfunction
+
+% Angle of the transmitted wave meeting the boundary between two
+% media of longitudinal wave velocities "v1" and "v2" at an incendent
+% angle "incident_angle"
+function x = transmittedAngle (v1, v2, incident_angle)
+ x = asin (sin(incident_angle)*v2/v1);
+ return;
+endfunction
+
+% returns the critical angle for longitudinal wave transmission. Any
+% wave meeting the boundary with a greater angle than those returned
+% will be totally reflected
+function x = criticalAngleOfTransmission(v1, v2)
+ x = asin (v1/v2);
+ return;
+endfunction
\ No newline at end of file
diff --git a/acoustics/envelope_detection.m b/acoustics/envelope_detection.m
new file mode 100644
index 0000000..daf026c
--- /dev/null
+++ b/acoustics/envelope_detection.m
@@ -0,0 +1,36 @@
+function [envelope] = envelope_detection (signal, fech, fmin, fmax,option)
+
+%function to determine the envelope of a the data vector named signal
+%fech is the sampling frequency of the data vector in MHz
+%we add a filtering of the signal between fmin and fmax in MHz
+%option refer to the option of the zero padding process:
+%sigzp is filled with 0 from N to Nzeropad if option = 0
+%sigzp is filled with the mean of sig from N to Nzeropad if option != 0
+%%%%
+%if signal have an offset, the output envelope won't have, but still need to put
+%option != 0 if signal have an offset and want a clean envelope
+
+if fmin<0
+ fmin=0;
+endif
+if fmax>fech/2
+ fmax=fech/2;
+endif
+if fmax