background image

Filtracja za pomocą TMS320c6713

Know-how

Krzysztof Grabiński

background image

Zasada działania

Filtr

Filtr

z-1

+

z-1

z-1

+

+

z-1

y(n)

x(n)

x

x

x

x

b

0

b

1

b

2

b

N-1

Mnożymy aktualną próbkę i 
127 ją poprzedzających przez 
odpowiednie współczynniki 
filtra

background image

Realizacja

Tworzymy tablice do przetrzymywania np. 

128 próbek: 

short L_in[128];

Tworzymy tablice wcześniej wyliczonych 

współczynników filtra o tym samym 

wymiarze

Tworzymy funkcję filtracji

Konfigurujemy kodek Audio

Odpalamy aplikacje i podziwiamy efekt 

naszej pracy 

background image

Współczynniki filtra

Wyliczamy za pomocą Matlaba wykorzystując skrypt od TI. 
Podajemy następujące parametry:

A w efekcie otrzymamy tablice współczynników filtra 
o zadanych parametrach:

background image

Tłumienie filtra 8kHz

background image

Funkcja filtracji

short FILTR_L (short input, short *h)
{

int i;
short output;
int acc=0;
int prod;
L_in[0] = input;          /* ODŚWIEŻA NAJNOWSZA PRÓBKĘ */

acc = 0;                       /* ZERUJE AKUMULATOR */
for (i=0; i<128; i++)         

/* PETLA WYKONA SIE 128 RAZY */

{   

prod = (h[i]*L_in[i]);  /* MNOŻENIE Q.15 */
acc = acc + prod;       /* ODŚWIEŻANIE 32-bit AKUMULATORA */

}                             
output = (short) (acc>>15);    

/* PRZERABIANIE WYJSCIA DO WARTOSCI 

16-bits. */

for (i=127; i>0; i--)         

/* PRZESUNIĘCIE PRÓBEK */

L_in[i]=L_in[i-1];

return output;

/* ZWRACA PRZEFILTROWANA 

PRÓBKĘ */
}

background image

Konfiguracja kodeka Audio

DSK6713_AIC23_Config config = { 

0x0017, // 0 DSK6713_AIC23_LEFTINVOL  

Glosnosc wejscia lewego kanalu 

0x0017, // 1 DSK6713_AIC23_RIGHTINVOL 

Glosnosc wejscia prawego kanalu

0x01f9, // 2 DSK6713_AIC23_LEFTHPVOL  

Glosnosc lewego kanalu sluchawekF

0x01f9, // 3 DSK6713_AIC23_RIGHTHPVOL

Glosnosc prawego kanalu sluchawek

0x0011, // 4 DSK6713_AIC23_ANAPATH  

kontrola  analogowej sciezki audio 

0x0000, // 5 DSK6713_AIC23_DIGPATH   

kontrola cyfrowej sciezki audio 

0x0000, // 6 DSK6713_AIC23_POWERDOWN 

kontrola włączonych urządzeń

0x0043, // 7 DSK6713_AIC23_DIGIF     

format interfejsu cyfrowego dzwieku

0x0081, // 8 DSK6713_AIC23_SAMPLERATE

kontrola czestotliwosci probkowania

0x0001  // 9 DSK6713_AIC23_DIGACT     

aktywacja cyfrowego interfejsu

};

background image

Biblioteki

#include "C6713_DSK_FIRcfg.h"

#define CHIP_6713 1

/* Biblioteki płytki DSK6713 i kodeka audio*/

#include "dsk6713.h"

#include "dsk6713_aic23.h"

background image

VOID MAIN

void main()
{

DSK6713_AIC23_CodecHandle hCodec;
Int16 OUT_L,OUT_R;
Uint32 IN_L,IN_R;

/* INICJALIZACJA BIBLIOTEK */
DSK6713_init();
DSK6713_LED_init();
DSK6713_DIP_init();

/* WŁĄCZENIE KODEKA Z USTAWIENIAMI config */
hCodec = DSK6713_AIC23_openCodec(0, &config);

// USTAWIA CZĘSTOTLIWOŚĆ KODEKA NA 48KHz 
DSK6713_AIC23_setFreq(hCodec, DSK6713_AIC23_FREQ_48KHZ );

background image

Pętla główna

while (1) //PĘTLA NIESKOŃCZONA
{

// CZYTAJ PRÓBKĘ Z LEWEGO KANAŁU

while (!DSK6713_AIC23_read(hCodec, &IN_L));

// CZYTAJ PRÓBKĘ Z PRAWEGO KANAŁU 

while (!DSK6713_AIC23_read(hCodec, &IN_R));

OUT_L = FILTR_L(IN_L, h2); //FILTRÓJ LEWĄ PRÓBKĘ FILTREM h2
OUT_R = IN_R;

//PRZEKAŻ PRÓBKĘ PRAWĄ BEZ FILTROWANIA

/* WYŚLIJ PRÓBKĘ DO LEWEGO KANAŁU */

while (!DSK6713_AIC23_write(hCodec, OUT_L));

/* WYŚLIJ PRÓBKĘ DO PRAWEGO KANAŁU */

while (!DSK6713_AIC23_write(hCodec, OUT_R));

}

background image

HaPPy EnD

/* WYŁĄCZ KODEK */

DSK6713_AIC23_closeCodec(hCodec);  

}