martaczaska

ZPS_4_2

Jun 14th, 2020
1,028
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.24 KB | None | 0 0
  1. /*
  2.  * Projekt z Zastosowania Procesorów Sygnałowych 2020
  3.  * Projekt dla DSP TMS320C5535
  4.  */
  5.  
  6.  
  7. // Dołączenie wszelkich potrzebnych plików nagłówkowych
  8. #include "usbstk5515.h"
  9. #include "usbstk5515_led.h"
  10. #include "aic3204.h"
  11. #include "PLL.h"
  12. #include "bargraph.h"
  13. #include "oled.h"
  14. #include "pushbuttons.h"
  15. #include "Dsplib.h"
  16. #include "testsignal.h"
  17.  
  18.  
  19. // Wzmocnienie wejścia w dB: 0 dla wejścia liniowego, 30 dla mikrofonowego
  20. #define WZMOCNIENIE_WEJSCIA_dB 30
  21.  
  22. // Wybór sygnału do przetwarzania
  23. // 0: próbki z wejścia mikrofonowego
  24. // 1: biały szum
  25. // 2: sygnał piłokształtny
  26. // 3: sinus (stała częstotliwość)
  27. // 4: sygnał z testsignal.h
  28. #define SIGNAL 0
  29.  
  30. /*MÓJ SHIT*/
  31. int k, i, j;
  32. #define NUM_SAMPLES 5000                                                                //ilosc probek
  33. #define N 57
  34. #define M 512
  35. short wynik[NUM_SAMPLES];
  36.  
  37. short bufor[N + 2];
  38. Int16 probka = 0;
  39. short obliczona = 0;
  40. long y = 0;
  41.  
  42. const short filtr_fir[] = {-30, -32, -36, -41, -46, -51, -53, -50, -41,                 //wspolczynniki filtru obliczone w programie Matlab
  43. -23, 6, 49, 106, 178, 267,372, 492, 624, 766, 914, 1064, 1212, 1353,
  44. 1482, 1594, 1687, 1755, 1797, 1811, 1797, 1755, 1687, 1594, 1482, 1353,
  45. 1212, 1064, 914, 766, 624, 492, 372, 267, 178, 106,49, 6, -23, -41
  46. , -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)
  47. /*MÓJ SHIT*/
  48.  
  49.  
  50.  
  51. // Głowna procedura programu
  52.  
  53. void main(void) {
  54.  
  55.     // Inicjalizacja układu DSP
  56.     USBSTK5515_init();          // BSL - układ uruchomieniowy
  57.     pll_frequency_setup(100);   // ustawienie częstotliwości zegara DSP (PLL) na 100 MHz
  58.     aic3204_hardware_init();    // kodek dźwięku AIC3204
  59.     aic3204_init();             // jw.
  60.     USBSTK5515_ULED_init();     // diody LED
  61.     SAR_init_pushbuttons();     // przyciski
  62.     oled_init();                // wyświelacz OLED 2x19 znaków
  63.  
  64.     // ustawienie częstotliwości próbkowania i wzmocnienia wejścia
  65.     set_sampling_frequency_and_gain(48000L, WZMOCNIENIE_WEJSCIA_dB);
  66.  
  67.     // wypisanie komunikatu na wyświetlaczu
  68.     // 2 linijki po 19 znaków, tylko wielkie angielskie litery
  69.     oled_display_message("PROJEKT ZPS        ", "                   ");
  70.  
  71.     // 'krok' oznacza tryb pracy wybrany przyciskami
  72.     unsigned int krok = 0;
  73.     unsigned int poprzedni_krok = 9999;
  74.  
  75.     // zmienne do przechowywania wartości próbek
  76.     Int16 lewy_wejscie;
  77.     Int16 prawy_wejscie;
  78.     Int16 lewy_wyjscie;
  79.     Int16 prawy_wyjscie;
  80.     Int16 mono_wejscie;
  81.  
  82.     // Przetwarzanie próbek sygnału w pętli
  83.     while (1) {
  84.  
  85.         // odczyt próbek audio, zamiana na mono
  86.         aic3204_codec_read(&lewy_wejscie, &prawy_wejscie);
  87.         mono_wejscie = (lewy_wejscie >> 1) + (prawy_wejscie >> 1);
  88.  
  89.         // sprawdzamy czy wciśnięto przycisk
  90.         // argument: maksymalna liczba obsługiwanych trybów
  91.         krok = pushbuttons_read(4);
  92.         if (krok == 0) // oba wciśnięte - wyjście
  93.             break;
  94.         else if (krok != poprzedni_krok) {
  95.             // nastąpiła zmiana trybu - wciśnięto przycisk
  96.             USBSTK5515_ULED_setall(0x0F); // zgaszenie wszystkich diód
  97.             if (krok == 1) {
  98.                 // wypisanie informacji na wyświetlaczu
  99.                 oled_display_message("PROJEKT ZPS        ", "ORYGINALNY         ");
  100.                 // zapalenie diody nr 1
  101.                 USBSTK5515_ULED_on(0);
  102.             } else if (krok == 2) {
  103.                 oled_display_message("PROJEKT ZPS        ", "FILTR              ");
  104.                 USBSTK5515_ULED_on(1);
  105.             } else if (krok == 3) {
  106.                 oled_display_message("PROJEKT ZPS        ", "FILTR BLOK         ");
  107.                 USBSTK5515_ULED_on(2);
  108.             } else if (krok == 4) {
  109.                 oled_display_message("PROJEKT ZPS        ", "WIDMO              ");
  110.                 USBSTK5515_ULED_on(3);
  111.             }
  112.             // zapisujemy nowo ustawiony tryb
  113.             poprzedni_krok = krok;
  114.         }
  115.  
  116.  
  117.         // zadadnicze przetwarzanie w zależności od wybranego kroku
  118.  
  119.         if (krok == 1) {
  120.             // tryb podstawowy - kopiowanie sygnału
  121.             lewy_wyjscie = mono_wejscie;
  122.             prawy_wyjscie = mono_wejscie;
  123.  
  124.         } else if (krok == 2) {
  125.  
  126.             for(k = 0; k < NUM_SAMPLES; k++){                                                   //pętla filtrująca sygnał z tablicy wejściowej metodą próbka po próbce
  127.                     fir((DATA*)&mono_wejscie, (DATA*)filtr_fir, (DATA*)&obliczona, bufor, 1, N);            //wywołanie funkcji fir z biblioteki DSPLIB (liczenie pojedynczych próbek)
  128.                     lewy_wyjscie =  obliczona;
  129.                     prawy_wyjscie = obliczona;
  130.                 }
  131.  
  132.  
  133.         } else if (krok == 3) {
  134.  
  135.             for(i = 0; i < M; i++){                                                                 //pętla iterująca próbki z sygnalu wejsciowego
  136.                 y = _smaci(y, mono_wejscie, filtr_fir[i]);                                          //mnożenie dwóch liczb Q15 sprawia, że y jest w formacie Q30
  137.                 lewy_wyjscie =  (short)(_sround(y) >> 15);                                          //zaokrąglenie i przejcie z formatu Q30 na Q15
  138.                 prawy_wyjscie = (short)(_sround(y) >> 15);                                          //zaokrąglenie i przejcie z formatu Q30 na Q15
  139.             }
  140.  
  141.         } else if (krok == 4) {
  142.  
  143.  
  144.             lewy_wyjscie = mono_wejscie;
  145.             prawy_wyjscie = mono_wejscie;
  146.  
  147.         }
  148.  
  149.         // zapisanie wartości na wyjście audio
  150.         aic3204_codec_write(lewy_wyjscie, prawy_wyjscie);
  151.  
  152.     }
  153.  
  154.     // wciśnięcie obu przycisków jednocześnie kończy działanie pętli
  155.     aic3204_disable();
  156.     oled_display_message("KONIEC PRACY       ", "                   ");
  157.     while(1); // nie wychodź z programu
  158. }
Advertisement
Add Comment
Please, Sign In to add comment