Pull to refresh

Comments 52

Преобразование Фурье конечной выборки эквивалентно оконному преобразованию с прямоугольным окном. То есть мы взяли бесконечную синусоиду и умножили ее на прямоугольную функцию. Преобразование Фурье произведения равно свертке преобразований каждой. Преобразование бесконечной синусоиды «хорошее», а вот прямоугольной функции не очень, оно равно sinc = sin(x)/x. На графике именно она дает такой вклад.
А если на пальцах — это из-за не кратных периодов анализируемой функции и гармоник преобразования Фурье. «Шерсть» у автора, видимо, тоже оттуда же, где-то лучше совпадение, где-то не очень.
хмм, свертка sinc с преобразованием синуса (пара дельта-функций) даст пару sinc-ов, в области f > 0 — один смещенный sinc
для 100 Гц и 2 с, если не напутал
www.wolframalpha.com/input/?i=cos%28628t%29*rect%28t%2F4%29+fourier+transform

Вопрос: как audacity получает свой ровненький спектр?
Мне кажется, что audacity просто закрашивает по локальным максимумам sinc
Судя по данным, которые экспортируются, там действительно ровненькая функция с одним максимумом
Вероятно, там для получения спектра используется не просто преобразование Фурье от всего файла, а что-нибудь типа периодограммы. Грубо говоря, сигнал бьется на куски, от каждого из них вычисляется квадрат модуля от БПФ, полученные результаты усредняются. При таком подходе реально видно, что спектр шума стремится к сплошному, а не гуляет туда-сюда.
48 dB = 2^16

То есть это шум дискретизации 16-битного формата, используемого автором.
UFO just landed and posted this here
Поддерживаю! Тоже сразу об этом подумал.
Я правильно понял, если сложить синусы 25, 75, 125 и так далее до частоты дискретизации, при этом амплитуда обратно пропорциональна частоте, то мы получим на выходе меандр?
Почти. Для идеального меандра потребуется бесконечность синусоид. А чтобы получить дискретизированный меандр, нужно складывать синусоиды заметно превышающих частоту дискретизации, хотя бы раз в 8. Впрочем, если точно известно, что исходный непрерывный сигнал прямоугольный, то можно восстановить его и по гармоникам с меньшей частотой.
UFO just landed and posted this here
Да, вы правы конечно же.
Спасибо за статью!
Дошел до
Меандр курильщика

и сразу проскролил ставить плюс :-))

Вы хорошо пишите, с юмором и просто. Приятно читать!

И все-же проскакивают фразочки, которые внезапно заставляют вернуться из мира пушистых математических котиков в суровый реальный мир и напрячь корку, как то:
Величина, выраженная в децибелах, численно равна десятичному логарифму безразмерного отношения физической величины к одноимённой физической величине, принимаемой за исходную, умноженному на десять
Так последнее — это цитата из википедии :)
Ну, я так и подумал, что вы кого-то процитировали :-)
Забавно:

И все-же проскакивают фразочки, которые внезапно заставляют вернуться из мира пушистых математических котиков в суровый реальный мир и напрячь корку...


И у вас в профиле:

Защитил диссертацию в аспирантуре на мат-мехе.


Нестыковочка'с :)
Почему же нестыковочка? :-)
Конечно, во время учебы привыкаешь читать сухой, формальный научный язык. Но это не значит, что его читать легче, чем что-то научно-популярное. Так корка расслаблена, и вдруг встречаешь что-то, от чего она начинает напрягаться, прямо посреди милых котиков и сисек :-)
dB = 10 lg(«Разы») — это для квадрата амплитуды (мощности).
То есть надо исправить на 20*log10(A / A0). Тот же 16-битовый АЦП даёт, как известно, 96 дБ, а это 20*16*log10(2). В той же Википедии ниже идёт объяснение разницы между 10 и 20. В итоге нам без разницы: по мощности ли, по напряжению — децибел он и есть децибел. Видимо децибелы были придуманы для мощностей, а для амплитуд — это уже следствие.
Большое спасибо за статью! Буду с радостью ожидать продолжение!

