nvn 0 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба Добрый день, Я использую плату STM32F429-Disco, беру сигнал с АЦП делаю FFT из CMSIS библиотеки и вывожу на экран амплитудный спектр, а как получить энергетический спектр из амплитудного? Поискал в интернете, нашел формулы, но как их применить в реальной программе не понимаю. Вот так получаю амплитудный спектр: /* Initialize the CFFT/CIFFT module, intFlag = 0, doBitReverse = 1 */ arm_cfft_radix4_init_f32(&S, FFT_SIZE, 0, 1); /* Process the data through the CFFT/CIFFT module */ arm_cfft_radix4_f32(&S, Input); /* Process the data through the Complex Magniture Module for calculating the magnitude at each bin */ arm_cmplx_mag_f32(Input, Output, FFT_SIZE); Может кто уже это все проходил, и подскажет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба 41 минуту назад, nvn сказал: а как получить энергетический спектр из амплитудного? я не знаю что такое энергетический спектр, побуду тут рядом с вами в теме - может кто расскажет что это такое? Всегда использовал то что вы назвали "амплитудным спектром" , ну иногда переводил его в логарифмический вид. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба 1 hour ago, nvn said: Вот так получаю амплитудный спектр: Может кто уже это все проходил, и подскажет? Так возводите в квадрат и получаете величину пропорциональную энергии. Умножаете на сопротивление - получаете энергию ( в случае если время существует и оно линейно ). Это ж закон Ома для линейных частотно независимых цепей. А так, конечно, надо еще брать FFT по току и перемножать с FFT по напряжению Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nvn 0 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба 2 hours ago, Lmx2315 said: я не знаю что такое энергетический спектр, побуду тут рядом с вами в теме - может кто расскажет что это такое? Всегда использовал то что вы назвали "амплитудным спектром" , ну иногда переводил его в логарифмический вид. Сам не знал, пока вот не пришлось столкнуться: https://wiki2.org/ru/Спектральная_плотность_мощности#Формальное_определение 58 minutes ago, AlexandrY said: Так возводите в квадрат и получаете величину пропорциональную энергии. Умножаете на сопротивление - получаете энергию ( в случае если время существует и оно линейно ). Это ж закон Ома для линейных частотно независимых цепей. А так, конечно, надо еще брать FFT по току и перемножать с FFT по напряжению В результате FFT получил массив Output[] с амплитудами. Их возводить в квадрат? То получу величину пропорциональную энергии, хм Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба Перемножать уровень чётных гармоник, уже после бпф. БПФБПФ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 24 сентября, 2019 Опубликовано 24 сентября, 2019 · Жалоба Что на что умножать? И что станет с нечетными гармониками? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 3 hours ago, Aleksandr Baranov said: что станет с нечетными гармониками Все будут перемножены, но по порядку. Для каждой новой частоты будут свои четные гармоники. Есть готовые решения - голосовые вокодеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба У вас результат комплексный? Может быть амплитуда и фаза. Это одно и то же, но разное представление. Одно из свойств преобразования Фурье -- теорема Парсеваля. Она об энергии. Энергия до преобразования равняется энергии после преобразования. Поищите в инете детали:https://ru.wikipedia.org/wiki/Теорема_Парсеваля Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 2 hours ago, Tarbal said: У вас результат комплексный? Может быть амплитуда и фаза. Это одно и то же, но разное представление. теорема Парсеваля - это всего лишь о том, что возводить в квадрат можно как до, так и после FFT. Но после FFT в квадрат придется возводить комплексные числа Но если возводить до, то часто придется отдельно делать FFT для напряжений (поскольку это нужней) и для мощностей. Т.е. два FFT Вот и вся дилемма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nvn 0 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 11 hours ago, AVI-crak said: Перемножать уровень чётных гармоник, уже после бпф. БПФБПФ после функции arm_cfft_radix4_f32 (&S, Input); получаем результат БПФ - массив с комплексными величинами в виде Input[] = {real[0], imag[0], real[1], imag[1], ...} и такой же вопрос: 8 hours ago, Aleksandr Baranov said: Что на что умножать? И что станет с нечетными гармониками? 3 hours ago, Tarbal said: У вас результат комплексный? Может быть амплитуда и фаза. Это одно и то же, но разное представление. Одно из свойств преобразования Фурье -- теорема Парсеваля. Она об энергии. Энергия до преобразования равняется энергии после преобразования. Поищите в инете детали:https://ru.wikipedia.org/wiki/Теорема_Парсеваля Да, формулы такие видел, но слаб в математике, и тем более их применению на ЭВМ Надо в матлаб глянуть 59 minutes ago, AlexandrY said: теорема Парсеваля - это всего лишь о том, что возводить в квадрат можно как до, так и после FFT. Но после FFT в квадрат придется возводить комплексные числа Но если возводить до, то часто придется отдельно делать FFT для напряжений (поскольку это нужней) и для мощностей. Т.е. два FFT Вот и вся дилемма. т.е. может я всё усложняю? т.к. : после функции arm_cfft_radix4_f32 (&S, Input); получаем результат БПФ - массив с комплексными величинами в виде Input[] = {real[0], imag[0], real[1], imag[1], ...}а функция:arm_cmplx_mag_f32(Input, Output, FFT_SIZE) - Computes the magnitude of the elements of a complex data vector. -- дает амплитуды? а если применить:arm_cmplx_mag_squared_f32 - Computes the magnitude squared of the elements of a complex data vector. -- а это то что мне нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 11 minutes ago, nvn said: arm_cmplx_mag_squared_f32 - Computes the magnitude squared of the elements of a complex data vector. -- а это то что мне нужно? Точняк! Но помнить, что это все для линейной пассивной нагрузки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба Почему не используем Real FFT functions? https://www.keil.com/pack/doc/CMSIS/DSP/html/group__RealFFT.html Ну и для получения красивых картинок полезно накладывать окно, усреднять много спектров, выводить в логарифмическом масштабе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 2 minutes ago, scifi said: Почему не используем Real FFT functions? https://www.keil.com/pack/doc/CMSIS/DSP/html/group__RealFFT.html Ну и для получения красивых картинок полезно накладывать окно, усреднять много спектров, выводить в логарифмическом масштабе. А лучше сразу в Simulink-е бросить блок из вкладки Power Spectrum Estimator и сгенерировать исходники под ARM Cortex-M И Matlab сам там выберет самые подходящие функции из библиотеки CMSIS DSP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 40 minutes ago, AlexandrY said: А лучше сразу в Simulink-е бросить блок из вкладки Power Spectrum Estimator и сгенерировать исходники под ARM Cortex-M И Matlab сам там выберет самые подходящие функции из библиотеки CMSIS DSP Как двое из ларца. Может, этот симулинк может пропустить все эти промежуточные шаги и сразу выдать зарплату? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 25 сентября, 2019 Опубликовано 25 сентября, 2019 · Жалоба 5 hours ago, nvn said: Да, формулы такие видел, но слаб в математике, и тем более их применению на ЭВМ Надо в матлаб глянуть Ну так, https://www.mathworks.com/help/signal/ug/power-spectral-density-estimates-using-fft.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться