FFT и прочее - как правильно?
#1

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

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

Захватываю окно 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/

Аминь.
Ответ
#2

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

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

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

Nobody Is Perfect
Ответ
#5

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

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#6

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

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

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

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#9

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

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

Аминь.
Ответ
#10

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

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

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

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

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

https://www.maximintegrated.com/en/app-n...vp/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/...orrection/
The following 1 user says Thank You to Black_Jack for this post:
  • s3t (05-19-2019)
Ответ
#13

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/at....php?aid=3
Есть ещё один способ. Синхронное накопление.
Используется не очень длинное ФФТ. Т.е.бин не очень узкий. Но сигнал синхронно накапливается и усредняется перед ФФТ.
Тогда, если конечно удастся хорошо синхронизироваться, некореллированыые с сигналом шумы подавятся, а сигнал и гармошки-останутся.
А поскольку бин "широкий", амплитуды отображаются правильно. Ну конечно надо решить что отображается когда попадает посерёдке.
Но надо адекватно синхронизировать, что может быть проблемой при наличии большого шумочка.
Хотя достоинство-значительно более короткое время окна, т.е. сигнал воде как не успевает сильно уплыть. А уплывание будет усредняться
до ФФТ.
В общем, каждый способ будет давать слегка разные результаты.
Чаще всего, когда софт позволяет некоторую гибкость в применении разных методов, например как в АП2722, и когда измеряешь что-то
на пределе разрешения, тупо смотришь на результат и думаешь-а что за хрень он показывает, почему он же измеряет другим методом по другому, и можно ли этому верить.

Nobody Is Perfect
Ответ
#14

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

на рисунке изображены
- синус 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с! до чего прогресс дошел )

Аминь.
Ответ
#15

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

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#16

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

"The universal aptitude for ineptitude makes any human accomplishment an incredible miracle." John Stapp
Ответ
#17

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

Аминь.
Ответ
#18

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

Nobody Is Perfect
Ответ
#19

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

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

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

Аминь.
Ответ
#20

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

   

Аминь.
The following 3 users say Thank You to s3t for this post:
  • nazar (05-20-2019), Black_Jack (05-21-2019), Nick (05-23-2019)
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)