Могу порекомендовать для тех, кто больше заинтересовался компьютерной музыкой и её оцифровкой книгу Curtis Roads — The Computer Music Tutorial.
В интернете есть в не очень хорошем качестве, но читать можно и нужно.
Пусть слово «Tutorial» не вводит в заблуждение — это талмуд размером в 1200 страниц, в котором очень подробно объясняются все алгоритмы генерации, параметры звука, а в конце есть дополнения, в которых подробно рассматривается математическя сторона преобразований Фурье и прочих особенностях цифрового звука.
Большое спасибо за статью! Буду с радостью ожидать продолжение!


Спасибо за спасибо :)

А вот продолжения не предвидится. Я надеюсь, что люди сами по теме накопают. Может разве что перевести статью по обработке изображений.
Сергиенко, кстати, вполне понятно пишет по обработке сигналов.
P.S. В данном случае спектрограммы красивее смотрелись бы в линейном масштабе по оси Y. А то в логарифмическом вылезает всякая дрянь.
Ну я надеюсь люди внимательны и сами могут отсечь лишнее :)
Так это как раз хорошо. Слабые сигналы видны на фоне сильных. И где дрянь — тоже видно. А спектрограммы часто нужны именно для того, чтобы увидеть, где и сколько дряни имеется.
Пост годный, но надо в него добавить как можно больше примеров восхитительной фильтрации!
Фильтрация изображений, коммуникационных сигналов, сигналов радаров и т.п. -)
В духе до и после. Так слепой, а так всевидящий!
По фильтрации можно написать отдельный пост. Однако я не владею должным образом темой :(
Ну тогда больше развеселых методов частотного анализа, а не только Фурье -)
Или же по фурье ТОП5 наикрутейших алгоритмов.
Ну так, зачем дело. Напишите :). Я вообще электронщик, вы же приводили видео со мной ;)
ООО! А еще же тема аппаратного ускорения частотных преобразований и фильтрации — вообще не копана!
Тут гораздо интереснее «приземлить» математику на реальную жизнь.
Например:
говорят, что «тёплый ламповый звук» обусловлен тем, что ламповые усилители вносят искажения в чётных гармониках, в отличие от полупроводниковых, которые гадят на нечётных.
Что это значит для художников?
Да вот то, что ламповый усилитель «сглаживает» и «скругляет» форму сигнала. А полупроводниковый наоборот, делает её более «угловатой», похожей на меандр.
А что то же самое значит для музыкантов?
То, что ламповый усилитель к чистому звуку добавит октавы (каждая целая октава = удвоение частоты).
А полупроводниковый туда добавит квинты (каждая квинта = полторы частоты).

Ещё интересно: на очень высоких нотах сложно различить тембры различных инструментов.
А это на самом деле прямое следствие теоремы Котельникова. Тембр — это смесь разных гармоник (у подавляющего большинства инструментов наиболее выражен основной тон, т.е. первая гармоника).
Если взять на любом инструменте, скажем, «ля» шестой октавы — это частота 14080 герц в первой гармонике. А если возможность человеческого слуха ограничена, скажем 30кГц — это значит, что фактически для звуков с частотой от 15кГц до 30кГц он услышит только первую гармонику. А все остальные, которые как раз и передают тембр, окажутся отрезанными естественным фильтром ВЧ.
Прекрасно! Мне кажется, что это тянет на отдельный пост. Я даже для вас готов отфотографировать старые книжки по ламповой технике, которые показывают как они искажают звук.
Почему-то который раз не раскрывается зачем вообще это все в простым смертным программистам. А смысл довольно прост (простите дилетанта если что):

Очень много нужных и полезных преобразований сводится к свертке. Свертка — это когда есть input[1024], есть filter[100], output считаем как-то так:

for(int x = 0; x < 1024; x++) {
  sum = 0;
  for(int n = 0; n < 100; n++) {
    sum += input[x] * filter[x + n]
  }
  output[x] = sum
}


Примеры таких преобразований — фильтры blur и sharpen для картинок, всякие эквалайзеры и реверберация для звука, и еще много чего.

В тупую (как выше), свертка требует O(sizeof(input) * sizeof(filter)) операций. Грубо говоря для blur-а 3x3 пикселя еще терпимо, а при 100x100 будет уже печально.

