Audio Perfection Forum
FFT и прочее - как правильно? - Версия для печати

+- Audio Perfection Forum (https://www.audio-perfection.com/forum)
+-- Форум Моделирование. SPICE. LTSPICE (https://www.audio-perfection.com/forum/forumdisplay.php?fid=5)
+--- Форум Обработка сигналов, моделирование и расчёты (https://www.audio-perfection.com/forum/forumdisplay.php?fid=34)
+--- Темы: FFT и прочее - как правильно? (/showthread.php?tid=673)

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18


FFT и прочее - как правильно? - s3t - 05-18-2019

В процессе деланья ФФТ-аналайзера возникают вопросы)

На данный момент:

Захватываю окно N из звуковушки, из него делаю ффт:
- на входе ряд N комплексных чисел с real=n, imag=0;
- на выходе ряд N, состоящий из n[0] = DC, n[N/2] = Fs; n[N]=0Hz, т.е. зеркальный спектрум с центром N/2, положительные частоты в начале, отрицательные в конце. Беру только положительные, т.к. imag=0 на входных данных = данные одинаковы с обоих сторон.

Ура, работает.

Теперь рисовать.
На экране 1000 точек и он логарифмичен, в ффт - N/2., и линейный. В случае, когда на точку экрана приходится несколько бинов, с этим нужно что-то делать :)
Обычно(?) рисуют либо все бины на пиксель, получается вертикальная линия от bin_min до bin_max; Получается толстый шершавый график.
Либо рисуют только максимальный бин на пиксель. График = линия толщиной в пиксель.

Но это все как-бы не правильно))) Правильно - как-то их аггрегировать.
Например суммировать их квадраты, pixel = sqrt(n1^2+n2^2+n3^2). что правильно с т.з. отображаемой мощности.
или RMS, pixel = sqrt((n1^2+n2^2+n3^2) / 3)
можно ваще pow(n1*n2*n3,-3) геометрического среднего))

аналогичная ситуация и с просчетом искажений. например имеем несущую на частоте 1к с максимумом -60дБ.
но она не совсем стабильна по частоте, поэтому имеет размазанный вид (попадает сразу на несколько бинов, горбиком) = ее пик -60дБ не настоящий, и нужно аггрегировать соседние бины для того, чтобы получить настоящий уровень пика.



----------
Коммерческая страничка проги - https://xdxd.io/spectrum-analyzer/


RE: FFT и прочее - как правильно? - Nick - 05-18-2019

Для THD надо flat top окна использовать и отображать максимумы. Может просто имеет смысл сделать разные опции для отображения?


RE: FFT и прочее - как правильно? - mellowman - 05-18-2019

Вот так: http://bl.ocks.org/rkirsling/33a9e350516da54a5d4f без чёрного и бледного


RE: FFT и прочее - как правильно? - begemot - 05-18-2019

s3t Написал:но она не совсем стабильна по частоте
Для искажений-в ФФТ софте для АЦП который даёт ТИ можно указать сколько бинов считать за 1 при анализе искажений.
Nick Написал:flat top окна использовать
Это не всегда работает лучшим образом. Флат-топ окна имеют не лучшую избирательность. А она иногда нужна.
Окон надо штук 5-6 разных.
Кстати, при измерении шума надо делать разные поправки в зависимости от окна.
https://www.ap.com/technical-library/fft-scaling-for-noise/
Кроме того, полезная фича - синхронное препроцессинг накопление. Хотя она нужна в первую очередь если нет возможности увеличить длинну.
Хотя и в других случаях может быть полезно. Но надо следить за качеством синхронизации. АП-шник, например, не даёт воспользоваться
этой опцией если считает что качество синхронизации недостаточно.
Можешь поставить себе их софт для 2722, он работает в демо моде без железа, и посмотреть какие там опции в ФФТ анализаторе.
Там много чего сделано разумного и адекватного.
Но вообще, чтоб адекватно померить, надо понимать что ты делаешь, зачем и как. Т.е. нажал кнопочку и показало как надо-не получится.
Т.е. абизяне это не поможет, как бы ты хорошо не сделал.


RE: FFT и прочее - как правильно? - nazar - 05-18-2019

Правильно иметь возможность выбора позитив пик, негатив пик, позитив+негатив, и еще б хорошо позитив+негатив+ оверлей "усредненного" значения(просто пройтись медиан фильтром, длину фильтра иметь возможность задавать, естественно добивать массив спереди и сзади на длину фильтра а потом транкейтить лишнее). Также иметь автоматическую поправку на вклад окна


RE: FFT и прочее - как правильно? - Nick - 05-18-2019

