Rappresentazione Analogica

L’Analogico è un concetto proprio delle scienze numeriche, che rappresenta una grandezza che può assumere tutti i valori intermedi all’interno di un dato intervallo; si contrappone al concetto di digitale, che rappresenta invece una grandezza che viene espressa senza possibilità di discriminare valori intermedi tra due cifre consecutive.

Wikipedia

Link to original

Rappresentazione Digitale

Con digitale o numerico, in informatica ed elettronica, ci si riferisce a tutto ciò che viene rappresentato con numeri discreti, o che opera manipolando tali numeri, contrapposto all’analogico, che opera invece su grandezze continue.

La conversione da analogico a digitale avviene tramite campionamento e quantizzazione.

Campionamento

Il campionamento è una tecnica che consiste nel convertire un segnale continuo nel tempo oppure nello spazio in un segnale discreto, valutandone l’ampiezza a intervalli temporali o spaziali solitamente regolari.
In questo modo, a seguito di una successiva operazione di quantizzazione e conversione, è possibile ottenere una stringa digitale (discreta nel tempo o nello spazio e nell’ampiezza) che approssimi quella continua originaria.

Bin

Il bin è una grandezza che viene introdotta dal campionamento di un segnale analogico e che è pari al della Frequenza di campionamento.

La risoluzione del campionamento è data da 2 Bin.

Link to original

Link to original

Quantizzazione

In elettronica e nell’analisi dei segnali, la quantizzazione è il processo di mappatura di valori di ingresso da un insieme grande (spesso continuo) a valori di uscita in un insieme più piccolo (numerabile), spesso con un numero finito di elementi. Esempi tipici di quantizzazione sono l’arrotondamento e il troncamento. La quantizzazione ha luogo in quasi ogni elaborazione di segnali digitali, dal momento che la rappresentazione di un segnale in forma digitale comporta effettuare arrotondamenti. Inoltre, la quantizzazione è al cuore di praticamente ogni algoritmo di compressione con perdita di informazioni.

Il processo non lineare di quantizzazione, a differenza di quello di campionamento (di un processo/segnale limitato), non è reversibile ovvero non è pertanto possibile ricostruire i valori reali assunti originariamente dalla grandezza fisica. La quantizzazione è dunque una fonte di distorsione.

Esistono due tipi di quantizzazione: mid-riser e mid-tread.

Mid-riseMid-tread
L’origine della funzione di quantizzazione si trova in mezzo ad un fronte di salitaL’origine della funzione di quantizzazione si trova in mezzo ad un segmento costante.

Quindi il mid-tread permette di avere una quantizzazione che rappresenta anche il valore ZERO, mentre il mid-rise è simmetrico rispetto allo zero ma lo esclude. Si può quindi capire il tipo di rappresentazione digitale analizzando lo zero di un segnale.

Ad esempio, in questo segnale lo zero non è mai rappresentato, quindi la rappresentazione è mid-rise.

def quantize_uniform(x, qmin=-1.0, qmax=1.0, qlevel=8):
	qstep = (qmax-qmin) / qlevel
	xnorm = (x-qmin) * qlevel / (qmax-qmin)
	xnorm[xnorm > qlevel] = qlevel
	xnorm[xnorm < 0] = 0
	xnorm_quant = np.floor(xnorm)
	xquant = xnorm_quant * (qmax-qmin) / qlevel
	xquant = xquant + qmin + qstep/2
	return xquant

Quando si quantizza un segnale è importante adattare il quantizzatore in modo tale da far prendere al segnale buona parte del range del segnale quantizzato.

Avere un segnale di ampiezza con un quantizzatore da 3 bit con ampiezza è poco efficace perché i valori generati dal quantizzatore sono [-3.0, -2.25, -1.5, -0.75, 0.75, 1.5, 2.25, 3.0], quindi il segnale di ingresso userà soltanto due di questi valori (-0.75 e 0.75).

