Introduzione all’Apprendimento Automatico Audio
Introduzione all'Apprendimento Automatico Audio' (Introduction to Audio Machine Learning)
Attualmente sto sviluppando un sistema di riconoscimento vocale audio, quindi ho avuto bisogno di rinfrescare le mie conoscenze sulle basi relative ad esso. Questo articolo è il risultato di ciò.
Introduzione all’audio
Indice
- Introduzione
Suono —
- Il suono è un segnale continuo e ha valori di segnale infiniti
- I dispositivi digitali richiedono array finiti e quindi è necessario convertirli in una serie di valori discreti
- AKA Rappresentazione digitale
- Potenza del suono — Tasso di trasferimento dell’energia (Watt)
- Intensità del suono — Potenza del suono per unità di area (Watt/m**2)
Formati file audio —
- .wav
- .flac (free lossless audio codec)
- .mp3
I formati dei file si differenziano per il modo in cui comprimono la rappresentazione digitale del segnale audio
Passaggi di conversione —
- Il microfono cattura un segnale analogico.
- L’onda sonora viene quindi convertita in un segnale elettrico.
- Questo segnale elettrico viene quindi digitalizzato da un convertitore analogico-digitale.
Campionamento
- È il processo di misurazione del valore di un segnale a intervalli di tempo fissi
- Una volta campionato, la forma d’onda campionata è in un formato discreto


Frequenza di campionamento
- Numero di campioni presi al secondo
- ad esempio, se vengono presi 1000 campioni al secondo, allora la frequenza di campionamento (SR) = 1000
- UNA FREQUENZA DI CAMPIONAMENTO PIÙ ALTA -> MIGLIORE QUALITÀ AUDIO

Considerazioni sulla frequenza di campionamento
- Frequenza di campionamento = (Frequenza più alta che può essere catturata da un segnale) * 2
- Per l’orecchio umano, la frequenza udibile è di 8 KHz, quindi possiamo dire che la frequenza di campionamento (SR) è di 16 KHz
- Anche se una frequenza di campionamento più alta offre una migliore qualità audio, non significa che dovremmo continuare ad aumentarla.
- Dopo la linea richiesta, non aggiunge alcuna informazione e aumenta solo il costo di calcolo
- Inoltre, una bassa frequenza di campionamento può causare una perdita di informazioni
Punti da ricordare —
- Mentre si addestrano tutti i campioni audio ad avere la stessa frequenza di campionamento
- Se si utilizza un modello pre-addestrato, il campione audio deve essere campionato nuovamente per corrispondere alla frequenza di campionamento (SR) dei dati audio su cui è stato addestrato il modello
- Se vengono utilizzati dati con frequenze di campionamento diverse, allora il modello non si generalizza bene
Ampiezza —
- Il suono è prodotto da una variazione nella pressione dell’aria a frequenze udibili dall’orecchio umano
- Ampiezza — livello di pressione sonora in quel momento misurato in dB (decibel)
- L’ampiezza è una misura dell’intensità
Profondità di bit —
- Descrive quanto precisione può essere descritta
- Quanto più alta è la profondità di bit, tanto più simile la rappresentazione digitale somiglierà all’onda sonora continua originale
- Valori comuni della profondità di bit sono 16 bit e 24 bit
Quantizzazione —
Inizialmente, l’audio è in forma continua, ovvero un’onda regolare. Per memorizzarlo digitalmente, è necessario suddividerlo in piccoli passaggi; eseguiamo la quantizzazione per fare ciò.
- Questa settimana nell’IA, 7 agosto l’IA generativa arriva su Jupyter e Stack Overflow • Aggiornamenti ChatGPT
- 5 Pacchetti Python per l’Analisi dei Dati Geospaziali
- Incontra Retroformer un elegante framework di intelligenza artificiale per migliorare iterativamente grandi agenti linguistici imparando un modello retrospettivo plug-in.

Puoi dire che la profondità di bit è il numero di passaggi necessari per rappresentare l’audio
- L’audio a 16 bit richiede — 65536 passaggi
- L’audio a 24 bit richiede — 16777216 passaggi
- Questa quantizzazione induce rumore, quindi è preferibile una profondità di bit elevata
- Anche se questo rumore non è un problema
- L’audio a 16 e 24 bit viene memorizzato in campioni int, mentre i campioni audio a 32 bit vengono memorizzati come punti decimali
- Il modello richiede punti decimali, quindi dobbiamo convertire quest’audio in punti decimali prima di addestrare il modello
Implementazione —
#carica la libreriaimport librosa
#la funzione load di librosa restituisce l'array audio e il tasso di campionamentoaudio, tasso_di_campionamento = librosa.load(librosa.ex('pistachio'))
import matplotlib.pyplot as pltplt.figure().set_figwidth(12)librosa.display.waveshow(audio,sr = tasso_di_campionamento)

- l’ampiezza è stata tracciata sull’asse y e il tempo sull’asse x
- varia nell’intervallo [-1.0, 1.0] — già un numero decimale
print(len(audio))print(tasso_di_campionamento/1e3)>>1560384>>22.05
## Spettro di frequenzaimport numpy as np# invece di concentrarsi su ogni valore discreto vediamo solo i primi 4096 valoriinput_data = audio[:4096]# DFT = trasformata di Fourier discreta# questo spettro di frequenza viene tracciato utilizzando DFTfinestra = np.hanning(len(input_data))finestra>>array([0.00000000e+00, 5.88561497e-07, 2.35424460e-06, ..., 2.35424460e-06, 5.88561497e-07, 0.00000000e+00])
dft_input = input_data * finestra
figura = plt.figure(figsize = (15,5))plt.subplot(131)plt.plot(input_data)plt.title('input')plt.subplot(132)plt.plot(finestra)plt.title('finestra di Hanning')plt.subplot(133)plt.plot(dft_input)plt.title('dft_input')# viene generato un grafico simile per ogni istanza