begemot Написал:Это не всегда работает лучшим образом. Флат-топ окна имеют не лучшую избирательность. А она иногда нужна.
Для THD не нужно хорошей изберательности, для THD более важна правильная амплитуда, так что flat top хорошо подходит.
Для остальных измерений конечно нужны разные окна и разные отображения. Поэтому и написал про то чтобы это все сделать настраиваимо.


RE: FFT и прочее - как правильно? - Black_Jack - 05-18-2019

А если замахнуться на когерент сэмплинг?
Надо, конечно иметь общий опорный ген. собсно для ЦАП и АЦП.
Тогда можно будет без окон обойтись вообще. Для THD как минимум, кмк. Нет?


RE: FFT и прочее - как правильно? - nazar - 05-18-2019

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


RE: FFT и прочее - как правильно? - s3t - 05-18-2019

Ой йопт)
Вы когда пишете, давайте заодно ссылки)))

Длинный ффт - насколько длинный? 8М сэмплов считаются гдето за 2-4 сек, т.е. реального времени не будет. Но это уже щупает 3-6 гиг памяти.
Плюс подумалось что стоит отображать буфер с возможностью по нем полазить и пропустить через ффт - бывает что за несколько секунд накопления что-то дергается и все, приехали. И заодно поиск этих случайностей, иногда девайс работает но раз в минуту пердит - такое по обычному не вылавливается)


RE: FFT и прочее - как правильно? - IVX - 05-18-2019

типов окна надо много, как обычно, флэ-топ даст небольшое уточнение в THD, если частоты гармоник известны, их можно мерить конволюшном https://en.wikipedia.org/wiki/Convolution что во сто раз быстрее чем ффт и точно. Мы так мерили АЧХ саба для румкорекшн(iWoofer), довольно точно и очень быстро, но, как оказалось в реальном холле квадратов 50, это неприменимо по естественным причинам - акустические отражения от всего прилетают с большим дилеем и, в зависимости от демпфирования зала, могут очень изменить результат. В итоге всё равно пришлось усреднять измерения чуть не на 1с на 1 частоту "свипа". Это кстати хорошая иллюстрация "эффективности" хваленого "дирака", который делает коррекцию комнаты во всей аудио-полосе 1-2с свипом ))


RE: FFT и прочее - как правильно? - Altor Audio - 05-18-2019

s3t Написал:Длинный ффт - насколько длинный? 8М сэмплов считаются гдето за 2-4 сек, т.е. реального времени не будет.

Можно сделать почти как в Спектраплюсе - отдельно реалтайм, отдельно пост-процессинг, и в первом ограничивать длины и прочее на уровне работы реалтайма с кокнретным форматом (семплрейт/разрядность) на конкретном компе.


RE: FFT и прочее - как правильно? - Black_Jack - 05-19-2019

s3t Написал:Ой йопт)
Вы когда пишете, давайте заодно ссылки)))

Популярно о "coherent sampling"
https://www.youtube.com/watch?v=LOJbztS-wFY

https://www.maximintegrated.com/en/app-notes/index.mvp/id/1040

Вот тут по окнам как справочник с кратким описанием.
Например,
"The 7-term Blackman-Harris window has the highest dynamic range of the available windowing types and is ideal for signal-to-noise ratio applications."

http://zone.ni.com/reference/en-XX/help/370371K-01/lvsmt/smt_calculate_correction/


RE: FFT и прочее - как правильно? - begemot - 05-19-2019

Black_Jack Написал:Blackman-Harris window has the highest dynamic range of the available windowing
Это только из тех окон которые они приводят.
Полезно иметь ещё и Кайзера, которым можно аппроксимировать окна с разными свойствами, от "быстрых" с большой утечкой до "медленных" с избирательностью сравнимой или лучшей чем у Блэкман-Харриса.
Просто меняя параметр "альфа".
https://en.wikipedia.org/wiki/Kaiser_window
s3t Написал:т.е. реального времени не будет
Altor Audio Написал:почти как в Спектраплюсе - отдельно реалтайм, отдельно пост-процессинг
О каком реальном времени идёт речь?
Его нет ни в каком Спектраплюсе.
ФФТ по определению усредняющее измерение. На длине окна. Я надеюсь никто не собирается делать ФФТ для каждого последовательного сэмпла?
Это же не цифровой фильтр реального времени.
.................................................................................
Взял сэмплы на окно что сейчас есть, посчитал, выплюнул на дисплей.
.................................................................................
Взял сэмплы на окно что сейчас есть, посчитал, выплюнул на дисплей.
.................................................................................

