Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- WYKONAŁA: MARTA TRZASKA 171632
- TELEKOMUNIKACJA 1, SEMESTR 6
- */
- #include <dsplib.h>
- //częstotliwosc graniczna filtru dolnoprzepustowego: fc=1320
- //długoć filtru N = 57
- #define NUM_SAMPLES 5000 //ilosc probek
- #define N 57
- #define krok 137 //wartosc kroku w formacie Q15
- const short filtr_fir[] = {-30, -32, -36, -41, -46, -51, -53, -50, -41, //wspolczynniki filtru obliczone w programie Matlab
- -23, 6, 49, 106, 178, 267,372, 492, 624, 766, 914, 1064, 1212, 1353,
- 1482, 1594, 1687, 1755, 1797, 1811, 1797,1755, 1687, 1594, 1482, 1353,
- 1212, 1064, 914, 766, 624, 492, 372, 267, 178, 106,49, 6, -23, -41
- , -50, -53, -51, -46, -41, -36, -32, -30}; //suma współczynników = 32441; 32441/2^15 = 0,990021 (przemnożenie przez 0.99 przed zaokrągleniem)
- short white_noise[NUM_SAMPLES];
- short pila[NUM_SAMPLES];
- short wynik[NUM_SAMPLES];
- void saw(short* tablica, unsigned int dl_tablicy, unsigned int step){ //funkcja generująca sygnał piłokształtny
- int amplituda = 0;
- int i;
- tablica[0] = 0;
- for(i = 1; i < dl_tablicy; i++){ //pętla licząca kolejne wartosci sygnału
- amplituda = amplituda + step;
- tablica[i] = amplituda;
- }
- }
- void blockfir(short* input, const short* filter, short* output, int numSamples, int numFilter){ //funkcja wykonującą filtrację bloku próbek sygnalu
- int j;
- int i;
- for(j = 0; j < numSamples; j++){ //pętla iterująca próbki z sygnalu wejsciowego
- long y = 0;
- for(i = 0; i < N; i++){ //pętla realizująca obliczenia dla jednej próbki
- y = _smaci(y, input[j-i], filter[i]); //mnożenie dwóch liczb Q15 sprawia, że y jest w formacie Q30
- }
- output[j] = (short)(_sround(y) >> 15); //zaokrąglenie i przejcie z formatu Q30 na Q15
- }
- }
- void main(void) {
- //rand16init(); //inicjalizacja generatora
- //rand16((DATA*)white_noise, NUM_SAMPLES); //funkcja do generowania szumu bialego
- saw(pila, NUM_SAMPLES, krok);
- //blockfir(white_noise, filtr_fir, wynik, NUM_SAMPLES, N); //wywolanie funkcji blockfir
- blockfir(pila, filtr_fir, wynik, NUM_SAMPLES, N); //wywolanie funkcji blockfir
- while (1); // do not exit
- }
Advertisement
Add Comment
Please, Sign In to add comment