Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <dsplib.h>
- #define NUM_SAMPLES 5000
- #define krok 137
- int sinus[NUM_SAMPLES];
- void sint(int* tablica_sin, unsigned int dl_tablicy, unsigned int step){
- signed int amplituda = 0;
- signed int x = 0;
- int i;
- int minus = 0;
- const long a_1 = 12868; //3.14159 w dziesiętnym (pi)
- const long a_2 = 21167; //5.16771 w dziesiętnym (pi^3/3!)
- const long a_3 = 10445; //2.55016 w dziesiętnym (pi^5/5!)
- const long a_4 = 2455; //0.59926 w dziesiętnym (pi^7/7!)
- int dwa, trzy, piec, siedem;
- long y = 0;
- tablica_sin[0] = 0;
- for(i = 1; i < dl_tablicy; i++){ // pętla licząca wartosci próbek
- amplituda = amplituda + step;
- if(amplituda < 0)
- {minus = 1;}
- else{minus = 0;}
- x = amplituda < 0 ? -amplituda : amplituda; //obliczenie wartosci bezwzględnej kąta fazowego
- if(x > 16384){ //0.5 w Q15 -- > 16384
- x = 32767 - x;
- }
- dwa = _smpy(x, x);
- trzy = _smpy(dwa, x);
- piec = _smpy(dwa, trzy);
- siedem = _smpy(dwa, piec);
- y = a_1*x - a_2*trzy + a_3*piec - a_4*siedem; //szereg Taylora do 7 potęgi (w Q27)
- if(minus == 1){
- tablica_sin[i] = -(int)((y + (1<<11)) >> 12); //przejcie do zapisu Q15 i ustawienie przeciwnego znaku
- } //dla ujemnej oryginalnej wartosci kąta fazowego (trzecia lub czwarta ćwiartka)
- else{
- tablica_sin[i] = (int)((y + (1<<11)) >> 12); //przejcie do zapisu Q15
- }
- }
- }
- void main(void) {
- sint(sinus, NUM_SAMPLES, krok); //wywołanie funkcji sint()
- while (1); // do not exit
- }
Advertisement
Add Comment
Please, Sign In to add comment