Например TDA7294

Форум РадиоКот • Просмотр темы - преобразование фурье
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 20:58:30

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: преобразование фурье
СообщениеДобавлено: Вс окт 29, 2017 19:38:23 
Родился
Аватар пользователя

Зарегистрирован: Вс дек 25, 2011 12:15:48
Сообщений: 15
Откуда: Владимир
Рейтинг сообщения: 0
Добрый день.
Разбираюсь с преобразованием для аудио-спектрометра, нужна консультация по коду и по функциям.
Может чегото не хватает или делаю не так.
Контроллер STM32f407. Математическую библиотеку "arm_math.h" подключил
Код большой, приведу главные функции:
//обьявляем размер FFT
#define FFT_SIZE 32
//для теста - массив чисел, для обычной синусоиды
const uint16_t aSine12bit[32] = {
2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};
В начале функции локальные переменные
int16_t fft_Sbuff[FFT_SIZE] = {0};
int16_t fft_Dbuff[FFT_SIZE*2] = {0};

По таймеру, раз в секунду:
Копируем во входной массив для fft "тестовый" синус.
for (i=0; i<FFT_SIZE; i++) {
fft_Sbuff[i]=aSine12bit[i];}
Делаем преобразование(раз в секунду)
arm_rfft_instance_q15 S;
status = arm_rfft_init_q15(&S, FFT_SIZE, 0, 1);//функция инициализации необходима для БФП
if(status == ARM_MATH_SUCCESS)
{
arm_rfft_q15(&S,fft_Sbuff, fft_Dbuff);//выполнение БФП
arm_cmplx_mag_q15(fft_Dbuff, fft_Sbuff, FFT_SIZE);//вычисляем амплитуды гармоник
}
Вывожу график вертикальными линиями
for (i=0; i<FFT_SIZE; i++) {
LCD_vline(i,100, fft_Sbuff[i]);}//аргументы: LCD_vline(x,y, len);
В выходном массиве fft_Sbuff находятся амплитуды гармоник 32 частотных под_диапазонов?
На графике должна быть одна линия.
Как сделать преобразование для реального сигнала? Каким образом подобрать частоту оцифровки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: преобразование фурье
СообщениеДобавлено: Сб ноя 04, 2017 09:20:14 
Электрический кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 135
Зарегистрирован: Сб мар 09, 2013 11:29:22
Сообщений: 1020
Откуда: 40RUS, Жуков
Рейтинг сообщения: 0
http://cvs.aiq.ru/stm32f303-2_2/stm32f303-2_2.html
viewtopic.php?p=3198737#p3198737

_________________
IVL ex UA6PJ OSC_F303


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: преобразование фурье
СообщениеДобавлено: Вс ноя 05, 2017 18:56:49 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Давно я так не обламывался.
Решил на халяву посмотреть исходник по http://cvs.aiq.ru/stm32f103-2_2/stm32f4103-2_2.html ссылке, а там каша без переноса строк...
И ведь непонятно, то-ли комментарий // на текст, то-ли на часть кода в тени.

_________________
sRtoS


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: преобразование фурье
СообщениеДобавлено: Вс ноя 05, 2017 22:29:58 
Грызет канифоль
Аватар пользователя

Карма: 6
Рейтинг сообщений: 202
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Сообщений: 272
Откуда: Москва
Рейтинг сообщения: 0
Другой кнопкой мыши - сохранить как - и сохранить с расширением .c

Во вторник могу на яндекс диск бросить....

Вот код вместе с логарифмом и выводом на экран:
Спойлер#include "FFT.h"

