Mostreig i quantificació

Industriales. Teorema de Nyquist. Processat del senyal. Soroll. Programación

  • Enviado por: Sergi Redorta
  • Idioma: catalán
  • País: España España
  • 20 páginas
publicidad

PRÀCTICA 1

MOSTREIG I QUANTIFICACIÓ

MOSTREIG

DEFINICIÓ

El mostreig d'una senyal com el seu nom indica és l'obtenció de mostres en determinats instants de temps d'una senyal. La majoria de senyals són de naturalesa contínua, és a dir, estan definits en tots els instants de temps. Si mostreigem un senyal continua en el temps obtenim una senyal mostreigada, on es compleix que el valor de la senyal només és vàlida en uns instants de temps concrets (discrets).

Per exemple:

Mostreig i quantificació

Per tal de poder realitzar l'operació del mostreig ideal ens cal un sistema que pugui obtenir un instant infinitament curt de la senyal. Un model d'aquest sistema seria un interruptor amb un temps de commutació de 0 segons. Evidentment, aquest model és ideal, ja que tot interruptor té unes capacitats internes i per tant unes constants de temps diferents de zero que provoquen que el temps en que tenim la mostra no sigui diferencial i tingui una durada determinada. Per tant, un model de mostreigador més real és un tren de polsos p(t) amb una amplitud de 1 durant un interval molt petit.

El concepte de mostreig es pot entendre com una multiplicació temporal del senyal original amb un tren de deltes (cas ideal) o de polsos p(t) (cas real).

Un cop mostreigada una senyal tenim que el seu espectre és el de la senyal sense mostreigar però es va repetint cada Fs (Sample frequency). Per tal de poder recuperar la senyal cal que es compleixi el critèri de Nyquist de tal forma que no hi hagi aliasing. En la recuperació s'utilitza un filtre passa-baixes per tal de quedar-nos tant sols amb la informació compresa a la banda que ens interessa, és a dir, de 0Hz a Fs/2. Aquest filtre es pot entendre des del punt de vista temporal com una convolució de la senyal mostreigada amb una sinc. Si fem aquest procés d'una manera gràfica obtenim:

Mostreig i quantificació

Podem veure que la suma de les contribucions de totes les sinc fan que obtinguem la senyal recuperada idèntica a la original.

Si considerem que el mostreigador no és ideal tenim que no podem recuperar mai la senyal original d'una manera exacta, ja que la transformada de Fourier d'un pols és una funció sinc, i la multiplicació d'una funció sinc amb l'espectre de la senyal original dóna l'espectre de la senyal original lleugerament modificat i repetit cada Fs. A continuació podem veure com es modifica l'espectre original de la senyal al fer un mostreig amb un pols de durada Tp=Ts. Com es pot observar, tenim un espectre molt semblant al original en les baixes freqüències, però a mesura que ens acostem a Fs/2 tenim que la diferència entre l'espectre original i el resultant són més diferents.

Mostreig i quantificació

EL TEOREMA DE NYQUIST

El teorema de Nyquist diu que cal mostreigar una senyal com a mínim a una freqüència de mostreig de dues vegades la freqüència màxima de la senyal per tal de poder-la reconstruir posteriorment sense cap mena d'alteració.

Això és degut a que al fer el mostreig d'una senyal tenim que l'espectre de la senyal mostreigada queda repetit amb un periode igual a la freqüència de mostreig.

Això es pot il.lustrar amb un exemple a on suposem una senyal que té un espectre triangular (forma espectral genèrica i aproximada de molts dels senyals):

Al tenir aquest espectre, tenim que per tal que no hi hagi solapament de l'espectre desitjat i la seva rèplica degut a l'efecte del mostreig cal que:

FS>2*fMAX

