FIR podpkt f


/*Ten program pobiera próbki z lewego i prawego kanału, a następnie filtruje lewy kanał a prawy przepuszcza bez filtracji*/
#include "C6713_DSK_FIRcfg.h"
#define CHIP_6713 1

/* Biblioteki płytki DSK6713, kodeka audio, przełączników i diód */
// wszystkie funkcje kodeka w biblitece dsk6713_aic23.h
#include "dsk6713.h"
#include "dsk6713_aic23.h"
#include "dsk6713_dip.h"
#include "dsk6713_led.h"

short FILTR_L (short, short*); //DEKLARACJE FUNKCJI ZWRACAJACE WARTOSC short //I POBIERAJACYCH 2 ARGUMENTY (short, wskaznik)

/* USTAWIENIA KONFIGURACYJNE KODEKA AUDIO*/
DSK6713_AIC23_Config config = { // normal mode line in, mic off
0x0017, // 0 DSK6713_AIC23_LEFTINVOL Glosnosc wejscia lewego kanalu
0x0017, // 1 DSK6713_AIC23_RIGHTINVOL Glosnosc wejscia prawego kanalu
0x00F9, // 2 DSK6713_AIC23_LEFTHPVOL Glosnosc lewego kanalu sluchawek
0x00F9, // 3 DSK6713_AIC23_RIGHTHPVOL Glosnosc prawego kanalu sluchawek
0x0012, // 4 DSK6713_AIC23_ANAPATH kontrola analogowej sciezki audio
0x0000, // 5 DSK6713_AIC23_DIGPATH kontrola cyfrowej sciezki audio
0x0002, // 6 DSK6713_AIC23_POWERDOWN kontrola włączonych urządzeń
0x0043, // 7 DSK6713_AIC23_DIGIF format interfejsu cyfrowego dzwieku
0x0023, // 8 DSK6713_AIC23_SAMPLERATE kontrola czestotliwosci probkowania
0x0001 // 9 DSK6713_AIC23_DIGACT aktywacja cyfrowego interfejsu
};

short L_in[128]; /* PRÓBKI WEJSCIOWE L_in[0] NAJNOWSZA PRÓBKA LEWA,L_in[127] NAJSTARSZA PRÓBKA LEWA*/

/* WSPÓŁCZYNNIKI WYLICZONE Z CZĘSTOTLIWOŚCIĄ PRÓBKOWANIA 48kHz I ODCIĘCIE DLA 2kHz*/
short h1[]=
{
4, 2, 0, -3, -6, -9, -13, -18, -24,
-30, -38, -46, -54, -63, -71, -79, -87, -93,
-97, -99, -97, -93, -84, -71, -53, -29, 0,
35, 77, 124, 177, 236, 300, 369, 442, 519,
597, 677, 758, 838, 915, 990, 1061, 1126, 1185,
1237, 1280, 1315, 1340, 1355, 1360, 1355, 1340, 1315,
1280, 1237, 1185, 1126, 1061, 990, 915, 838, 758,
677, 597, 519, 442, 369, 300, 236, 177, 124,
77, 35, 0, -29, -53, -71, -84, -93, -97,
-99, -97, -93, -87, -79, -71, -63, -54, -46,
-38, -30, -24, -18, -13, -9, -6, -3, 0,
2, 4
};



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 44KHz
DSK6713_AIC23_setFreq(hCodec, DSK6713_AIC23_FREQ_44KHZ );


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, h1); //filtruj lewy kanał
OUT_R=IN_R; //przepuść bez zmian prawy kanał

/* 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));

}

/* WYŁĄCZ KODEK */
DSK6713_AIC23_closeCodec(hCodec);
}


/*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Ę */
}

Wyszukiwarka

Podobne podstrony:
arm fir init q15?
arm fir lattice init q31? source
arm fir ?cimate ?st q15? source
FIR Readme
arm fir ?cimate init q31?
FIR UIR Lower Chart (Europe)
The Fir Tree
FIR
Wyklad 6 ! FiR
arm fir ?cimate init q15? source
FIR FIR XP Frn
arm fir q31?
arm fir ?cimate ?2?
FiR matma L12
Wyklad 4 i 5 ! FiR
FiR matma L1
Wyklad 3 ! FiR

więcej podobnych podstron