Trasformata di Frequenza Discreta = DFT
- Saresti d’accordo con me se dicessi che fino ad ora abbiamo avuto dati di segnale discreti?
- Se lo sei, allora puoi capire che fino ad ora avevamo i dati nel dominio del tempo, e adesso vogliamo convertirli nel dominio delle frequenze. Ecco perché il signor DFT è qui per aiutare
# calcola la dft - trasformata discreta di Fourierdft = np.fft.rfft(dft_input)plt.plot(dft)

# ampiezza ampiezza = np.abs(dft)# convertila in dBampiezza_dB = librosa.amplitude_to_db(ampiezza,ref = np.max)# a volte le persone vogliono usare lo spettro di potenza -> A**2
Perché prendere il valore assoluto?
Quando abbiamo preso l’ampiezza, abbiamo applicato la funzione abs, il motivo è il numero complesso
- l’output restituito dopo la trasformata di Fourier è in forma complessa, e prendere il valore assoluto ci ha dato la magnitudine, quindi il valore assoluto.
print(len(ampiezza))print(len(dft_input))print(len(dft))>>2049>>4096>>2049
Perché l’array aggiornato (metà+1) dell’array originale?
Quando la DFT viene calcolata per un input puramente reale, l’output è simmetrico di Hermitian, cioè i termini a frequenza negativa sono semplicemente i complessi coniugati dei corrispondenti termini a frequenza positiva, e i termini a frequenza negativa sono quindi ridondanti. Questa funzione non calcola i termini a frequenza negativa, e la lunghezza dell’asse trasformato dell’output è quindi n//2 + 1
. [fonte – documentazione]
# frequenzafrequenza = librosa.fft_frequencies(n_fft=len(input_data),sr = sampling_rate)
plt.figure().set_figwidth(12)plt.plot(frequenza, ampiezza_dB)plt.xlabel("Frequenza (Hz)")plt.ylabel("Ampiezza (dB)")plt.xscale("log")

- Come detto in precedenza, dominio del tempo -> dominio delle frequenze
- Il dominio delle frequenze è solitamente rappresentato su una scala logaritmica
Spettrogrammi —
- mostra come la frequenza cambia rispetto al tempo
- L’algoritmo che esegue questa trasformazione è il soft = trasformata tempo-frequenza a breve termine
Come creare uno spettrogramma —
- gli spettrogrammi sono una pila di trasformate di frequenza, come? vediamolo
- Per un determinato audio, prendiamo piccoli segmenti e ne troviamo lo spettro in frequenza. Dopo di che, li impiliamo lungo l’asse del tempo. Il diagramma risultante è uno spettrogramma
librosa.stft
suddivide di default in 2048 segmenti
Spettro di Frequenza —
- Rappresenta l’ampiezza di diverse frequenze in un singolo istante di tempo.
- Lo spettro di frequenza è più adatto per capire le componenti di frequenza presenti in un segnale in un istante specifico. Entrambe le rappresentazioni sono strumenti preziosi per comprendere le caratteristiche dei segnali nel dominio delle frequenze.
- AMPITUDINE vs. FREQUENZA
Spettrogramma —
- Rappresenta i cambiamenti nel contenuto di frequenza nel tempo suddividendo il segnale in segmenti e tracciando i loro spettri di frequenza nel tempo.
- Lo spettrogramma è particolarmente utile per analizzare e visualizzare segnali che variano nel tempo, come segnali audio o dati di serie temporali, poiché fornisce informazioni su come le componenti di frequenza si evolvono durante diversi intervalli di tempo.
- FREQUENZA vs. TEMPO
spectogram = librosa.stft(audio)
spectogram_to_dB = librosa.amplitude_to_db(np.abs(spectogram), ref=np.max)
plt.figure().set_figwidth(12)
librosa.display.specshow(spectogram_to_dB, x_axis="time", y_axis="hz")
plt.colorbar()

Spettrogrammi Mel —
- Lo spettrogramma su diverse scale di frequenza.
Prima di procedere, bisogna ricordare che.
- Alle frequenze inferiori, gli esseri umani sono più sensibili ai cambiamenti audio rispetto alle frequenze superiori
- Questa sensibilità cambia in modo logaritmico con un aumento della frequenza
- Quindi in termini più semplici, uno spettrogramma Mel è una versione compressa dello spettrogramma.
MelSpectogram = librosa.feature.melspectrogram(y=audio, sr=sampling_rate, n_mels=128, fmax=8000)
MelSpectogram_dB = librosa.power_to_db(MelSpectogram, ref=np.max)
plt.figure().set_figwidth(12)
librosa.display.specshow(MelSpectogram_dB, x_axis="time", y_axis="mel", sr=sampling_rate, fmax=8000)
plt.colorbar()

- L’esempio sopra utilizza
librosa.power_to_db()
poichélibrosa.feature.melspectrogram()
viene utilizzato per creare uno spettrogramma di potenza.
Conclusione —
Lo spettrogramma Mel aiuta a catturare caratteristiche più significative rispetto allo spettrogramma normale ed è quindi popolare.
Riferimento —
Huggingface
Personal Kaggle Kernel (per la tua pratica)
Social —
Kaggle
Se ti è piaciuto l’articolo, non dimenticare di apprezzarlo con un applauso. Ci vediamo nel prossimo notebook, in cui vedremo come caricare e riprodurre i dati audio.