Jump to content

    

CMSIS FFT, как получить энергетический спектр?

Может я чего путаю... В моём представлении энергетический спектр не зависит от амплитуды сигнала и от фазы - это показатель приближения синуса к меандру на выбранной частоте. То-есть количество и точность совпадения чётных гармоник к выбранной частоте. Частоты гармоник могут (обязаны) складываться в общем FFT спектре. По этой причине посчитать энергию за один проход невозможно. Получается уравнение с бешеным количеством переменных. Проще всего выполнить приближение, когда коэффициенты будут плавно расти.

Выбираем частоту, находим все её гармоники, сортируем их по минимальному значению от рассчитанной амплитуды, используем это значение как эталон для пересчёта всех гармоник по амплитуде, и вычитания их значения из основного FFT сектора - с дополнительным коэффициентом приближения примерно 1/10 . Если в процессе вычитания будут получаться отрицательные числа - то весь цикл сбрасывается, и по новой с меньшим коэффициентом приближения. В результате FFT сектор будет иметь минимальные значения на уровне ошибок, энергетический спектр будет содержать коэффициенты наличия гармоник для каждой частоты в отдельности.   

В результате получается индикация грязного сигнала - буквально. Использовать на музыкальном аналоге совершенно бесполезно - там уже давно ггг... В связи с чем вопрос - где внезапно понадобился подобный инструмент?

Share this post


Link to post
Share on other sites
39 minutes ago, AVI-crak said:

Может я чего путаю... В моём представлении энергетический спектр не зависит от амплитуды сигнала и от фазы -

Это какой-то свежий взгляд. Я думал, что энергетический спектр - это распределение энергии сигнала по частотным составляющим. Чем выше амплитуда сигнала, тем больше энергия. Я так думаю.

Share this post


Link to post
Share on other sites
1 hour ago, Aleksandr Baranov said:

Чем выше амплитуда сигнала, тем больше энергия.

Ну это как считать, вдоль или поперёк. Если использовать несколько FFT отчётов: то получится динамика (уровень колебаний амплитуды), и средняя относительная энергия не превышающая единицы для каждого отчёта. В звуке энергия не зависит от средств измерения, хотя есть зависимость от рабочего диапазона. Любое колебание можно усилить/ослабить и получить желаемую мощность на выходе.

Это как батарейка, без нагрузки мощность в цепи нулевая.

Share this post


Link to post
Share on other sites
On 9/25/2019 at 2:48 AM, nvn said:

Да, формулы такие видел, но слаб в математике, и тем более их применению на ЭВМ :blush:
Надо в матлаб глянуть

 

Надо каждое значение возвести в квадрат по формуле Муавра:

https://ru.wikipedia.org/wiki/Формула_Муавра

В каком виде у вас выход? Амплитуда и фаза или комплексные числа?
Если амплитуда и фаза, то прямо их и подставляете, а если комплексные, то я вам расскажу как из них получить амплитуду и фазу.

Обработайте формулой Муавра каждый отсчет из вашего результата.

Share this post


Link to post
Share on other sites

Не обязательно чем выше амплитуда тем больше мощность. Если нагрузка ESR то чем выше частота, меньше мощность.

Share this post


Link to post
Share on other sites
On 9/25/2019 at 2:13 PM, scifi said:

Почему не используем Real FFT functions?

https://www.keil.com/pack/doc/CMSIS/DSP/html/group__RealFFT.html

Ну и для получения красивых картинок полезно накладывать окно, усреднять много спектров, выводить в логарифмическом масштабе.

насколько я понял это лишь ускорит вычисления?
мне сейчас важнее разобраться что я получил, и как из этого получить энергетический спектр.

 

On 9/27/2019 at 7:18 AM, Tarbal said:

Надо каждое значение возвести в квадрат по формуле Муавра:

https://ru.wikipedia.org/wiki/Формула_Муавра

В каком виде у вас выход? Амплитуда и фаза или комплексные числа?
Если амплитуда и фаза, то прямо их и подставляете, а если комплексные, то я вам расскажу как из них получить амплитуду и фазу.

Обработайте формулой Муавра каждый отсчет из вашего результата.

на выходе комплексные числа:
data is complex and contains 2*fftLen interleaved values as shown below.
{real[0], imag[0], real[1], imag[1], ...}

Share this post


Link to post
Share on other sites
3 hours ago, nvn said:

на выходе комплексные числа:
data is complex and contains 2*fftLen interleaved values as shown below.
{real[0], imag[0], real[1], imag[1], ...}

корень из суммы квадратов real[0], imag[0] даст r  в формуле Муавра. Арктангенс отношения imag[0]/real[0] даст фи для отсчета 0(ноль в квадратных скобках -- это индекс вашего массива). n = 2: ведь надо возвести в квадрат. Посчитайте для всех точек и будет у вас энергия. Правда с точностью до множителя. Для того, чтобы знать точное значение энергии, надо больше информации. Если на входе в ваше преобразование было напряжение, то поделите результат на сопротивление нагрузки.

{\displaystyle z^{n}=r^{n}(\cos \varphi +i\sin \varphi )^{n}=r^{n}(\cos n\varphi +i\sin n\varphi )}

Share this post


Link to post
Share on other sites
On 9/25/2019 at 10:28 AM, Aleksandr Baranov said:

Чем выше амплитуда сигнала, тем больше энергия. Я так думаю.

Даже и не сомневайтесь

Share this post


Link to post
Share on other sites

Вот в качестве подсказки прислали выдержки, без указания источника, видимо там дальше есть решение :)

Spoiler

1.thumb.jpg.fb20459c1fca7fef7aa6a0032236798c.jpg2.thumb.jpg.598908d48100a704c9548fdab4ae02df.jpg3.thumb.jpg.3e4e258aaec6aa4a81ec97ff7ab3df4a.jpg4.thumb.jpg.6f30f6c1b0e6aeeba3409d7282703941.jpg5.thumb.jpg.3e5c34b95ab619320cb34c477711f580.jpg6.thumb.jpg.67071ffbdcb2ca1a0f956f0b0ec5715d.jpg

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now