Modulació per densitat d'impuls

De Viquipèdia
Dreceres ràpides: navegació, cerca

La modulació per densitat de pols o PDM (de l'anglès, Pulse Density Modulation), és utilitzat en la representació i conversió de senyals analògics al domini digital (i a l'inrevés). Al contrari que la modulació PCM, l'amplitud d'un senyal no es codifica assignant uns valors d'amplitud segons els nivells de quantificació, sinó que en el PDM, l'amplitud es representa amb densitats o nombre de polsos en funció del temps i l'amplitud del senyal origen. Una aplicació fonamental per aquest tipus de modulació la trobem en la tecnologia SACD (Super Audio CD), desenvolupat per Sony i Philips Electronics l'any 1999.

Aquesta tecnologia d'àudio d'alta definició, utilitza complexos sistemes de conversió, codificació,... tals com la Modulació Sigma-Delta i la codificació Direct Stream Digital (DSD) basats en PDM.

El PWD (Modulació per amplada de pols), seria un cas especial del PDM, on tots els polsos corresponents a una mostra són contigus en el senyal digital.

Bàsic[modifica | modifica el codi]

En la taxa de bits resultant d'una modulació per densitat de pols, un 1 correspon a un pols de polaritat positiva (+A) i un 0 correspon a un pols de polaritat negativa (-A). Matemàticament això es pot representar amb la següent expressió:

 x[n] = -A (-1)^{a[n]} \

• On x[n] és el pols bipolar (valors –A o +A)

• a[n] és la taxa binaria de bits resultant (0 o 1)


Un senyal format per tot 1’s correspondria a la representació d'amplitud màxima del senyal (màxima positiva). Un senyal format per tot 0’s, en comparació, representaria l'amplitud mínima del senyal (negativa) Per a un bitrate que alterni 0 i 1correspondria a una amplitud 0.

Un cop tenim el bitrate resultant d'aplicar una modulació PDM (senyal bipolar) podem recuperar el senyal original (analògic) aplicant un filtre pas Baix al mateix.

Conversió analògic-digital[modifica | modifica el codi]

Una taxa de bits PDM codifica un senyal analògic a través de la modulació sigma-delta. Aquest procés utilitza un quantificador d’1 bit que produeix un 1 o un 0, depenent de l'amplitud del senyal analògic. Si tinguéssim un bitrate format per tot 1, o bé per tot 0, estaríem representant un senyal el qual sempre té valors màxims positius, o valors mínims (negatius), respectivament.

Donat que en el món real un senyal analògic rarament tindrà valors màxims o valors mínims durant tot el senyal, aquest cas és considerat un error de quantificació. Dins l'algorisme del PDM, aquest error es realimenta negativament en el bucle ΔΣ de manera que cada error influenciarà a cada nova mostra a quantificar i al seu respectiu error, fent una mitjana els errors.

Exemples[modifica | modifica el codi]

Un únic període de la funció Sinus, representada amb 100 mostres utilitzant PDM: 0101011011110111111111111111111111011111101101101010100100100000010000000000000000000001000010010101

Mostreig d'un període de la funció sinus

*En la imatge es representa un període del senyal sinus, modulat amb PDM 100 mostres. Els 1’s són representats com polsos de color blau, mentre que els 0’s amb polsos de color blanc. Podem observar com, en els pics d'amplitud màxim (π/2), obtenim polsos blaus (1) junts, i a mesura que va disminuint l'amplitud, es van intercalant 0 fins a arribar a valors mínims d'amplituds (3*π/2) amb un seguit de polsos blancs (0). En la alternació 101 trobem amplitud=0 del senyal.

Dos períodes d'un senyal sinusoïdal representat amb PDM 100 mostres: 0101101111111111111101101010010000000000000100010011011101111111111111011010100100000000000000100101

Mostreig de dos períodes de la funció sinus

*Tot i utilitzar el mateix nombre de polsos per a representar el doble de mostres ( tenim el doble de freqüència i el mateix nombre de punts), veiem que els pics els representem amb densitats proporcionals.

Algorisme[modifica | modifica el codi]

El model digital d'un modulador pols-densitat es pot obtenir a partir del model digital d'un modulador sigma-delta.

Modulador sigma-delta de primer ordre

Modulador simga-delta de 1er ordre

Considerant un senyal x[n] en el domini temporal discret com el senyal d'entrada d'un modulador sigma-delta de primer ordre, i amb un senyal y[n] com la seva sortida, obtenim que, en el domini freqüencial, el comportament del modulador sigma-delta es pot representar com:

Y(z)=E(z) + \left[ X(z)-Y(z)z^{-1} \right] \left( \frac{1}{1-z^{-1}} \right).

Reorganitzant els terminis obtenim:

Y(z)=X(z)+E(z)\left(1-z^{-1}\right)

En aquest cas, E(z) és l'error de quantificació del modulador sigma-delta en el domini freqüencial, el factor 1-z^{-1} representa un filtre pas alt, gràcies al qual E(z) contribuirà en menor mesura a la sortida Y(z) en les freqüències baixes, i més en les altes. Això mostra el comportament del modulador en relació al tractament del soroll residual: ‘el soroll propi del quantificador és desplaçat al rang de les altes freqüències (no audibles per el Sistema Auditiu Humà) allunyant-lo de les baixes i perceptibles.’

Utilitzant la inversa de la transformada Z, s'aconsegueix convertir aquesta equació en una equació diferència, relacionant l'entrada del modulador sigma-delta amb la seva sortida en el domini temporal discret:

y[n] = x[n] + e[n] - e[n-1]

Hi ha dos consideracions addicionals a tindre en compte: en primer lloc cada mostra de la sortida y[n] se seleccionarà de manera que redueixi al mínim l'error de quantificació e[n] i en segon lloc, y[n] es representa amb un sol bit, és a dir, que la sortida només podrà tindre dos valors possibles, els quals, per conveniència seran +-1 :

y[n] = \begin{cases} +1 & x[n]\geq e[n-1] \\ -1 & x[n]<e[n-1]\end{cases}
e[n] = y[n] - x[n] + e[n-1]

Finalment, es dedueix una equació que relaciona la sortida y[n] amb l'entrada x[n]. L'error de quantificació de cada mostra es realimenta de nou en l'entrada per conformar la següent mostra. El següent pseudo-codi implementa aquest algorisme per a convertir un PCM a un PDM:

// Codifica les mostres segons la modulació pols densitat utilitzant 
// un modulador sigma-delta de 1º ordre 

function pdm(real[0..s] x)
  var int[0..s] y
  var int[-1..s] qe
  
  qe[-1] := 0                  // l'error inicial de funcionament serà 0
  
  for n from 0 to s
      if x[n] >= qe[n-1]
          y[n] := 1
      else
          y[n] := -1
      qe[n] := y[n] - x[n] + qe[n-1]
  
  return y, qe                 // retornem la sortida i l'error de funcionament