1.
float re = 0;
float im = 0;
переместите объявление или не забудьте сбросить эти значения на ноль внутри цикла перед вложенным циклом.
2. Теорема Найквиста – Шеннона (также известная как теорема Котельникова) говорит о частоте дискретизации.Чтобы передавать частоты до F, вы должны иметь частоту дискретизации не менее 2 * F.Это никак не связано с количеством образцов.Если ваш MCU работает на частоте 16 МГц, я могу предположить, что у вас есть частота дискретизации около 9 кГц = 16 МГц / 128 (предварительное масштабирование АЦП) / 14 (тактовые частоты АЦП на одну выборку)
3. Что такое Init_initController();
?В вашем коде нет такой функции.Что он делает?Почему это must be the first "init" action/call!
?Вероятно, есть проблема.Глядя на wdogtrig();
, я могу предположить, что где-то сторожевой таймер инициализирован.Поскольку математика с плавающей точкой занимает слишком много времени, срок действия сторожевого таймера истекает до окончания цикла.
Либо отключите сторожевой таймер, либо поместите wdogtrig();
внутри цикла в computeDft();
, чтобы чаще сбрасывать сторожевой таймер.
4. Вы можете сделать объявление
unsigned char x[N] = {0};
global, перемещая ее за пределы функции, память выделяется один раз и не пополняет стек при каждом вызове функции
5. Пожалуйста, еслиВы задаете вопрос, предоставьте всю информацию внутри вопроса: что вы ожидали, что вы получили, все пользовательские функции и точный код, который не работает.