FFT, Интерпретация результата преобразования
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: FFT, Интерпретация результата преобразования
Думаю что если Ts поставить как 2048 то все станет хорошо
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: FFT, Интерпретация результата преобразования
А что, Ts в этой подпрограмме равен (число комплексных коэффициентов)*2
Хорошо, что у меня МатЛаба нет
Хорошо, что у меня МатЛаба нет
Re: FFT, Интерпретация результата преобразования
Добрый день, Сергей.Бахурин Сергей писал(а):Думаю что если Ts поставить как 2048 то все станет хорошо
Картина не изменилась совершенно.
Извините, не понял высказывание. Что не так?Santik писал(а):А что, Ts в этой подпрограмме равен (число комплексных коэффициентов)*2
Хорошо, что у меня МатЛаба нет
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: FFT, Интерпретация результата преобразования
Nuv_exam_signal - это двумерный массив? По крайней мере я так понял из распечатки -
там идет:
число, 0.,число, 0., ....
Может эти данные использовать (очищенные):
там идет:
число, 0.,число, 0., ....
Может эти данные использовать (очищенные):
Re: FFT, Интерпретация результата преобразования
Nuv_exam_signal - массив одномерный, это семплы АЦП. Такой вот сигнал.
Да и потом, в микроконтроллере БПФ рассчитывает, полученный результат соответствует описанию примера в файле помощи к библиотеке.
Точно такой же результат получили вы - максимум амплитуды на точке 213 в массиве после преобразования и зеркальное отображение спектра, все честно.
А вот MATLAB дает вообще непонятные результаты, при чем, если вырезать все лишнее, так сказать, в лоб, то картина спектра соответствует спектру из примера.
Сказать, что MATLAB делает что-то не так, не могу, так как сперва повторял пример описанный на http://habrahabr.ru/post/196374/, получилось все как в примере.
Основной вопрос - почему получается четыре зеркальных друг другу спектра, причем основной спектр имеет зеркальный и потом еще имеем зеркальное отображение это пары (основного и зеркального)?
Я сегодня попробую вставить и прогнать почищенный вами массив, может, что-то поменяется.
Сергей, вы не пробовали у себя мой скрипт, повторилась ли картина?
Да и потом, в микроконтроллере БПФ рассчитывает, полученный результат соответствует описанию примера в файле помощи к библиотеке.
Точно такой же результат получили вы - максимум амплитуды на точке 213 в массиве после преобразования и зеркальное отображение спектра, все честно.
А вот MATLAB дает вообще непонятные результаты, при чем, если вырезать все лишнее, так сказать, в лоб, то картина спектра соответствует спектру из примера.
Сказать, что MATLAB делает что-то не так, не могу, так как сперва повторял пример описанный на http://habrahabr.ru/post/196374/, получилось все как в примере.
Основной вопрос - почему получается четыре зеркальных друг другу спектра, причем основной спектр имеет зеркальный и потом еще имеем зеркальное отображение это пары (основного и зеркального)?
Я сегодня попробую вставить и прогнать почищенный вами массив, может, что-то поменяется.
Сергей, вы не пробовали у себя мой скрипт, повторилась ли картина?
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: FFT, Интерпретация результата преобразования
Ну, всё понятно !
Исходные данные были комплексные, мнимая часть каждой выборки =0
Поэтому в данных каждое второе значение = 0.
Я вот тоже Нулями свой файл разбавил (через выборку) и получил:
Исходные данные были комплексные, мнимая часть каждой выборки =0
Поэтому в данных каждое второе значение = 0.
Я вот тоже Нулями свой файл разбавил (через выборку) и получил:
Re: FFT, Интерпретация результата преобразования
Добрый вечер, спасибо большое за помощь.
Теперь все встало на места.
Массив действительно комплексный.
Теперь разбираюсь почему как странно записываются комплексный числа в массив.
Теперь понятно почему в примере программы для микроконтроллера функция БПФ называется cfft(); - преобразование для комплексных чисел.
Спасибо!
Теперь все встало на места.
Массив действительно комплексный.
Теперь разбираюсь почему как странно записываются комплексный числа в массив.
Теперь понятно почему в примере программы для микроконтроллера функция БПФ называется cfft(); - преобразование для комплексных чисел.
Спасибо!
Re: FFT, Интерпретация результата преобразования
Доброе утро.
У меня похожая проблема.
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 должны быть нулевыми)" - не понимаю, что это.
У меня похожая проблема.
Код: Выделить всё
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
}
При подаче с генератора на вход АЦП синуса 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 должны быть нулевыми)" - не понимаю, что это.
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: FFT, Интерпретация результата преобразования
А что такое 64? Только половину массива переупорядочиваем?cbrev(_buff,_buff,64);//Битреверсное переупорядочивание комплексных чисел из DSPlib
Я бы на первом этапе работу АЦП эмулировал.
А... понял - буфер 64 комплексных значений
Re: FFT, Интерпретация результата преобразования
Функция комплексная, поэтому NX/2.Santik писал(а):А что такое 64? Только половину массива переупорядочиваем?cbrev(_buff,_buff,64);//Битреверсное переупорядочивание комплексных чисел из DSPlib
Я бы на первом этапе работу АЦП эмулировал.
Я проверял значения в памяти, она делает реверсию адресов отдельно для четных и нечетных элементов массива, на выходе 128 значений получается.
Вот этот (log(nx) + 1 LSB меня еще смущает.
На вход АЦП подаю синус, на выходе DAC его же вижу без искажений.
Пробовал заменить АЦП заранее подготовленным массивом данных - результат такойже.