Se invece adattassimo il quantizzatore al segnale con un’ampiezza di si ottiene che i valori generati sono [-1.0, -0.75, -0.5, -0.25, 0.25, 0.5, 0.75, 1.0] e quindi tutti gli otto valori vengono utilizzati.

L’SNR del primo caso è 35.37, mentre nel secondo caso è 3.85, quindi adattare il quantizzatore è importante anche per aumentare la qualità della quantizzazione.

Link to original

I formati production-ready utilizzati oggi sono 48kHz per il Campionamento e 24 bit per la Quantizzazione.

VantaggiSvantaggi
Non vi è più degradazione nella trasmissione dei datiBisogna prestare cura nella conversione AD
Richiesta hardware meno costosaElevati requisiti di memoria per archiviazione e trasmissione
Archiviazione indipendente dal supportoRidotte capacità di calcolo
Elaborazione numerica molto semplice

Vedi anche: Campionamento, Quantizzazione

Link to original

Frequenza di campionamento

La Frequenza di campionamento descrive in hertz il numero dei campioni presenti in un secondo di segnale digitale (da digit, che in inglese significa “cifra” e che nel mondo informatico/elettronico varia al significato “cifra binaria”).

Wikipedia

I CD-ROM usano una frequenza di campionamento di 44.1kHz a partire dagli anni ‘70.
Diversi standard utilizzano i 44.1kHz:

  • PAL con 294 linee interlacciate a 25fps
  • NTSC con 245 linee interlacciate a 30fps
    Con 13 bit per campione e 3 campioni per linea si ottengono i 44.1kHz.

Successivamente sono prevalsi i 48kHz.

Vedi anche: Phase Alternating Line, NTSC, Campionamento, Rappresentazione Digitale

Link to original

Programmazione

#setup per obsidian
import micropip 
await micropip.install('numpy')
await micropip.install('matplotlib')
await micropip.install('librosa') # F non funziona

Caricamento File Audio

import numpy as np
import librosa
 
w, Fs = librosa.load("path_to_file", sr=None)

Fs è la frequenza di campionamento, mentre w è la matrice che rappresenta l’audio (M canali x N valori).

t = np.arange(w.shape[0]) / Fs

Nota: w.shape[0] ritorna il numero di righe presenti nella matrice. Link alla documentazione.

Plotting

Si può usare matplotlib per plottare dei grafici:

from matplotlib import pyplot as plt 
 
fig, ax = plt.subplots(figsize=(12,3))
ax.plot(t, w, '-') # Plotta w
 
# Imposta label del grafico
ax.set_xlabel('Time (seconds)') 
ax.set_ylabel('Amplitude') 
 
# Croppa valori plotatti
ax.set_xlim([t[0], t[-1]]) 
ax.set_ylim([-1, 1]) 
 
# Abilita la griglia
ax.grid() 
fig.tight_layout()

Riproduzione Audio

Usando ipython si può usare le sue api per riprodurre 2. Audio Digitale

import IPython
import librosa
 
w, Fs = librosa.load("filename", sr=None)
IPython.display.Audio(w, rate=Fs)

Errore di quantizzazione

Nella conversione analogico-digitale, la differenza tra il segnale analogico reale e il valore digitale quantizzato dello stesso viene chiamata Errore di quantizzazione o distorsione di quantizzazione. Questo errore è dovuto all’arrotondamento o al troncamento del segnale digitalizzato. Il segnale errore è talvolta considerato come un segnale casuale aggiuntivo chiamato rumore di quantizzazione a causa del suo comportamento stocastico (aleatorio).

Wikipedia

La quantizzazione “riduce” il numero infinito di valori possibili di un segnale analogico a un numero finito di livelli, e la differenza tra il valore reale e quello rappresentato è l’errore di quantizzazione.

Profondità-di-bit

Maggiore è la profondità in bit, più livelli di quantizzazione saranno disponibili, e quindi più preciso sarà il valore quantizzato, riducendo l’errore di quantizzazione.

Vedi anche: Quantizzazione, Bit depth, Dithering

Link to original

SNR

