Machine à laver le linge

Le fichier data/machine_a_laver.wav contient le bruit d’une machine à laver le linge lors de l’essorage. Quelle est la fréquence de rotation du tambour ?


Solution

from scipy.io.wavfile import read
from numpy.fft import rfft, rfftfreq
from matplotlib.pyplot import figure
import numpy as np
samplerate, amplitude = read('data/machine_a_laver.wav')
print(samplerate)
delta_t = 1/samplerate
N = len(amplitude)
print(N)
T = N*delta_t
print(T)
44100
414380
9.396371882086168
amplitude_tilde = rfft(amplitude)
freq = rfftfreq(N, delta_t)
fig = figure()
ax = fig.subplots(1, 1)

ax.loglog(freq, np.abs(amplitude_tilde)**2)
ax.set_ylim(1E-3, None)

ax.set_xlabel('Frequence [Hz]')
ax.set_ylabel('Puissance [u.a]')

ax.grid(which='both')
../_images/6eac1a1e5fe526bff8bbd06d60fd9404bfa4124eb8aec1c386caa26240ef5008.png

La fréquence typique de rotation est de 1200 tours par minutes, soit environ 20 Hz. Il s’agir du pic de gauche. On zoom dessus.

mask = np.abs(freq-20)<5

fig = figure()
ax = fig.subplots(1, 1)

ax.semilogy(freq[mask], np.abs(amplitude_tilde[mask])**2)
ax.grid()

i = np.argmax(np.abs(amplitude_tilde[mask])**2)
freq_max = freq[mask][i]
amp_max = np.abs(amplitude_tilde[mask][i])**2

ax.semilogy(freq_max, amp_max, 'ko')
ax.text(freq_max, amp_max, f'  {freq_max:.2f} Hz')

ax.set_xlabel('Frequence [Hz]')
ax.set_ylabel('Puissance [u.a]')
Text(0, 0.5, 'Puissance [u.a]')
../_images/15d82d126190b61800b83eb4b44f85a9db879bd533222de0abc1ced10130ce31.png