Чтобы стало побыстрее, используют немного матана:

Во-первых свертка преобразованного в фурье фильтра с преобразованным в фурье сигналом — это перемножение каждого с каждым элементов входного массива и фильтра. Это как ручки на эквалайзере примерно — умножаем ручку для определенный частоты, на частоту входа. Т.е. если есть input и filter в фурье-пространстве, мы можем делать свертку за O(N).

Во-вторых был придуман алгоритм быстрого преобразования фурье, который действует за N*Log(N) от размера входного сигнала. Обратное преобразование вообще делается за O(N)

Короче это все применяется чтобы из O(N*M), получить O(N*log(N)). Скажем blur-у после такого становится все равно какого он радиуса — будет считаться с одинаковой скоростью.

Но не все так гладко: фурье-преобразование математически правильно делать только на бесконечном периодическом сигнале. Поэтому сверху надо еще немного матана в виде оконных функций — это уберет всякий совсем уж мусор, но совсем честно оно работать не станет все равно.
Совсем честно работать не станет, но вроде как можно его делать сколь угодно точным, чтобы ошибок не было даже во младших битах получаемых данных.
Я даже боюсь представить, где используется комплексное преобразование Фурье


Странно видеть такую фразу в статье, где в первом предложении фигурирует аббревиатура «ЦОС». Вот в этой самой ЦОС и используется, направо и налево, причем как прямое, так и обратное.
Имелось в виду комплексные входные данные, но потом вспомнил что при обработке изображений
Вообще говоря, в общем случае нельзя напрямую брать БПФ случайного сигнала. Согласно теореме Хинчина-Колмогорова для оценки спектральной плотности мощности случайного сигнала, надо взять БПФ от автокорреляционной функции.
Или, если избегать наукообразности, просто усреднить пару десятков спектров мощности, посчитанных для кусков сигнала, взятых со сдвигом, равным половине длины куска — если уж ссылаетесь на теорему, которая как раз об этом.
При измерении напряжений и токов для децибелов берут множитель 20, а АЦП и ЦАПы я так понимаю регистрируют напряжение, а не мощность, тут точно должно быть 10?
Честно признаюсь, что не знаю однозначного ответа на данный вопрос.
Самое лучшее в статье — это анимация.
Как мне кажется, каждый для себя сможет найти что-то полезное. Кто-то картинки, кто-то создание звукового файла, а кто-то даже алгоритм преобразования Фурье.
Не в обиду — статья действительно хорошая, но иллюстрации в таких статьях обычно не очень. В большинстве статей о ЦОС или прикладных статьях яркие и нестандартные иллюстрации найти сложно. Мне часто не хватает ярких и понятных иллюстраций для объяснения таких вещей — потому и отмечаю именно это )))
Ну ради них все и затевалось
Спасибо за статью, мне тоже нравится эта тема. За примерами применения далеко ходить не надо, это ближе чем кажется. Даже балансировка колёс без этого не обходится ))

Когда-то проходил курс www.coursera.org/course/dsp
Он скоро опять начнётся, в конце апреля.

Мне понравилось то, как они подходят к сути Преобразования Фурье. Не так как сам Фурье, а через линейную алгебру. Мне это здорово сэкономило усилия, т.к. с тригонометрией дружу плохо и вообще не математик.

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

Что такое спектр? Это амплитудно-частотная характеристика.

Ну вообще-то АЧХ характеризует устройство, а не сигнал и говорит о том, как устройство передает через себя сигнал, в зависимости от частоты этого сигнала. То есть, если на вход подать синусоиду амплитудой 1 вольт и частотой 1 Гц, то на выходе устройства будет к примеру 0.1 вольта. А если частота вх. сигнала будет 1000 Гц, то на выходе будет например 10 вольт.

Можно ли вычислять спектр в потоковом режиме?

Не могу вам этого запретить :).

Но вообще, как я понимаю просто окнами берётся и узнаётся спектр. БПФ ограничен размером окна. Конечно, там погрешности могут быть. Как же работает эквалайзеры цифровые.

Sign up to leave a comment.

Articles