In telecomunicazioni ed elettronica il rapporto segnale-rumore, spesso abbreviato con la sigla inglese SNR (Signal to Noise Ratio) o S/N anche nell’uso italiano, è una grandezza numerica che mette in relazione la potenza del segnale utile rispetto a quella del rumore in un qualsiasi sistema di acquisizione, elaborazione o trasmissione dell’informazione.

Wikipedia

Questa quantità si calcola come:

Dove è l’RMS.

import numpy as np
def SNR(original, quantized):
	noise = quan tized - original
	powS = np.sum(original**2)
	powN = np.sum(noise**2)
	return 10*np.log10(powS/powN)

Vedi anche: RMS, Quantizzazione

Link to original

Dinamica di un segnale

La dinamica di un segnale (detto anche Dynamic Range) è il rapporto tra il valore massimo e il valore minimo assunto da un segnale. Viene misurata in dB.

La gamma dinamica può variare notevolmente in base al tipo di suono e al contesto:

  • Musica classica: in genere ha una gamma dinamica molto ampia, con passaggi molto delicati e altri estremamente potenti.
  • Musica pop e rock: tende a una gamma dinamica più compressa per rendere i suoni più costanti e presenti.
  • Conversazioni e discorsi: di solito hanno una gamma dinamica relativamente limitata, poiché l’obiettivo è una comprensione chiara e costante.

In un segnale digitale se la dinamica del segnale non è adattata a quella del quantizzatore si ritrova un SNR non ottimale, in quanto si utilizzano meno livelli del quantizzatore e quindi l’informazione persa, che si può considerare anche errore è maggiore.

In un convertitore ad n bit, la dinamica di un segnale è pari a , ovvero circa sei volte il numero di bit. Questo perché per ogni bit aggiuntivo nel sistema, l’SNR migliora di circa 6dB.

Per ridurre la dinamica di un segnale si utilizza un Compressore, tuttavia questo ne degrada la qualità.

Vedi anche: SNR, Quantizzazione

Link to original

dBFS

Il dBFS (decibel relative to Full Scale) è una misura usata in ambito digitale per quantificare il livello di un segnale rispetto al livello massimo che il sistema può rappresentare, ossia il Full Scale (scala completa).

Nel mondo digitale, i segnali vengono rappresentati come sequenze di numeri a bit limitato, ad esempio a 16 o 24 bit per canale, come nel caso dell’audio. Il livello massimo che un segnale digitale può raggiungere senza distorsione è chiamato appunto Full Scale, cioè il punto oltre il quale non si possono rappresentare valori più alti senza causare clipping (distorsione). In dBFS:

  • 0 dBFS corrisponde al livello massimo possibile senza distorsione.
  • Tutti gli altri valori in dBFS sono relativi a questo massimo e sono negativi, rappresentando livelli di segnale più bassi. Ad esempio, un segnale a -6 dBFS è 6 dB sotto il livello massimo raggiungibile, mentre un segnale a -20 dBFS è 20 dB sotto.

Il dBFS si calcola facendo riferimento al massimo valore di ampiezza digitale possibile per un segnale. Se prendiamo come riferimento l’ampiezza massima possibile del segnale digitale e il valore attuale , il dBFS può essere espresso come:

La AES (Audio Engineering Society) e la EBU (European Broadcasting Union) raccomandano che il picco massimo non superi mai 0 dBFS in fase di trasmissione per evitare clipping. La EBU, in particolare, raccomanda di mantenere i segnali audio digitali per le trasmissioni a un livello medio attorno ai -23 LUFS (Loudness Units Full Scale) per una gamma dinamica ottimale, lasciando quindi una riserva per i picchi fino a 0 dBFS.

La Root Mean Square di un valore in dBFS si può trovare come:

O su python: rms = np.sqrt(np.mean(frame**2)). LPT per ricordarsi l’orine: Dall’esterno verso l’interno Root, poi Mean e poi Square.

Link to original

Distorsione armonica

La distorsione armonica si manifesta quando un segnale passa attraverso un sistema non lineare, come un amplificatore o un circuito elettrico, che modifica il segnale aggiungendo delle armoniche della frequenza fondamentale. Questo significa che oltre alla frequenza principale, si aggiungono altre frequenze che sono multipli interi della fondamentale.

Nel caso dell’elaborazione dei segnali digitali può avvenire in due casi: quando il segnale è troppo forte rispetto al fondo scala e quando il segnale è troppo debole rispetto al fondo scala.

Nel primo caso quindi il fondo scala è minore rispetto a quanto richiesto dal segnale, quindi si trova il fenomeno di clipping, ovvero i campioni con una potenza troppo elevata vengono mappati al fondo scala e si crea una sorta di onda quadra.

Anche nel secondo caso, detto low level quantization noise si ha clipping, ma per un motivo diverso (vedi Low Level Quantization Noise).

In entrambi i casi il clipping genera delle armoniche supplementari nel segnale, rispetto alla fondamentale che è presente, da sola, in un segnale puro.

Low Level Quantization Noise

Quando un segnale viene quantizzato, gli intervalli tra i livelli discreti creano una sorta di “approssimazione” del segnale originale. La differenza tra il valore effettivo e il valore quantizzato introduce un errore, noto come errore di quantizzazione, che appare nel segnale sotto forma di rumore. Questo rumore è casuale e viene distribuito su tutta la gamma di frequenze del segnale.

Quando il livello di un segnale è molto basso, ad esempio nelle parti più silenziose di una registrazione audio, diventa particolarmente evidente l’effetto del rumore di quantizzazione. Ciò è dovuto a due fattori principali:

  1. Numero limitato di livelli di quantizzazione disponibili a bassi volumi: Nei segnali deboli, l’ampiezza è vicina al livello zero. Poiché i livelli discreti di quantizzazione sono limitati, nelle sezioni a basso volume ci sono meno livelli disponibili per rappresentare accuratamente il segnale. Questo fa sì che l’errore di quantizzazione risulti relativamente più grande rispetto al segnale stesso.

  2. Mancanza di mascheramento da parte del segnale principale: Quando l’ampiezza del segnale è alta, il rumore di quantizzazione è spesso mascherato dal segnale stesso e risulta quindi meno udibile. Tuttavia, a bassi livelli, il rumore diventa più udibile e può manifestarsi come un “fruscio” o “granulosità” udibile.

Un metodo comune per minimizzare l’effetto del low-level quantization noise è il Dithering.
Il dithering consiste nell’aggiungere un leggero rumore casuale al segnale prima della quantizzazione. Questo rumore maschera il rumore di quantizzazione e lo rende meno percepibile, distribuendo l’errore in maniera più uniforme e meno invasiva. Sebbene il dithering introduca esso stesso una sorta di rumore, questo tende a essere meno fastidioso rispetto al rumore di quantizzazione percepibile a bassi livelli.


I think a better term for quantization noise is simply “error.” When you digitize a signal voltage, there are a finite number of digital levels (numbers) you can use to describe it. The error is the difference between the actual, analog voltage level, and the digital level you use to represent it.

In signal processing terms, error is “information loss.” An analog signal has an infinite amount of information — any way you measure the voltage can be infinitely subdivided. A digital signal has a finite amount of information. When you digitize a signal, you lose information, and it can never be recovered.

What’s in that information? It’s unknown. If there are no biases in your system, it’s random. A random signal is noise.

So that’s where the terms come from.

Can you actually hear that noise? Mathematically, it’s definitely there; but does it sound like “white noise?” I’m a little unclear on that myself.

I find it easier to understand in visual terms. In image digitization, quantization error looks like color banding. If you have a continuous color gradient, artifacts due to color bit depth appear as “stripes” in the gradient. The lower the bit depth, the wider the bands.

The math, and, in fact, the tech is identical between the domains. It’s just our senses which are different. The audio equivalent of quantization error is what color banding “sounds” like.

ananbd on Reddit

Vedi anche: Quantizzazione, Dithering

Link to original

Vedi anche: Armoniche, Low Level Quantization Noise

Link to original