Страница 2 из 6
Re: FFT, Интерпретация результата преобразования
Добавлено: 30 мар 2015, 14:18
Бахурин Сергей
Думаю что если Ts поставить как 2048 то все станет хорошо
Re: FFT, Интерпретация результата преобразования
Добавлено: 30 мар 2015, 18:15
Santik
Re: FFT, Интерпретация результата преобразования
Добавлено: 30 мар 2015, 18:55
Seges
Бахурин Сергей писал(а):Думаю что если Ts поставить как 2048 то все станет хорошо
Добрый день, Сергей.
Картина не изменилась совершенно.
Извините, не понял высказывание. Что не так?
Re: FFT, Интерпретация результата преобразования
Добавлено: 30 мар 2015, 19:34
Santik
Nuv_exam_signal - это двумерный массив? По крайней мере я так понял из распечатки -
там идет:
число, 0.,число, 0., ....
Может эти данные использовать (очищенные):
Re: FFT, Интерпретация результата преобразования
Добавлено: 31 мар 2015, 12:29
Seges
Nuv_exam_signal - массив одномерный, это семплы АЦП. Такой вот сигнал.
Да и потом, в микроконтроллере БПФ рассчитывает, полученный результат соответствует описанию примера в файле помощи к библиотеке.
Точно такой же результат получили вы - максимум амплитуды на точке 213 в массиве после преобразования и зеркальное отображение спектра, все честно.
А вот MATLAB дает вообще непонятные результаты, при чем, если вырезать все лишнее, так сказать, в лоб, то картина спектра соответствует спектру из примера.
Сказать, что MATLAB делает что-то не так, не могу, так как сперва повторял пример описанный на
http://habrahabr.ru/post/196374/, получилось все как в примере.
Основной вопрос - почему получается четыре зеркальных друг другу спектра, причем основной спектр имеет зеркальный и потом еще имеем зеркальное отображение это пары (основного и зеркального)?
Я сегодня попробую вставить и прогнать почищенный вами массив, может, что-то поменяется.
Сергей, вы не пробовали у себя мой скрипт, повторилась ли картина?
Re: FFT, Интерпретация результата преобразования
Добавлено: 31 мар 2015, 13:03
Santik
Ну, всё понятно !
Исходные данные были
комплексные, мнимая часть каждой выборки =0
Поэтому в данных каждое второе значение = 0.
Я вот тоже Нулями свой файл разбавил (через выборку) и получил:
Re: FFT, Интерпретация результата преобразования
Добавлено: 31 мар 2015, 22:07
Seges
Добрый вечер, спасибо большое за помощь.
Теперь все встало на места.
Массив действительно комплексный.
Теперь разбираюсь почему как странно записываются комплексный числа в массив.
Теперь понятно почему в примере программы для микроконтроллера функция БПФ называется cfft(); - преобразование для комплексных чисел.
Спасибо!
Re: FFT, Интерпретация результата преобразования
Добавлено: 02 окт 2015, 09:00
Андрей33
Доброе утро.
У меня похожая проблема.
Код: Выделить всё
void main()
{
while(1)
{//while_ON
if(IRQFLAG & 0x04)
{
buff_adc_dac1[0] = ADCREG;//считываем значение с АЦП(Q15)
DACREG =buff_adc_dac1[0];//записываем значение в ЦАП(Q15)
_buff[schet]=buff_adc_dac1[0];
schet++;
_buff[schet]=0;
schet++;
if(schet>=128)
{
cbrev(_buff,_buff,64);//Битреверсное переупорядочивание комплексных чисел из DSPlib
сfft(_buff,64,1);//Прямое комплексное БПФ из DSPlib
schet=0;
}
}
}//while_OFF
}
Fd=8k
При подаче с генератора на вход АЦП синуса 250Гц, вижу пики после БПФ в точках: 4; 12; 20; 28; 36; 44; 52; 60.
При подаче с генератора на вход АЦП синуса 500Гц, вижу пики после БПФ в точках: 8; 24; 40; 56.
При подаче с генератора на вход АЦП синуса 1000Гц, вижу пики после БПФ в точках: 16; 48.
При подаче с генератора на вход АЦП синуса 1500Гц, вижу пики после БПФ в точках: 8; 24; 40; 56.
При подаче с генератора на вход АЦП синуса 2000Гц, вижу пики после БПФ в точках: 32.
Если подаю больше 2кГц - пиков нет.
В чем может быть проблема?
В описании на функцию cbrev написано: "Входные данные должны быть выровнены по границе 2*nx
(log(nx) + 1 LSB должны быть нулевыми)" - не понимаю, что это.
Re: FFT, Интерпретация результата преобразования
Добавлено: 02 окт 2015, 11:28
Santik
cbrev(_buff,_buff,64);//Битреверсное переупорядочивание комплексных чисел из DSPlib
А что такое 64? Только половину массива переупорядочиваем?
Я бы на первом этапе работу АЦП эмулировал.
А... понял - буфер 64 комплексных значений
Re: FFT, Интерпретация результата преобразования
Добавлено: 02 окт 2015, 11:47
Андрей33
Santik писал(а):cbrev(_buff,_buff,64);//Битреверсное переупорядочивание комплексных чисел из DSPlib
А что такое 64? Только половину массива переупорядочиваем?
Я бы на первом этапе работу АЦП эмулировал.
Функция комплексная, поэтому NX/2.
Я проверял значения в памяти, она делает реверсию адресов отдельно для четных и нечетных элементов массива, на выходе 128 значений получается.
Вот этот (log(nx) + 1 LSB меня еще смущает.
На вход АЦП подаю синус, на выходе DAC его же вижу без искажений.
Пробовал заменить АЦП заранее подготовленным массивом данных - результат такойже.