Если говорить о втором режиме, т.е, о постпроцессинге-то можно делать примерно как в Аудишине.
Выделяется область в записи, точнее начало и длина ФФТ. И отображается спектр этого участка.
Если это конечно надо. Для начала я этим бы не заморачивался.

А вот отображение спектра слегка плавающего сигнала-это конечно та ещё задача.
Т.е. используешь большую длинну чтоб убрать шумы. Получаешь узкий бин, даже для основной частоы. И она плавно гуляет межу бинами.
Для гармоник ещё хуже.
Т.е. надо использовать несколько соседних бинов для анализа амплитуды, а шум между гармониками-одиночный бин.
ТИ использует несколько бинов, количество которых можно менять. Отдельно для основной, отдельно для гармоник
http://www.audio-perfection.com/forum/attachment.php?aid=3
Есть ещё один способ. Синхронное накопление.
Используется не очень длинное ФФТ. Т.е.бин не очень узкий. Но сигнал синхронно накапливается и усредняется перед ФФТ.
Тогда, если конечно удастся хорошо синхронизироваться, некореллированыые с сигналом шумы подавятся, а сигнал и гармошки-останутся.
А поскольку бин "широкий", амплитуды отображаются правильно. Ну конечно надо решить что отображается когда попадает посерёдке.
Но надо адекватно синхронизировать, что может быть проблемой при наличии большого шумочка.
Хотя достоинство-значительно более короткое время окна, т.е. сигнал воде как не успевает сильно уплыть. А уплывание будет усредняться
до ФФТ.
В общем, каждый способ будет давать слегка разные результаты.
Чаще всего, когда софт позволяет некоторую гибкость в применении разных методов, например как в АП2722, и когда измеряешь что-то
на пределе разрешения, тупо смотришь на результат и думаешь-а что за хрень он показывает, почему он же измеряет другим методом по другому, и можно ли этому верить.


RE: FFT и прочее - как правильно? - s3t - 05-19-2019

я не сбежал, я оптимайзил ФФТ и рисовалку)

на рисунке изображены
- синус 1к + белый джиттер :)
- белый шум
- гармошки 2-6 одинакового уровня и фазы, примененные к сумме вышеобозначенных

сделал какое-то подобие VBW - всеравно-ж собираю на каждый пиксель по "сколько получится" бинов - так можно собирать на каждые 5, 10, 100 пикселей - т.е. уменьшать горизонтальное разрешение, чтоб не мешало восприятию.

желтый = SQRT( N[0]^2 + N[1]^2 + N[2]^2 + ... + N[n] )
зеленый яркий = максимум на ячейку
вертикальные тускло-зеленые линии = от макс до минимума
голубенький = RMS = SQRT( ( N[0]^2 + N[1]^2 + N[2]^2 + ... + N[n] ) / n )
   

ы, ффт 16М делается за 1.3с! до чего прогресс дошел )


RE: FFT и прочее - как правильно? - nazar - 05-19-2019

о тмакс до минимума надо соединять векторами между ними https://youtu.be/OT8pfr4a2K8?t=27, с усреднением еще поработать(тоесть читай соответствующий хп джоурнал). https://youtu.be/OT8pfr4a2K8?t=138


RE: FFT и прочее - как правильно? - nazar - 05-19-2019

https://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1978-06.pdf
13стр итд, также там можно найти фото зигфрида линквица)


RE: FFT и прочее - как правильно? - s3t - 05-19-2019

Почти допилил аверейджинг по времени (полноценный). Шустренький)
Интересно, нужно буит опробовать перформанс на чем-то быстрей звуковушки)


RE: FFT и прочее - как правильно? - begemot - 05-19-2019

s3t Написал:полноценный
Это как?


RE: FFT и прочее - как правильно? - s3t - 05-20-2019

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

но при этом нет возможности просчитать минимум-максимум (их невозможно вычесть, т.к. операция не линейна). Поэтому мин-макс обзывают пик-холдом и "problem solved". То, что этот пик-холд показывает что-то совсем ниочем (например если пик образовался 10 сек назад, 1 сек назад был пик с уровнем чуточку ниже, окно пик-детектора 10сек = получим сброс пика до 0 и пофик на пик который был 1с назад).
поэтому я с каждым поступлением новой ФФТшки просчитываю аверейдж заново, т.е. пройтись по всем ФФТшкам, суммировать все накопления, найти все максимумы максимумов)

я тут пытаюсь эмулировать старый добрый аналоговый ХП с примесями цифрового, и вдруг...
https://youtu.be/0XHkfiU53gI


RE: FFT и прочее - как правильно? - s3t - 05-20-2019

нельзя меня на ютюб пускать Rofl