martaczaska

sinus_komentarze

May 2nd, 2020
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. #include <dsplib.h>
  2.  
  3. #define NUM_SAMPLES 5000
  4. #define krok 137
  5.  
  6. int sinus[NUM_SAMPLES];
  7.  
  8. void sint(int* tablica_sin, unsigned int dl_tablicy, unsigned int step){
  9.         signed int amplituda = 0;
  10.         signed int x = 0;
  11.         int i;
  12.         int minus = 0;
  13.         const long a_1 = 12868;                                 //3.14159 w dziesiętnym (pi)
  14.         const long a_2 = 21167;                                 //5.16771  w dziesiętnym (pi^3/3!)
  15.         const long a_3 = 10445;                                 //2.55016 w dziesiętnym (pi^5/5!)
  16.         const long a_4 = 2455;                                  //0.59926 w dziesiętnym (pi^7/7!)
  17.  
  18.         int dwa, trzy, piec, siedem;
  19.         long y = 0;
  20.  
  21.         tablica_sin[0] = 0;
  22.         for(i = 1; i < dl_tablicy; i++){                       // pętla licząca wartosci próbek
  23.             amplituda = amplituda + step;
  24.  
  25.             if(amplituda < 0)
  26.                 {minus = 1;}
  27.             else{minus = 0;}
  28.  
  29.             x = amplituda < 0 ? -amplituda : amplituda;       //obliczenie wartosci bezwzględnej kąta fazowego
  30.             if(x > 16384){                                    //0.5 w Q15 -- > 16384
  31.                 x = 32767 - x;
  32.             }
  33.             dwa = _smpy(x, x);
  34.             trzy = _smpy(dwa, x);
  35.             piec = _smpy(dwa, trzy);
  36.             siedem = _smpy(dwa, piec);
  37.  
  38.             y = a_1*x - a_2*trzy + a_3*piec - a_4*siedem;     //szereg Taylora do 7 potęgi (w Q27)
  39.  
  40.             if(minus == 1){
  41.                 tablica_sin[i] = -(int)((y + (1<<11)) >> 12); //przejcie do zapisu Q15 i ustawienie przeciwnego znaku
  42.             }                                                 //dla ujemnej oryginalnej wartosci kąta fazowego (trzecia lub czwarta ćwiartka)
  43.             else{
  44.                 tablica_sin[i] = (int)((y + (1<<11)) >> 12);  //przejcie do zapisu Q15
  45.             }
  46.         }
  47. }
  48.  
  49. void main(void) {
  50.     sint(sinus, NUM_SAMPLES, krok);                           //wywołanie funkcji sint()
  51.  
  52.     while (1); // do not exit
  53. }
Advertisement
Add Comment
Please, Sign In to add comment