[Matlab, Telecomunicazioni] Dithering audio
Ciao a tutti gli utenti! Vi scrivo perchè penso di stare impazzendo dietro un esercizio che devo consegnare e non ho idea di dove mettere mani
Dovrei fare uno script matlab che faccia varie cose e mi sono bloccato. Lo script riceve in input un file audio .wav da me creato a 44.1kHz e 16 bit (qualità CD), viene letto, riprodotto, vengono plottati l'andamento nel tempo, lo spettro e gli istogrammi del file e dei due canali (è un campione stereo). Dopo di che procedo alla quantizzazione a 3 bit e alla determinazione dell'errore di quantizzazione. E fin quà nessn problema. Ora mi viene richiesto di "far sentire bene" il segnale campionato a 3 bit utilizzando il dithering. Mi sono documentato online e sono giunto alla conclusione che il dithering triangolare sia il più facile e più usato, ma non ho idea di come implementarlo materialmente su matlab applicato al segnale quantizzato... Mi dareste una mano? 
ps. se volete allego una cartella compressa con tutte le funzioni usate da me finora!


ps. se volete allego una cartella compressa con tutte le funzioni usate da me finora!
Risposte
up
Da quello che si capisce il dithering triangolare è una somma di sue numeri casuali, tipo il lancio di due dadi.
Quindi non devi fare altro che questo.
"Lanci" due dadi virtuali, cioè generi due numeri casuali e li sommi $a="rand()+rand()"$, quindi $0 E' un bel salto di quantizzazione, sei sicuro che i dati sono giusti ?
Quindi non devi fare altro che questo.
"Lanci" due dadi virtuali, cioè generi due numeri casuali e li sommi $a="rand()+rand()"$, quindi $0 E' un bel salto di quantizzazione, sei sicuro che i dati sono giusti ?
"Quinzio":
Da quello che si capisce il dithering triangolare è una somma di sue numeri casuali, tipo il lancio di due dadi.
Quindi non devi fare altro che questo.
"Lanci" due dadi virtuali, cioè generi due numeri casuali e li sommi $ a="rand()+rand()" $, quindi $ 0 poi $ a $ va moltiplicato per $ 2^(16-3) /2 $ siccome devi coprire il salto da 3 a 16 bit.
E' un bel salto di quantizzazione, sei sicuro che i dati sono giusti ?
Ciao! Grazie per la risposta intanto! Si i dati purtroppo sono giusti, secondo me è semplicemente
Impossibile. Un file audio quantizzato a 3 bit è praticamente rumore puro, ho provato con qualunque tipo di dithering, rettangolare, triangolare e il noise shape creandomi un filtro adatto per quella frequenza ma non c'è stato verso di ripulire un po' il segnale. Addirittura a me pare peggiorare col dithering! Onde evitare equivoci, il dithering va fatto prima della quantizzazione, giusto? Io ho provato prima e dopo ma niente... Magari sbaglio la quantizzazione? Appena solo al pc posto il codice!
function [fileQU,errore]=quantizzazione(file,n_bit) % Quantization of a stereo file % fileQU : quantized file % errore : quantization error % file : audio file % n_bit : number of bit depth % Channels normalization fileQL = file(:,1)/max(abs(file(:,1))); fileQR = file(:,2)/max(abs(file(:,2))); % Quantization by rounding fileQU(:,1)=round(fileQL*2^(n_bit-1))/(2^(n_bit-1)); fileQU(:,2)=round(fileQR*2^(n_bit-1))/(2^(n_bit-1)); % Error of quantization errore = file - fileQU; end