En el cas de no complir la condició de Nyquist tenim que l'espectre del senyal desitjat amb l'espectre repetit degut al mostreig se solapen (fenomen anomenat `aliasing'). En el cas de tenir aliasing, la recuperació del senyal original sense cap alteració és impossible.

Cal dir que la condició de Nyquist és el cas límit i suposant que podem implementar filtres d'ordre infinit. Com que això no és possible cal aplicar un criteri una mica més restrictiu com per exemple que Fs>4*fMAX, ja que així deixem un marge més gran entre l'espectre desitjat i la rèplica per tal de poder filtrar amb un filtre passa-baixes realitzable.

CAS PRÀCTIC

A continuació vaig a il.lustrar aquests conceptes amb un cas pràctic. En aquest cas s'ha agafat una senyal de veu mostreigada a 8KHz, quantificada a 8 bits amb PCM i amb un únic canal (mono). La frase que es diu en la senyal és: “Habia sido un día de los que parecen un test de resistencia“

Seguidament tenim el senyal original i el seu espectre corresponent:

Mostreig i quantificació

De la gràfica de l'espectre podem observar que la senyal que ens interessa és la que va de 0Hz fins a 4KHz, ja que la resta és la repetició de l'espectre (freqüències negatives). Al realitzar el mostreig a 8KHz i tenint en compte que la veu humana pot arribar a 15KHz tenim que no estem complint el criteri de Nyquist i per tant aquesta senyal té `aliasing'. L'espectre real de la senyal, mostreigada a 44KHz mostra que el senyal original té components per sobre dels 4 KHz i per tant que no estem complint el criteri de Nyquist.

Mostreig i quantificació

Com es pot observar en l'espectre de la senyal original mostreigada a 44KHz tenim que la major part de potència de la senyal està compresa en la banda de 0Hz-4KHz, però cal dir que la senyal té components frequencials de fins a 20KHz. Per tant la senyal de partida té `aliasing'.

Per tal de simplificar la pràctica suposaré que la senyal original és la senyal de veu mostreigada a 4KHz amb `aliasing' inclòs i que la banda de la senyal original és de 4KHz.

A partir d'aquí es fa una interpolació per tal d'augmentar la freqüència de mostreig fins a 22KHz. Per fer-ho només cal agafar la senyal original i per cada mostra intercal.lar dues mostres a zero. En la següent gràfica es mostra la interpolació.

Mostreig i quantificació

Al realitzar l'operació d'interpolació hem elevat la freqüència de mostreig a 22KHz i per tant ens apareix l'espectre de la senyal original repetit tres cops:

Mostreig i quantificació

A continuació realitzem un filtrat d'aquesta senyal interpolada de tal forma que només ens quedem amb la part de l'espectre que correspondria a la senyal original de 4KHz d'amplada de banda mostreigada a 22KHz. Això ho fem mitjançant un filtre ideal que consisteix en agafar l'espectre de la senyal interpolada i posar a zero les freqüències que estan entre 4KHz i 18KHz. Aquest filtrat no és realitzable a la vida real, ja que per tal de realitzar el filtrat ens cal conèixer totes les mostres de la senyal i requereix una potència de càlcul increïble.

Si filtrem la senyal obtenim:

Mostreig i quantificació

A partir d'aquest punt és com tenir una senyal de veu de una banda de 0-4KHz i mostreigada a 22KHz.

A continuació per mostrar l'aliasing només cal fer un delmat per 4 de tal forma que la freqüència equivalent de mostreig serà de 6KHz i per tant tindrem aliasing en la banda de 2KHz-3KHz.

Mostreig i quantificació

Com es pot observar, la banda de 2KHz-3KHz ha quedat modificada degut a l'aliasing que hem introduït. Com es pot observar, l'efecte de l'aliasing provoca que tinguem un solapament de l'espectre de la senyal original invertit i a la part alta de la banda de freqüències.

PROGRAMA UTILITZAT:

Per tal de poder realitzar totes les gràfiques anteriors he utilitzat les següents funcions:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% %

% Interpolació %

% PARÀMETRES: %

% x => Senyal a interpolar %

% Rfi=> Relació freq. final / freq. inicial %

% RETORNA: %

% y => Senyal interpolada %

% %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function y = interpol(x,Rfi)

y = zeros(1,Rfi*length(x));

y(1:Rfi:length(y)) = x;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% %

% Delmat %

% PARÀMETRES: %

% x => Senyal a fer delmat %

% Rfi => Relació freq. Final/freq. Inicial %

% RETORNA: %

% y => Senyal delmada %

% %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function y = delmat(x,Rfi)

y = x(1:Rfi:length(x));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% %

% Filtre passa-baixes ideal %

% PARÀMETRES: %

% x => Senyal a filtrar %

% fs => freqüència a filtrar %

% RETORNA: %

% y => Senyal filtrada %

% %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function y = LPFIdeal(x,fs,b)

Dummy = find(x>fs); % Busquem valors que passen el fs

Dummy(fc+1:length(Dummy)-fc)=zeros(length(Dummy)-2*fc,1); % Eliminem banda alta

y = ifft(Dummy,length(x)); % Realitzem la transformada inversa

y = real(y); % Part real per si errors de decimals

El programa general utilitzat per a generar les gràfiques és:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% %

% Demostració de la teoria del mostreig %

% %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

i=1;

if Figura == 0 Figura=1;

end;

while i ~= Figura

close(figure(i));

i=i+1;

end;

clear all;

Tecla=0;

Figura=1;

while Tecla ~=6

Tecla=MENU('Mostreig i Quantificació','Carregar variable','Interpolar','Filtrar','Delmat','Sortir');

if Tecla == 1

[So,Fs]=wavread('test.wav'); %Llegim arxiu de veu original

Temp=size(So); %Convertim si cal vector de veu a taula de n elements

if Temp(1) == 1 then

So=So';

end

So=So-mean(So); %Elimina la mitja del so

figure(Figura);

subplot(2,1,1);

plot(So); %Mostra el senyal de veu original

TITLE('SENYAL ORIGINAL');

XLABEL('Nº mostres');

subplot(2,1,2);

SoTmp=20*log10(abs(fft(So)));

w=Fs/length(SoTmp):Fs/length(SoTmp):Fs; %Mostra eix de freqüència

plot(w,SoTmp); %Mostra la fft del senyal original

axis([1,Fs,0,max(SoTmp)]) %modifiquem escala

TITLE('DENSITAT ESPECTRAL DE POTÈNCIA DEL SENYAL ORIGINAL');

XLABEL('Freqüència (Hz)');

YLABEL('Potència (dB)');

clear SoTmp;

Figura=Figura+1;

elseif Tecla == 2

Rfi=input('Relació ff/fi: ');

SoInterpol=Interpol(So,Rfi);

%Mostrem com s'han afagit mostres a la senyal original

figure(Figura);

subplot(2,1,1);

stem(So(1:60/Rfi)); %Mostrem interpolació

TITLE('MOSTRES DEL SENYAL ORIGINAL');

XLABEL('Nº mostres');

subplot(2,1,2);

stem(SoInterpol(1:60));

TITLE('MOSTRES DEL SENYAL INTERPOLAT');

XLABEL('Nº mostres');

Figura=Figura+1;

%Mostrem els espectres dels senyals original i interpolat

figure(Figura);

EspectreTmp=fft(So);

Espectre1=20*log10(abs(EspectreTmp));

subplot(2,1,1);

w=Fs/length(Espectre1):Fs/length(Espectre1):Fs;

plot(w,Espectre1);

axis([1,Fs*Rfi,0,max(Espectre1)]) %modifiquem escala

TITLE('ESPECTRE DE LA SENYAL ORIGINAL');

XLABEL('Freqüència(Hz)');

YLABEL('Potència (dB)');

EspectreTmp=fft(SoInterpol);

Espectre2=20*log10(abs(EspectreTmp));

subplot(2,1,2);

w=Fs*Rfi/length(Espectre2):Fs*Rfi/length(Espectre2):Fs*Rfi;

plot(w,Espectre2);

axis([1,Fs*Rfi,0,max(Espectre2)]) %modifiquem escala

TITLE('ESPECTRE DE LA SENYAL INTERPOLADA');

XLABEL('Freqüència (Hz)');

YLABEL('Potència (dB)');

Figura=Figura+1;

elseif Tecla ==3

Fc = input('Frequencia de tall: ');

Fc=Fc* (length(SoInterpol)/(Rfi*Fs)); %Convertim fc a num mostres

SoFiltrat=LPFIdeal(SoInterpol,Fc);

%Mostrem espectre de senyal interpolada abans i després de filtre

figure(Figura);

subplot(2,1,1);

SoTmp=20*log10(abs(fft(SoInterpol)));

w=Fs*Rfi/length(SoTmp):Fs*Rfi/length(SoTmp):Fs*Rfi;

plot(w,SoTmp);

axis([1,Fs*Rfi,0,max(SoTmp)]) %modifiquem escala

TITLE('ESPECTRE DE LA SENYAL INTERPOLADA');

YLABEL('Potència (dB)');

XLABEL('Freqüència (Hz)');

clear SoTmp;

subplot(2,1,2);

SoTmp=20*log10(abs(fft(SoFiltrat)));

w=Fs*Rfi/length(SoTmp):Fs*Rfi/length(SoTmp):Fs*Rfi;

plot(w,SoTmp);

axis([1,Fs*Rfi,0,max(SoTmp)]) %modifiquem escala

TITLE('ESPECTRE DE LA SENYAL FILTRADA');

YLABEL('Potència (dB)');

XLABEL('Freqüència (Hz)');

Figura=Figura+1;

FInterpol=Fs*Rfi;

elseif Tecla==4

Rfi=input('Relació ff/fi: ');

SoDelmat=Rfi*delmat(SoFiltrat,Rfi);

%Mostrem la delmació

figure(Figura);

subplot(2,1,1);

stem(So(1:60));

subplot(2,1,2);

stem(SoDelmat(1:60/Rfi));

Figura=Figura+1;

%Mostrem els espectres de la senyal original i de la delmada

figure(Figura);

subplot(2,1,1);

Espectre1=20*log10(abs(fft(So)));

w=Fs/length(Espectre1):Fs/length(Espectre1):Fs;

plot(w,Espectre1,'g'); %Mostrem en verd l'espectre de la original

axis([1,Fs,0,max(Espectre1)])

TITLE('ESPECTRE DE LA SENYAL ORIGINAL');

YLABEL('Potència (dB)');

XLABEL('Freqüència (Hz)');

subplot(2,1,2);

Espectre2=20*log10(abs(fft(SoDelmat)));

w=FInterpol/(length(Espectre2)*Rfi):FInterpol/(length(Espectre2)*Rfi):FInterpol/Rfi;

plot(w,Espectre2,'r'); %Mostrem en vermell l'espectre de la tractada

axis([1,FInterpol/Rfi,0,max(Espectre2)])

TITLE('ESPECTRE DE LA SENYAL DELMADA');

YLABEL('Potència (dB)');

XLABEL('Freqüència (Hz)');

Figura=Figura+1;

end;

end;

QUANTIFICACIÓ

La quantificació no és altre cosa que un procés de discretització de les possibles amplituds d'un senyal. Partim d'un senyal d'amplitud contínua i al realitzar la quantificació permetem que la senyal pugi valer tant sols un numero finit de possibles valors. A aquest procés se l'anomena quantificació. Quan els intervals dels possibles valors estan situats de manera equiespaiada, llavors tenim una quantificació linial.

Un exemple de la quantificació linial es pot veure en el següent gràfic, a on tenim una senyal d'entrada contínua i una senyal que és fruit de la quantificació linial amb 16 nivells de la primera i la seva posterior desquantificació:

Mostreig i quantificació

Alhora de quantificar una senyal per al seu tractament digital posterior hem de realitzar un doble procés. En primer lloc cal assignar uns intervals de quantificació en els quals tenim que qualsevol valor que estigui comprès dins l'interval es quantificarà amb el valor de l'interval. Per altre banda, cal tenir en compte que per tal de poder tractar adequadament la senyal de forma digital cal codificar tots els intervals d'una forma que sigui senzilla per al processador i per tant cada interval ha d'estar codificat amb un numero enter i el numero d'intervals ha de ésser una potència de dos per tal d'optimitzar el numero de bits utilitzats en la codificació de cada interval.

Així doncs, un quantificador linial és un quantificador que té els nivells de quantificació equiespaiats i per tant queda determinat amb els següents paràmetres:

Nivells de quantificació: És el numero de possibles valors que podem assignar a la senyal quantificada. Aquest valor pot venir donat directament o amb numero de bits dels que disposem per tal de quantificar la senyal. Aleshores tindrem 2^bits nivells de quantificació.

Fons d'escala: És el valor màxim de la senyal original que podem arribar a quantificar sense tenir saturació.

Pas per zero: Podem indicar si un dels nostres intervals val zero (quantificador amb pas per zero) o si per contra, tenim un quantificador que no té cap interval de valor zero (sense pas per zero).

Interval de quantificació (): És l'amplitud del senyal que inclou un interval de quantificació. En el cas del quantificador linial, l'interval de quantificació és constant per tots els possibles valors de quantificació.

Per tal de recuperar la senyal cal fer un simple canvi d'escala. Aquest canvi és degut a que tenim la senyal discretitzada i codificada en nivells. Aquests nivells cal fer que corresponguin a l'escala de la senyal original i per tant multiplicant el valor del nivell per l'interval de quantificació tenim una senyal d'amplitud igual a la de la senyal d'entrada.

SOROLL DE QUANTIFICACIÓ:

Cal tenir en compte que si quantifiquem una senyal i la desquantifiquem mai tindrem la mateixa senyal que la original, ja que durant el procés de quantificació tenim certa pèrdua d'informació. La pèrdua d'informació deguda al simple fet de la quantificació és el què s'anomena com a soroll o error de quantificació. Aquest error és degut a que al realitzar l'assignació de tots els valors de un interval a un únic valor cometem un error d'arrodoniment i això provoca que la senyal original i la senyal quantificada siguin diferents i per tant que hi hagi un soroll de quantificació. Aquest error com a màxim serà d'una amplitud de /2, ja que és l'error màxim que podem cometre.

Si fem la funció distribució de probabilitat de l'error tenim que es tracta d'un soroll pla entre -/2 i com el de la figura.

Com que podem aproximar la funció densitat de probabilitat com plana podem dir que la potència de soroll degut a la quantificació és:

Mostreig i quantificació

Si fem el càlcul de la potència de soroll tenim que la potència de soroll val:

Mostreig i quantificació

Quan el quantificador no treballa adequadament, és a dir, quan el fons d'escala no està ajustat adequadament a la senyal a quantificar ens apareixen dos tipus de soroll nous que si que estan correlats amb la senyal i per tant no es poden considerar com a soroll blanc. Aquests tipus de soroll són els següents:

Soroll de overflow: Aquest soroll és degut a tenir un fons d'escala per sota del valor màxim de la senyal. Això provoca que el nostre quantificador saturi (retalli) la senyal d'entrada i per tant el soroll que es defineix com la diferència entre la senyal d'entrada i la recuperada pren valors elevats i la forma del senyal d'error està totalment correlada amb el senyal a quantificar.

Soroll de underflow: Aquest soroll és degut a tenir un fons d'escala massa gran respecte el màxim de la senyal. Això provoca que, en el cas del quantificador amb pas per zero, la senyal recuperada valgui zero, mentre que en el quantificador sense pas per zero obtenim una sortida que oscil.la degut a petites fluctuacions (soroll) de l'entrada.

A continuació tenim un exemple de una senyal quantificada en la que es poden observar els tres tipus de soroll, en el cas del quantificador amb pas per zero i en el cas del quantificador sense pas per zero. En el primer segment de la gràfica es pot observar el soroll per underflow, al segment central del gràfic es pot observar el soroll degut exclusivament a la quantificació amb un fons d'escala adequat, i en l'últim tros de la gràfica (quan la senyal supera el fons d'escala) podem observar el soroll per overflow.

Senyal original

Senyal quantificat i recuperat

Error de quantificació

Mostreig i quantificació

Mostreig i quantificació

SNR EN FUNCIÓ DEL FONS D'ESCALA:

A continuació tenim la gràfica de la SNR en funció del fons d'escala per diferents numeros de bits i pel quantificador amb pas per zero i sense pas per zero. Com es pot observar en les diferents gràfiques tenim que l'eix de coordenades està expressat en funció de FS/4(x) això és degut a que normalment s'utilitza la cota de 4(x) per al fons d'escala ja que la veu humana té unes característiques que demostren que utilitzant aquest valor per al fons d'escala obtenim la millor relació entre soroll de quantificació i soroll per overflow.

En les gràfiques de acontinuació podem veure tres zones diferents.

Saturació: és la zona de l'esquerra, ja que tenim un fons d'escala molt petit. En aquesta zona podem observar que la SNR és molt baixa, però que puja ràpidament a mesura que augmentem el fons d'escala

Zona central: en aquesta zona tenim que el fons d'escala està ajustat a l'amplitud de la senyal. En el punt on la SNR és màxima tenim que el fons d'escala coincideix amb el màxim de la senyal dividit per 4 vegades la desviació típica, i a mesura que anem augmentant el fons d'escala anem augmentant el soroll de quantificació i per tant la SNR baixa.

Underflow: és la zona de la dreta, ja que tenim un fons d'escala massa gran. En aquesta zona tenim que la SNR és molt baixa, degut a que tenim un senyal que té poca excursió respecte el fons d'escala que tenim i per tant l'error de quantificació és molt elevat.

Mostreig i quantificació

Mostreig i quantificació

La única diferència entre el quantificador amb pas per zero i el quantificador sense pas per zero és que en el cas del quantificador amb pas per zero tenim un punt que el fons d'escala és tant gran que la senyal desquantificada sempre val zero i per tant el soroll, que és la diferència entre la senyal original i la desquantificada, val igual que el senyal i per tant la SNR tendeix a ésser 1 (0dB). En canvi, en el cas del quantificador sense pas per zero, tenim que el fons d'escala és va fent més gran i per tant tenim que la senyal desquantificada va oscil.lant en torn el zero per canvis de signe de la senyal i per tant la potència de soroll és la d'una senyal quadrada que oscil.la entre +/2 i -/2, però al augmentar el FS tenim que  va augmentant i per tant la potència de soroll també va augmentant i per tant tenim que la SNR va disminuint.

PROGRAMA UTILITZAT:

So=wavread('test.wav'); %Carreguem variable de veu

So=So-mean(So); %Treiem component de continua

if max(So)>abs(min(So)) %Calculem el màxim de la senyal

Max=max(So);

else

Max=abs(min(So));

end;

S=10*log10(So'*So); %Calculem potència de senyal

for Bits=2:5, %Fem gràfiques per de 2 a 5 bits

i=1;

for Escala=0.5:0.5:4*Max,

SoQ=QuanLin(So,Escala,Bits,1); %Quantifiquem la senyal

SoDeQ=DeQuan(SoQ,Escala,Bits,1); %Desquantifiquem la senyal

Error=So-SoDeQ; %Calculem error

N=10*log10(Error'*Error); %Calculem la potència de soroll

SNR(i)=S-N; %Calculem la SNR

FS(i)=Escala/(4*std(So));

i=i+1;

end

plot(FS,SNR); %Mostrem la gràfica resultant

hold on

end

hold off

xlabel('FS/4*std');

ylabel('SNR (dB)');

TITLE('SNR vs FS PER AL QUANTIFICADOR SENSE PAS PER ZERO');

SNR EN FUNCIÓ DEL NUMERO DE BITS

La gràfica que s'ha obtingut de la SNR en funció dels bits del quantificador és la següent:

Mostreig i quantificació

En la segona gràfica tenim la diferència en dB entre la SNR per n+1 bits i la SNR per n bits. Com es pot observar, ens mantenim molt aprop del resultat teòric de que cada bit representa una millora de 6dB en la SNR. Aquest límit teòric s'obté de considerar que la funció densitat de probabilitat de l'error de quantificació és plana entre +/2 i -/2. Desenvolupant tots els càlculs s'obté que la SNR en funció del numero de bits segueix la forma de:

Mostreig i quantificació

PROGRAMA UTILITZAT:

So=wavread('test.wav'); %Carrega variable de veu

So=So-mean(So); %Treu la mitja del senyal

if max(So)>abs(min(So)) %Obtenim el valor màxim de la senyal

Max=max(So);

else

Max=abs(min(So));

end;

S=10*log10(So'*So); %Calculem la potència de senyal

for Bits=1:16, %Fem gràfica de 1 a 16 bits

SoQ=QuanLin(So,Max,Bits,0); %Quantifiquem la senyal amb el numero de bits adequat

SoDeQ=DeQuan(SoQ,Max,Bits,0); %Desquantifiquem la senyal de veu

Error=So-SoDeQ; %Calculem l'error associat a la quantificació

N=10*log10(Error'*Error); %Calculem la potència de soroll

SNR(Bits)=S-N; %Calculem la SNR

end

subplot(2,1,1); %Mostrem la gràfica de SNR vs Bits

plot(SNR);

xlabel('Numero de bits');

ylabel('SNR (dB)');

TITLE('SNR vs Numero de bits');

subplot(2,1,2);

for i=1:15, %Mostrem les diferències entre bits consecutius

Dif(i)=SNR(i+1)-SNR(i);

end

plot(Dif);

xlabel('Numero de bits');

ylabel('SNR(i+1)-SNR(i) ');

ESPECTRE DEL SOROLL DE QUANTIFICACIÓ

Anem a veure l'espectre del soroll de quantificació. Per fer-ho només cal obtenir l'error de quantifiació i fer-ne la transformada de fourier.

Mostreig i quantificació

Com es pot observar, a mesura que augmentem el numero de bits tenim que l'error de quantificació es fa més incorrelat amb el senyal i per tant tenim que el seu espectre és més pla i per tant es pot aproximar a soroll gaussià blanc.

PROGRAMA UTILITZAT:

So=wavread('test.wav'); %Carrega variable de veu

So=So-mean(So); %Treu la mitja del senyal

if max(So)>abs(min(So)) %Obtenim el valor màxim de la senyal

Max=max(So);

else

Max=abs(min(So));

end;

f=8000/length(So):8000/length(So):8000; %Calculem eix per canvi escala de les x

i=1;

for Bits=2:4:10, %Fem analisi per 2, 6 i 10 bits

SoQ=QuanLin(So,Max,Bits,0); %Quantifiquem

SoDeQ=DeQuan(SoQ,Max,Bits,0); %Desquantifiquem

Error=So-SoDeQ; %Calculem error

EError=abs(10*log10(fft(Error))); %Fem espectre de l'error

subplot(3,1,i); %Representem l'espectre

i=i+1;

plot(f,EError);

ylabel('Potència (dB)');

end

xlabel('Freqüència (Hz)');

Processat del senyal

1

19

f

Espectre de potència de la senyal original

fMAX

fMAX

f

Espectre de potència de la senyal mostreigada

FS

/2

-/2

1/

f(n)