/*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? sourcearm fir ?cimate ?st q15? sourceFIR Readmearm fir ?cimate init q31?FIR UIR Lower Chart (Europe)The Fir TreeFIRWyklad 6 ! FiRarm fir ?cimate init q15? sourceFIR FIR XP Frnarm fir q31?arm fir ?cimate ?2?FiR matma L12Wyklad 4 i 5 ! FiRFiR matma L1Wyklad 3 ! FiRwięcej podobnych podstron