Здравствуйте! Нашёл в интернете код дискретного преобразования Фурье .
Немного подправил под себя.
Спойлер
Код:
//LOOKUP TABLE//
#include <avr/pgmspace.h>
PROGMEM const int16_t cos_lookup[]= {
10000,9998,9993,9986,9975,9961,9945,9925,9902,
9876,9848,9816,9781,9743,9702,9659,9612,9563,
9510,9455,9396,9335,9271,9205,9135,9063,8987,
8910,8829,8746,8660,8571,8480,8386,8290,8191,
8090,7986,7880,7771,7660,7547,7431,7313,7193,
7071,6946,6819,6691,6560,6427,6293,6156,6018,
5877,5735,5591,5446,5299,5150,5000,4848,4694,
4539,4383,4226,4067,3907,3746,3583,3420,3255,
3090,2923,2756,2588,2419,2249,2079,1908,1736,
1564,1391,1218,1045,871,697,523,348,174,
0,-174,-348,-523,-697,-871,-1045,-1218,-1391,
-1564,-1736,-1908,-2079,-2249,-2419,-2588,-2756,-2923,
-3090,-3255,-3420,-3583,-3746,-3907,-4067,-4226,-4383,
-4539,-4694,-4848,-4999,-5150,-5299,-5446,-5591,-5735,
-5877,-6018,-6156,-6293,-6427,-6560,-6691,-6819,-6946,
-7071,-7193,-7313,-7431,-7547,-7660,-7771,-7880,-7986,
-8090,-8191,-8290,-8386,-8480,-8571,-8660,-8746,-8829,
-8910,-8987,-9063,-9135,-9205,-9271,-9335,-9396,-9455,
-9510,-9563,-9612,-9659,-9702,-9743,-9781,-9816,-9848,
-9876,-9902,-9925,-9945,-9961,-9975,-9986,-9993,-9998,
-10000,-9998,-9993,-9986,-9975,-9961,-9945,-9925,-9902,
-9876,-9848,-9816,-9781,-9743,-9702,-9659,-9612,-9563,
-9510,-9455,-9396,-9335,-9271,-9205,-9135,-9063,-8987,
-8910,-8829,-8746,-8660,-8571,-8480,-8386,-8290,-8191,
-8090,-7986,-7880,-7771,-7660,-7547,-7431,-7313,-7193,
-7071,-6946,-6819,-6691,-6560,-6427,-6293,-6156,-6018,
-5877,-5735,-5591,-5446,-5299,-5150,-5000,-4848,-4694,
-4539,-4383,-4226,-4067,-3907,-3746,-3583,-3420,-3255,
-3090,-2923,-2756,-2588,-2419,-2249,-2079,-1908,-1736,
-1564,-1391,-1218,-1045,-871,-697,-523,-348,-174,
0,174,348,523,697,871,1045,1218,1391,
1564,1736,1908,2079,2249,2419,2588,2756,2923,
3090,3255,3420,3583,3746,3907,4067,4226,4383,
4539,4694,4848,5000,5150,5299,5446,5591,5735,
5877,6018,6156,6293,6427,6560,6691,6819,6946,
7071,7193,7313,7431,7547,7660,7771,7880,7986,
8090,8191,8290,8386,8480,8571,8660,8746,8829,
8910,8987,9063,9135,9205,9271,9335,9396,9455,
9510,9563,9612,9659,9702,9743,9781,9816,9848,
9876,9902,9925,9945,9961,9975,9986,9993,9998
};
PROGMEM const int16_t sin_lookup[]= {
0,174,348,523,697,871,1045,1218,1391,
1564,1736,1908,2079,2249,2419,2588,2756,2923,
3090,3255,3420,3583,3746,3907,4067,4226,4383,
4539,4694,4848,4999,5150,5299,5446,5591,5735,
5877,6018,6156,6293,6427,6560,6691,6819,6946,
7071,7193,7313,7431,7547,7660,7771,7880,7986,
8090,8191,8290,8386,8480,8571,8660,8746,8829,
8910,8987,9063,9135,9205,9271,9335,9396,9455,
9510,9563,9612,9659,9702,9743,9781,9816,9848,
9876,9902,9925,9945,9961,9975,9986,9993,9998,
10000,9998,9993,9986,9975,9961,9945,9925,9902,
9876,9848,9816,9781,9743,9702,9659,9612,9563,
9510,9455,9396,9335,9271,9205,9135,9063,8987,
8910,8829,8746,8660,8571,8480,8386,8290,8191,
8090,7986,7880,7771,7660,7547,7431,7313,7193,
7071,6946,6819,6691,6560,6427,6293,6156,6018,
5877,5735,5591,5446,5299,5150,4999,4848,4694,
4539,4383,4226,4067,3907,3746,3583,3420,3255,
3090,2923,2756,2588,2419,2249,2079,1908,1736,
1564,1391,1218,1045,871,697,523,348,174,
0,-174,-348,-523,-697,-871,-1045,-1218,-1391,
-1564,-1736,-1908,-2079,-2249,-2419,-2588,-2756,-2923,
-3090,-3255,-3420,-3583,-3746,-3907,-4067,-4226,-4383,
-4539,-4694,-4848,-4999,-5150,-5299,-5446,-5591,-5735,
-5877,-6018,-6156,-6293,-6427,-6560,-6691,-6819,-6946,
-7071,-7193,-7313,-7431,-7547,-7660,-7771,-7880,-7986,
-8090,-8191,-8290,-8386,-8480,-8571,-8660,-8746,-8829,
-8910,-8987,-9063,-9135,-9205,-9271,-9335,-9396,-9455,
-9510,-9563,-9612,-9659,-9702,-9743,-9781,-9816,-9848,
-9876,-9902,-9925,-9945,-9961,-9975,-9986,-9993,-9998,
-10000,-9998,-9993,-9986,-9975,-9961,-9945,-9925,-9902,
-9876,-9848,-9816,-9781,-9743,-9702,-9659,-9612,-9563,
-9510,-9455,-9396,-9335,-9271,-9205,-9135,-9063,-8987,
-8910,-8829,-8746,-8660,-8571,-8480,-8386,-8290,-8191,
-8090,-7986,-7880,-7771,-7660,-7547,-7431,-7313,-7193,
-7071,-6946,-6819,-6691,-6560,-6427,-6293,-6156,-6018,
-5877,-5735,-5591,-5446,-5299,-5150,-5000,-4848,-4694,
-4539,-4383,-4226,-4067,-3907,-3746,-3583,-3420,-3255,
-3090,-2923,-2756,-2588,-2419,-2249,-2079,-1908,-1736,
-1564,-1391,-1218,-1045,-871,-697,-523,-348,-174
};
PROGMEM const uint8_t degree_lookup[]= {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,5,11,16,22,28,33,39,45,50,56,61,67,
73,78,84,90,95,101,106,112,118,123,129,135,140,146,151,
157,163,168,174,0,11,22,33,45,56,67,78,90,101,112,
123,135,146,157,168,0,11,22,33,44,56,67,78,90,101,
112,123,134,146,157,168,0,16,33,50,67,84,101,118,135,
151,168,5,22,39,56,73,90,106,123,140,157,174,11,28,
45,61,78,95,112,129,146,163,0,22,45,67,90,112,135,
157,0,22,44,67,90,112,134,157,0,22,45,67,89,112,
134,157,0,22,45,67,89,112,135,157,0,28,56,84,112,
140,168,16,44,73,101,129,157,5,33,61,89,118,146,174,
22,50,78,106,135,163,11,39,67,95,123,151,0,33,67,
101,135,168,22,56,90,123,157,11,45,78,112,146,0,33,
67,101,135,168,22,56,90,123,157,11,44,78,112,146,0,
39,78,118,157,16,56,95,134,174,33,73,112,151,11,50,
89,129,168,28,67,106,146,5,44,84,123,163,22,61,101,
140,0,45,90,135,0,44,90,134,0,45,89,134,0,45,
89,135,0,44,90,135,179,44,89,134,0,45,90,134,179,
44,90,135,0,50,101,151,22,73,123,174,45,95,146,16,
67,118,168,39,90,140,11,61,112,163,33,84,134,5,56,
106,157,28,78,129,0,56,112,168,44,101,157,33,89,146,
22,78,135,11,67,123,179,56,112,168,45,101,157,33,90,
146,22,78,134,11,67,123,0,61,123,5,67,129,11,73,
134,16,78,140,22,84,146,28,89,151,33,95,157,39,101,
163,44,106,168,50,112,174,56,118,0,67,135,22,90,157,
45,112,0,67,135,22,90,157,44,112,0,67,134,22,90,
157,44,112,0,67,134,22,89,157,45,112,0,73,146,39,
112,5,78,151,45,118,11,84,157,50,123,16,90,163,56,
129,22,95,168,61,134,28,101,174,67,140,33,106,0,78,
157,56,134,33,112,11,89,168,67,146,44,123,22,101,179,
78,157,56,134,33,112,11,89,168,67,146,44,123,22,101,
0,84,168,73,157,61,146,50,135,39,123,28,112,16,101,
5,90,174,78,163,67,151,56,140,45,129,33,118,22,106,
11,95
};
Сейчас в нем расчет на 16 частот, но по факту работают только 15, первая записана нулями.