void FFT(uint16_t *buffer)
{
static float Re[512];
static float Im[512];
register int i, j, n, k, io, ie, in, nn;
float ru, iu, rtp, itp, rtq, itq, rw, iw, sr;

union ADVFLOAT
{
float x;
struct
{
unsigned int mant : 23; // Mantissa without leading one
unsigned int exp : 8; // Exponential part
unsigned int sign : 1; // Indicator of the negative number
};
};

for(int i=0; i<512; i++) {
float aaa=buffer[i];
Re[i] = aaa/256;
Im[i] = 0.0;
}

nn = 512 >> 1;
ie = 512;
for(n=1; n<=9; n++)
{
rw = Rcoef[9 - n];
iw = Icoef[9 - n];
in = ie >> 1;
ru = 1.0F;
iu = 0.0F;
for(j=0; j<in; j++)
{
for(i=j; i<512; i+=ie)
{
io = i + in;
rtp = Re[i] + Re[io];
itp = Im[i] + Im[io];
rtq = Re[i] - Re[io];
itq = Im[i] - Im[io];
Re[io] = rtq * ru - itq * iu;
Im[io] = itq * ru + rtq * iu;
Re[i] = rtp;
Im[i] = itp;
}
sr = ru;
ru = ru * rw - iu * iw;
iu = iu * rw + sr * iw;
}
ie >>= 1;
}
for(j=i=1; i<512; i++)
{
if(i < j)
{
io = i - 1;
in = j - 1;
rtp = Re[in];
itp = Im[in];
Re[in] = Re[io];
Im[in] = Im[io];
Re[io] = rtp;
Im[io] = itp;
}
k = nn;
while(k < j)
{
j = j - k;
k >>= 1;
}
j = j + k;
}

SendCMD(ILI9341_MAC);
SendDAT(Orient_Land);
SendCMD(ILI9341_PAGE_ADDR);
SendDAT(0);
SendDAT(1+31);
SendDAT(1);
SendDAT(1+31);
SendCMD(ILI9341_COLUMN_ADDR);
SendDAT(0);
SendDAT(33-10);
SendDAT(0);
SendDAT(214-10);
SendCMD(ILI9341_GRAM);
GPIO_SetBits(GPIOB, LCD_RS); // data

for (uint16_t j = 1; j < 257; j++) {
for (uint8_t i = 0; i < 182; i++) {
union ADVFLOAT ax;
int exp;
ax.x = (Re[j]*Re[j]+Im[j]*Im[j]);
exp = ax.exp - 127;
ax.sign = 0;
ax.exp = 127;
float D=12*((ax.x - 1.0f) * LOG2E + exp);
if (i<D) {
// int K=D;
SPI_I2S_SendData(SPI1, WHITE>>8);
SPI_I2S_SendData(SPI1, WHITE);
}
else {
if (i==46||i==92||i==138||j==64||j==128||j==192) {
SPI_I2S_SendData(SPI1, 0x01);
SPI_I2S_SendData(SPI1, 0xE7);
}
else {
SPI_I2S_SendData(SPI1, 0);
SPI_I2S_SendData(SPI1, 0);
}
}
}
}

}


//==================
// fft.h

static const float Rcoef[14] =
{ -1.0000000000000000F, 0.0000000000000000F, 0.7071067811865475F,
0.9238795325112867F, 0.9807852804032304F, 0.9951847266721969F,
0.9987954562051724F, 0.9996988186962042F, 0.9999247018391445F,
0.9999811752826011F, 0.9999952938095761F, 0.9999988234517018F,
0.9999997058628822F, 0.9999999264657178F
};
static const float Icoef[14] =
{ 0.0000000000000000F, -1.0000000000000000F, -0.7071067811865474F,
-0.3826834323650897F, -0.1950903220161282F, -0.0980171403295606F,
-0.0490676743274180F, -0.0245412285229122F, -0.0122715382857199F,
-0.0061358846491544F, -0.0030679567629659F, -0.0015339801862847F,
-0.0007669903187427F, -0.0003834951875714F
};

#define LOG2E 1.44269504088896340736f

void FFT(uint16_t *buffer);


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: преобразование фурье
СообщениеДобавлено: Пн ноя 06, 2017 17:19:49 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
а там каша без переноса строк

там она с *nix-овыми переносами. Ваш редактор не умеет их понимать, или хотя бы автоформатирование кода?)

main.c: https://pastebin.com/sNhVNwWp


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: преобразование фурье
СообщениеДобавлено: Пн ноя 06, 2017 20:32:14 
Электрический кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 135
Зарегистрирован: Сб мар 09, 2013 11:29:22
Сообщений: 1020
Откуда: 40RUS, Жуков
Рейтинг сообщения: 0
Я все в Кейл запульнул и нормально

_________________
IVL ex UA6PJ OSC_F303


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y