Advertisement
martaczaska

ZPS_3_kom

May 31st, 2020
1,140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. /*
  2. WYKONAŁA: MARTA TRZASKA 171632
  3. TELEKOMUNIKACJA 1, SEMESTR 6
  4. */
  5.  
  6. #include <dsplib.h>
  7. #include <testsignal.h>                                 //tablica z próbkami fragmentu nagrania dźwięku klarnetu
  8. #include <okno_hamminga.h>                              //tablica ze współczynnikami okna Hamminga (format Q15)
  9. #include <stdio.h>
  10.  
  11. #define NUM_SAMPLES 2048                                //ilosc probek
  12. #define Nr 1000                                         //liczba wartoci funkcji autokorelacji
  13.  
  14. int klarnet[NUM_SAMPLES];                              
  15. int okno_h[NUM_SAMPLES];
  16. int bufor[NUM_SAMPLES];
  17. int autokorelacja[NUM_SAMPLES];
  18.  
  19. int i;
  20. int j = 0;
  21.  
  22. int maks = 0;
  23.  
  24. const long f_s = 48000;
  25.  
  26. void maksimum(int* tablica, int podloga, int number, int wybor){
  27.     int znalezione = 0;
  28.     int roznica = 0;
  29.     int w;
  30.  
  31.     if(wybor == 1){
  32.         w = 0;
  33.     }
  34.     else if(wybor == 2){
  35.         w = 1;
  36.     }
  37.  
  38.     for(i = w; i < number; i++){
  39.             if(tablica[i] > podloga){
  40.                 roznica = tablica[i] - tablica[i - 1];
  41.                 if(roznica > 0){
  42.                     maks = i;
  43.                     znalezione = 1;
  44.                     printf("Indeks maksimum: ");
  45.                     printf("%d \n", maks);
  46.                 }
  47.                 else{
  48.                     if(znalezione==1 && (roznica < 0)){
  49.                         break;
  50.                     }
  51.                     else{continue;}
  52.                 }
  53.             }
  54.             else{continue;}
  55.     }
  56. }
  57.  
  58. void czestotliwosc(int p){
  59.     long df = f_s >> 11; // dzielenie przez 2048
  60.     df = ((df << 15) + (1 << 14));                  //format Q15
  61.     int f_maks = (int)((p*df) >> 15);
  62.  
  63.     printf("Częstotliwosc znalezionego maksimum wynosi: ");
  64.     printf("%d \n", f_maks);
  65. }
  66.  
  67.  
  68. void main(void) {
  69.     int x = okno_hamminga[0];
  70.  
  71.     for (i = 0; i < NUM_SAMPLES; i++){                        //przypisanie probek nagrania dźwięku klarnetu do tablicy klarnet[]
  72.         klarnet[i] = testsignal[i];
  73.         //klarnet[i] = _smpy(okno_hamminga[i], testsignal[i]);
  74.     }
  75.  
  76.     rfft((DATA*)klarnet, NUM_SAMPLES, SCALE);                 //funkcja z biblioteki DSPLIB pozwalająca obliczenie widma (FFT) dla sygnału rzeczywistego
  77.  
  78.     for (i = 0; i < NUM_SAMPLES; i++){                        //obliczenie kwadratów próbek widma
  79.         klarnet[i] = _smpy(klarnet[i], klarnet[i]);          
  80.     }
  81.  
  82.     for(i = 2; i < NUM_SAMPLES; i = i + 2){                   //sumowanie kwadratów częsci rzeczywistych i urojonych (Re[i]^2 + Im[i+1]^2)
  83.         klarnet[j] = klarnet[i] + klarnet[i + 1];
  84.         j++;
  85.     }
  86.  
  87.     sqrt_16((DATA*)klarnet, (DATA*)klarnet, 512);            //obliczenie widma amplitudowego (modułu widma zespolonego)
  88.  
  89.     maksimum(klarnet, 2800, NUM_SAMPLES, 1);
  90.     czestotliwosc(maks);
  91.  
  92.     /////////////////do 5. :
  93.  
  94.     for (i = 0; i < NUM_SAMPLES; i++){
  95.             bufor[i] = testsignal[i] >> 4;
  96.         }
  97.  
  98.     acorr((DATA*)bufor, (DATA*)autokorelacja, NUM_SAMPLES, NUM_SAMPLES, bias);
  99.  
  100.     maksimum(autokorelacja, 17, NUM_SAMPLES, 2);
  101.     //koniec 5.
  102.  
  103.     while (1); // do not exit
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement