[Matlab, Telecomunicazioni] Dithering audio

Walzer91
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 :cry: 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!

Risposte
Walzer91
up

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 E' un bel salto di quantizzazione, sei sicuro che i dati sono giusti ?

Walzer91
"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!

Walzer91
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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.