Пользователь
24,0
рейтинг
4 октября 2013 в 22:02

Разработка → Простыми словами о преобразовании Фурье из песочницы

Я полагаю что все в общих чертах знают о существовании такого замечательного математического инструмента как преобразование Фурье. Однако в ВУЗах его почему-то преподают настолько плохо, что понимают как это преобразование работает и как им правильно следует пользоваться сравнительно немного людей. Между тем математика данного преобразования на удивление красива, проста и изящна. Я предлагаю всем желающим узнать немного больше о преобразовании Фурье и близкой ему теме того как аналоговые сигналы удается эффективно превращать для вычислительной обработки в цифровые.

image (с) xkcd

Без использования сложных формул и матлаба я постараюсь ответить на следующие вопросы:
  • FT, DTF, DTFT — в чем отличия и как совершенно разные казалось бы формулы дают столь концептуально похожие результаты?
  • Как правильно интерпретировать результаты быстрого преобразования Фурье (FFT)
  • Что делать если дан сигнал из 179 сэмплов а БПФ требует на вход последовательность по длине равную степени двойки
  • Почему при попытке получить с помощью Фурье спектр синусоиды вместо ожидаемой одиночной “палки” на графике вылезает странная загогулина и что с этим можно сделать
  • Зачем перед АЦП и после ЦАП ставят аналоговые фильтры
  • Можно ли оцифровать АЦП сигнал с частотой выше половины частоты дискретизации (школьный ответ неверен, правильный ответ — можно)
  • Как по цифровой последовательности восстанавливают исходный сигнал


Я буду исходить из предположения что читатель понимает что такое интеграл, комплексное число (а так же его модуль и аргумент), свертка функций, плюс хотя бы “на пальцах” представляет себе что такое дельта-функция Дирака. Не знаете — не беда, прочитайте вышеприведенные ссылки. Под “произведением функций” в данном тексте я везде буду понимать “поточечное умножение”

Начать надо, наверное, с того что обычное преобразование Фурье — это некая такая штука которая, как можно догадаться из названия, преобразует одни функции в другие, то есть ставит в соответствие каждой функции действительного переменного x(t) её спектр или фурье-образ y(w):



Если приводить аналогии, то примером аналогичного по смыслу преобразования может послужить например дифференцирование, превращающее функцию в её производную. То есть преобразование Фурье — такая же, по сути, операция как и взятие производной, и её часто обозначают схожим образом, рисуя треугольную “шапочку” над функцией. Только в отличие от дифференцирования которое можно определить и для действительных чисел, преобразование Фурье всегда “работает” с более общими комплексными числами. Из-за этого постоянно возникают проблемы с отображением результатов этого преобразования, поскольку комплексные числа определяются не одной, а двумя координатами на оперирующем действительными числами графике. Удобнее всего, как правило, оказывается представить комплексные числа в виде модуля и аргумента и нарисовать их по раздельности как два отдельных графика:



График аргумента комплексного значения часто называют в данном случае “фазовым спектром”, а график модуля — “амплитудным спектром”. Амплитудный спектр как правило представляет намного больший интерес, а потому “фазовую” часть спектра нередко пропускают. В этой статье мы тоже сосредоточимся на “амплитудных” вещах, но забывать про существование пропущенной фазовой части графика не следует. Кроме того, вместо обычного модуля комплексного значения часто рисуют его десятичный логарифм умноженный на 10. В результате получается логарифмический график, значения на котором отображаются в децибелах (дБ).



Обратите внимание что не очень сильно отрицательным числам логарифмического графика (-20 дБ и менее) при этом соответствуют практически нулевые числа на графике “обычном”. Поэтому длинные и широкие “хвосты” разнообразных спектров на таких графиках при отображении в “обычные” координаты как правило практически исчезают. Удобство подобного странного на первый взгляд представления возникает из того что фурье-образы различных функций часто необходимо перемножать между собой. При подобном поточечном умножении комплекснозначных фурье-образов их фазовые спектры складываются, а амплитудные — перемножаются. Первое выполняется легко, а второе — сравнительно сложно. Однако логарифмы амплитуды при перемножении амплитуд складываются, поэтому логарифмические графики амплитуды можно, как и графики фаз, просто поточечно складывать. Кроме того, в практических задачах часто удобнее оперировать не «амплитудой» сигнала, а его «мощностью» (квадратом амплитуды). На логарифмической шкале оба графика (и амплитуды и мощности) выглядят идентично и отличаются только коэффициентом — все значения на графике мощности ровно вдвое больше чем на шкале амплитуд. Соответственно для построения графика распределения мощности по частоте (в децибелах) можно не возводить ничего в квадрат, а посчитать десятичный логарифм и умножить его на 20.

Заскучали? Погодите, еще немного, с занудной частью статьи, объясняющей как интерпретировать графики, мы скоро покончим :). Но перед этим следует понять одну крайне важную вещь: хотя все вышеприведенные графики спектров были нарисованы для некоторых ограниченных диапазонов значений (в частности, положительных чисел), все эти графики на самом деле продолжаются в плюс и минус бесконечность. На графиках просто изображается некоторая “наиболее содержательная” часть графика, которая обычно зеркально отражается для отрицательных значений параметра и зачастую периодически повторяется с некоторым шагом, если рассматривать её в более крупном масштабе.

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



Первое из этих свойств — линейность. Если мы берем какую-то линейную комбинацию функций, то преобразование Фурье этой комбинации будет такой же линейной комбинацией образов Фурье этих функций. Это свойство позволяет сводить сложные функции и их фурье-образы к более простым. Например, фурье-образ синусоидальной функции с частотой f и амплитудой a является комбинацией из двух дельта-функций расположенных в точках f и -f и с коэффициентом a/2:



Если взять функцию, состоящую из суммы множества синусоид с разными частотами, то согласно свойству линейности, фурье-образ этой функции будет состоять из соответствующего набора дельта-функций. Это позволяет дать наивную, но наглядную интерпретацию спектра по принципу “если в спектре функции частоте f соответствует амплитуда a, то исходную функцию можно представить как сумму синусоид, одной из которых будет синусоида с частотой f и амплитудой 2a”. Строго говоря, эта интерпретация неверна, поскольку дельта-функция и точка на графике — это совершенно разные вещи, но как мы увидим дальше, для дискретных преобразований Фурье она будет не так уж и далека от истины.

Второе свойство преобразования Фурье — это независимость амплитудного спектра от сдвига сигнала по времени. Если мы подвинем функцию влево или вправо по оси x, то поменяется лишь её фазовый спектр.

Третье свойство — растяжение (сжатие) исходной функции по оси времени (x) пропорционально сжимает (растягивает) её фурье-образ по шкале частот (w). В частности, спектр сигнала конечной длительности всегда бесконечно широк и наоборот, спектр конечной ширины всегда соответствует сигналу неограниченной длительности.

Четвертое и пятое свойства самые, пожалуй, полезные из всех. Они позволяют свести свертку функций к поточечному перемножению их фурье-образов и наоборот — поточечное перемножение функций к свертке их фурье-образов. Чуть дальше я покажу насколько это удобно.

Шестое свойство говорит о симметрии фурье-образов. В частности, из этого свойства следует что в фурье-образе действительнозначной функции (т.е. любого “реального” сигнала) амплитудный спектр всегда является четной функцией, а фазовый спектр (если его привести к диапазону -pi...pi) — нечетной. Именно по этой причине на графиках спектров практически никогда не рисуют отрицательную часть спектра — для действительнозначных сигналов она не дает никакой новой информации (но, повторюсь, и нулевой при этом не является).

Наконец последнее, седьмое свойство, говорит о том, что преобразование Фурье сохраняет “энергию” сигнала. Оно осмысленно только для сигналов конечной продолжительности, энергия которых конечна, и говорит о том, что спектр подобных сигналов на бесконечности быстро приближается к нулю. Именно в силу этого свойства на графиках спектров как правило изображают только “основную” часть сигнала, несущую в себе львиную долю энергии — остальная часть графика просто стремится к нулю (но, опять же, нулем не является).

Вооружившись этими 7 свойствами, давайте посмотрим на математику “оцифровки” сигнала, позволяющую перевести непрерывный сигнал в последовательность цифр. Для этого нам понадобится взять функцию, известную как “гребенка Дирака”:



Гребенка Дирака — это просто периодическая последовательность дельта-функций с единичным коэффициентом, начинающаяся в нуле и идущая с шагом T. Для оцифровки сигналов, T выбирают по возможности малым числом, T<<1. Фурье-образ этой функции — тоже гребенка Дирака, только с гораздо большим шагом 1/T и несколько меньшим коэффициентом (1/T). С математической точки зрения, дискретизация сигнала по времени — это просто поточечное умножение исходного сигнала на гребенку Дирака. Значение 1/T при этом называют частотой дискретизации:



Вместо непрерывной функции после подобного перемножения получается последовательность дельта-импульсов определенной высоты. При этом согласно свойству 5 преобразования Фурье, спектр получившегося дискретного сигнала есть свертка исходного спектра с соответствующей гребенкой Дирака. Несложно понять, что исходя из свойств свертки, спектр исходного сигнала при этом как бы “копируется” бесконечное число раз вдоль оси частот с шагом 1/T, а затем суммируется.



Заметим, что если исходный спектр имел конечную ширину и мы использовали достаточно большую частоту дискретизации, то копии исходного спектра не будут перекрываться, а следовательно и суммироваться друг с другом. Несложно понять что по подобному “свернутому” спектру будет легко восстановить исходный — достаточно будет просто взять компоненту спектра в районе нуля, “обрезав” лишние копии уходящие на бесконечность. Простейший способ это сделать — это домножить спектр на прямоугольную функцию, равную T в диапазоне -1/2T...1/2T и нулю — вне этого диапазона. Подобный Фурье-образ соответствует функции sinc(Tx) и согласно свойству 4, подобное умножение равнозначно свертке исходной последовательности дельта-функций с функцией sinc(Tx)




То есть с помощью преобразования Фурье мы получили способ легко восстановить исходный сигнал из дискретизированного по времени, работающий при условии что мы используем частоту дискретизации, по крайней мере вдвое (из-за наличия в спектре отрицательных частот) превышающую максимальную частоту присутствующую в исходном сигнале. Этот результат широко известен и называется “теорема Котельникова / Шеннона-Найквиста”. Однако, как несложно теперь (понимая доказательство) заметить, этот результат вопреки широко распространенному заблуждению определяет достаточное, но не необходимое условие для восстановления исходного сигнала. Все что нам требуется — это добиться того, чтобы интересующая нас часть спектра после дискретизации сигнала не накладывалась друг на друга и если сигнал достаточно узкополосный (имеет малую “ширину” ненулевой части спектра), то этого результата часто можно добиться и при частоте дискретизации намного ниже чем удвоенная максимальная частота сигнале. Подобная техника называется “undersampling” (субдискретизация, полосовая дискретизация) и довольно широко используется при обработке всевозможных радиосигналов. Например, если мы берем FM-радио действующее в полосе частот от 88 до 108 МГц, то для его оцифровки можно использовать АЦП с частотой всего 43.5 МГц вместо предполагающихся по теореме Котельникова 216 МГц. При этом, правда, понадобится качественный АЦП и хороший фильтр.

Замечу, что “дублирование” высоких частот частотами меньших порядков (алиасинг) — непосредственное свойство дискретизации сигнала, необратимо “портящее” результат. Поэтому если в сигнале в принципе могут присутствовать частоты высокого порядка (то есть практически всегда) перед АЦП ставят аналоговый фильтр, “отсекающий” все лишнее непосредственно в исходном сигнале (так как после дискретизации делать это уже будет поздно). Характеристики этих фильтров, как аналоговых устройств, неидеальны, поэтому некоторая “порча” сигнала при этом все равно происходит, и на практике из этого следует что наибольшие частоты в спектре, как правило, недостоверны. Чтобы уменьшить эту проблему, сигнал нередко сэмплируют с завышенной частотой дискретизации, ставя при этом входной аналоговый фильтр на меньшую полосу пропускания и используя только нижнюю часть теоретически доступного частотного диапазона АЦП.

Еще одно распространенное заблуждение, кстати, — это когда сигнал на выходе ЦАП рисуют “ступеньками”. “Ступеньки” соответствуют свертке дискретизированной последовательности сигналов с прямоугольной функцией ширины T и высоты 1:



Спектр сигнала при таком преобразовании умножается на фурье-образ этой прямоугольной функции, а у подобной прямоугольной функции это снова sinc(w), “растянутый” тем сильнее, чем меньше ширина соответствующего прямоугольника. Спектр дискретизированного сигнала при подобном “ЦАП” поточечно умножается на этот спектр. При этом ненужные высокие частоты с “лишними копиями” спектра обрезаются не полностью, а верхняя часть “полезной” части спектра, напротив, ослабляется.



На практике так, естественно, никто не делает. Существует много разных подходов к построению ЦАП, но даже в наиболее близких по смыслу ЦАП взвешивающего типа прямоугольные импульсы в ЦАП напротив выбираются по возможности короткими (приближающимися к настоящей последовательности дельта-функций) чтобы избежать излишнего подавления полезной части спектра. “Лишние” частоты в получившемся широкополосном сигнале практически всегда гасят, пропуская сигнал через аналоговый фильтр низких частот, так что «цифровых ступенек» нет ни «внутри» преобразователя, ни, тем более, на его выходе.

Однако вернемся обратно к преобразованию Фурье. Описанное выше преобразование Фурье, примененное к заранее дискретизированной последовательности сигналов называется преобразованием Фурье дискретного времени (DTFT). Спектр получаемый подобным преобразованием всегда 1/T-периодичен, поэтому спектр DTFT полностью определяется её значениями на отрезке [0...1/T), поэтому часто этим отрезком спектр DTFT и ограничивают. При этом результат DTFT несмотря на то что это спектр дискретизированного сигнала — по-прежнему “аналоговая” функция. Кроме того, для “обычных” действительнозначных сигналов вторая половина этого спектра в силу свойства 6 зеркально повторяет левую половину, отраженную относительно частоты Найквиста 1/2T.

До сих пор мы предполагали что на вход наших преобразований поступает сигнал определенный от минус до плюс бесконечности. Однако реальные доступные нам сигналы всегда имеют конечную длину — что делать? Для решения этой проблемы в FT и DTFT конечный сигнал просто дополняют слева и справа на бесконечность нулями. Если исходный сигнал изначально был конечным (скажем, это отдельный импульс) и в преобразование Фурье он попал полностью, то этот подход напрямую дает желаемый результат. Однако часто «конечный» сигнал используемый для преобразования Фурье на самом деле является частью более длинного, возможно бесконечного сигнала, такого как, например, синусоида. В этом случае дополнение конечного отрезка нулями интерпретируют следующим образом: считают что исходный сигнал имеет бесконечно большую длину, но затем умножается на некоторую взвешивающую функцию — “окно”, обращающуюся в ноль вне доступного нам для измерения отрезка. В простейшем случае роль “окна” играет просто прямоугольная функция, соответствующая тому что мы просто дополняем конечный сигнал слева и справа бесконечным числом нулей. В более сложных — исходную последовательность умножают на весовые коэффициенты определяемые функцией “окна” и затем, опять же, дополняют нулями.



Пользуясь уже хорошо нам знакомым свойством 5, несложно сообразить, что при подобном умножении исходный сигнал прсто сворачивается со спектром функции окна. Например если мы пытаемся измерить спектр синусоиды (дельта-функцию), но ограничиваем интервал измерений прямоугольным окном, то в получившимся спектре на месте дельта-функции мы увидим спектр окна — т.е. Tsinc(T(x-f)):



В данном случае T — это длина интервала которым мы ограничили наш сигнал, так что чем длиннее будет входной сигнал — тем “уже” и ближе к истинной дельта-функции будет наблюдаемый нами спектр. Конечная “ширина” главного лепестка приводит к невозможности уверенно различать наличие в исходном сигнале синусоид близких друг к другу по частоте, а наличие “боковых лепестков” вносит небольшие искажения и в далеко расположенные частоты, мешая точному измерению амплитуды отдельных частот, особенно если нужно измерять спектр в областях небольшой амплитуды при наличии в спектре на порядок более мощных компонент. Этот эффект называют “спектральной утечкой” и полностью победить его для бесконечных сигналов невозможно, но чем длиннее интервал на котором измеряется сигнал — тем меньше влияние этой утечки. Выбором функции окна можно контролировать “ширину” этой утечки, либо концентрируя её вокруг главной частоты (сильно “размывая” спектр, но зато не мешая соседним частотам), либо размазывая её повсюду (размытие пиков уменьшается но сильно растет “шум” и как следствие — погрешность измерения амплитуды отдельных частот). Заметьте, что выбранная частота дискретизации в спектральной утечке почти не играет роли — короткий отрезок сигнала можно сэмплировать хоть на 10 ГГц, но это увеличит только количество поддающихся измерению частот, тогда как точность определения каждой отдельной частоты все равно останется низкой.

Интересным частным случаем является ситуация, в которой сигнал с набором дискретных частот nF дискретизируется на частоте mF, где m,n — целые числа. В этом случае нули “окна” и расположение дельта-функций в спектре в точности совпадают и хотя частоты все равно “размазываются”, но их амплитуда в точках mF совпадает с истинной — “шум” равен нулю. Это свойство позволяет доказать аналог теоремы Котельникова для дискретного преобразования Фурье, но на практике такие сигналы, к сожалению, фактически не встречаются.

Итак, со “входом” мы разобрались — из непрерывной функции бесконечной длины мы получили конечное число дискретных отсчетов, с которыми можем работать а взамен получили ограничения по ширине спектра и утечку частот. Однако “выход” DTFT по-прежнему является непрерывной функцией, работать с которой компьютеру проблематично. На практике эту проблему решают очень просто — полный отрезок [0,1/T) делят на k равных частей и считают DTFT в точках fi=i/kT, где i = 0,1,… k-1. Получившуюся конструкцию называют “дискретным преобразованием Фурье” (DFT).



Последнее преобразование удобно нормализовать, убрав из него T и вопросы связанные с выбором “окна”. Эту нормализованную запись часто используют в качестве определения DFT как преобразования последовательности из N комплексных чисел:



Прелесть преобразования Фурье записанного в такой форме — в том что сохраняя все достоинства DTFT, подобное DTF для “гладких” k (например, степеней двойки) можно вычислять чрезвычайно быстро, за время порядка k log(k). Соответствующие алгоритмы называют “быстрым преобразованием Фурье” (БПФ, FFT) и их, вообще говоря, существует несколько. С практической точки зрения, впрочем, их все можно рассматривать как “черные ящики”, получающие последовательность комплексных чисел на входе и выдающих последовательность комплексных чисел на выходе. Таким образом, работа с дискретизированным сигналом конечной длины сводится к тому, что этот сигнал вначале умножается на подходящую взвешивающую функцию, затем дополняется нужным числом нулей справа и передается в алгоритм БПФ.

Как интерпретировать получившийся результат? С учетом всего вышеизложенного,
  • Получившиеся значения есть равномерная сетка отсчетов по спектру DTFT. Чем больше отсчетов — тем мельче сетка, тем подробнее виден спектр. Дописывая к известной последовательности нужное число нулей можно посчитать сколь угодно близкое приближение к непрерывному спектру
  • Спектр DTFT задан на отрезке частот от 0 до 1/T (где 1/T — частота дискретизации) и периодически повторяется на бесконечность вне этого отрезка
  • Этот спектр задан комплексными числами (парами действительных). Амплитуда определяется как модуль комплексного числа, фаза — как аргумент.
  • Для действительнозначного входного сигнала, спектр в диапазоне 1/2T...1/T просто зеркально повторяет спектр 0...1/2T и не несет соответственно полезной нагрузки (для визуализации спектра его можно просто обрезать)
  • Если исходный сигнал содержал частоты выше половины частоты дискретизации, то они будут отображены в более низкие частоты (возможно накладываясь поверх уже существующего сигнала этой частоты) — алиасинг
  • В спектре всегда присутствует “спектральная утечка” определяющаяся выбранной взвешивающей “оконной функцией”. Чем длиннее исходный сигнал (до дополнения нулями!) — тем эта утечка меньше.
  • Спектральная утечка ограничивает осмысленность расчета БПФ с большим дополнением нулями. Однако дополнение все же часто бывает полезным, поскольку, например, позволяет точнее определить максимум узкополосного синусоидального сигнала, если он не попадает точно в одну из частот вида k/T.
  • Синусоиде амплитуды A в амплитудном спектре (при выбранной мной нормировке преобразования Фурье) соответствует значение A*N/2, за исключением нулевой частоты, которая не раскладывается на “плюс” и “минус” частоту и потому имеет амплитуду A*N, а также частоты Найквиста 1/2T в которой касаются в предельном случае друг друга отдельные копии спектра (там тоже будет A*N, но, в отличие от нуля в выход БПФ это значение не попадает да и достоверным в реальных схемах все равно никогда не является). Здесь N = T1/T0, где T1 — это длина исходного сигнала (она определяет коэффициент перед спектром «окна»), а T0 — длина одного периода дискретизации (она определяет коэффициент у гребенки Дирака) и по смыслу это, как несложно видеть, попросту число отсчетов в исходном сигнале (до его дополнения нулями)


Ну вот, в общем, и всё. Надеюсь преобразование Фурье и алгоритмы БПФ будут теперь для Вас простыми, понятными и приятными в обращении инструментами.
@0serg
карма
67,0
рейтинг 24,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (95)

  • +28
    Чего только не бывает на хабре в пятницу вечером.
    • +17
      хоть картинки цветные)
  • +14
    Прочитал много нового и интересного для себя, но… Почему, черт побери, фраза «Простыми словами» в заголовке всегда означает «мы старательно замолчим все определения и выводы формул, чтобы вам все равно пришлось после нашей статьи читать что-нибудь еще на ту же тему, да еще и будем перескакивать с пятого на десятое в процессе изложения»?
    • +7
      Просто текст и так вышел очень длинный, а мне хотелось что бы его все-таки дочитали до конца, не застряв в куче формул в начале. Тем более что основные формулы я все же привел, опустив только широко известные определения. Основные идеи по выводу формул там тоже вроде все есть, а «честные» их доказательства — это очень хардкорный матан, так как там оперирование идет обобщенными функциями. Но если у Вас есть какие-то идеи что конкретно можно добавить в статью — то я их с благодарностью выслушаю и текст соответствующим образом подправлю.
      • +13
        Я понимаю вашу точку зрения, но позиция mayorovp в данном случае больше соответствует моему личному мнению на тему, как такие вещи объяснять.

        Основная проблема ситуации, когда часть необходимых для понимания главной идеи статьи вещей вынесена во внешние ссылки — в том, что материал по этим внешним ссылкам имеет иной, часто более общий посыл, чем та статья, за которую берётся читатель. Я учился на профильном факультете по профильной специальности, и на слух термины типа «свёртка» мне знакомы. Тем не менее, я просто уверен, что пойдя в Википедию за точным определением, я зависну там ещё на несколько часов, потому что эта пресловутая свёртка будет выражаться через какие-то другие давно забытые мной вещи, а те — через ещё что-то. В итоге ситуация будет похожа на попытку скомпилить у себя в голове целую библиотеку математических понятий, из которой мне на самом деле нужна лишь маленькая часть, но пока я не завершу эту компиляцию, я не пойму, какая именно. Это сложный, утомительный, трудоёмкий и фрустрирующий процесс для человека, который повёлся на «простыми словами».

        Сейчас ваша работа мало чем отличается от множества просветительских статей на аналогичную тематику. И все они грешат одним и тем же: опуская базисные вещи, оставляя их на совести читателя, они в итоге этого самого читателя и лишаются, ибо до конца в таком «простом» мануале смогут дойти лишь те, кто и так разбирался в материале, либо те у кого было реально много времени и желания разбираться.

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

        PS: Если вы были бы готовы взяться за такой титанический труд, я мог бы вам посодействовать в качестве подопытного читателя, на котором можно было бы тестировать понятность и доходчивость материала.
        • +3
          Я попробую дописать еще одну-две статьи на смежные темы. Правильно ли я понял, что основные затруднения были связаны со сверткой и дельта-функцией Дирака? Я напишу тогда одну небольшую статью про эту замечательную парочку и еще одну статью о том, как их используют при интерполяции и фильтрации сигналов и изображений
          • 0
            Если эти темы будут так же проработаны, обязательно пишите.

            Эта статья не для новичков, а для тех, кто использовал уже FT, но не знал многих интересных свойств.
            Например, только недавно я обдумывал, почему на маленьком окне выше погрешность обнаружения частот. Интуитивно понятно — меньше информации, но здесь всё досконально расписано.
          • +1
            Видите ли, я взялся за вашу статью вечером в пятницу в очень расслабленном состоянии. Потому что «простыми словами», а тема вроде как интересная. В итоге я споткнулся о первую же внешнюю отсылку к вещам, которые на моей памяти уже не ассоциировались с чем-то простым. А дальше просто не читал. Поэтому описанный сценарий с потерянным читателем — ровно про меня.

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

            Раз уж вы поинтересовались моим мнением, то я постарался всё-таки просмотреть статью по диагонали и высказать более конструктивные замечания.

            Первое что можно отметить — это очень высокая концентрация терминов и постоянные отсылки к ним в процессе объяснения. Некоторые термины вводятся прямо по ходу дела, после чего постоянно используются.
            Здесь вы допускаете типичную ошибку лектора технического вуза: большинство студентов не успевают с ходу понимать и запоминать все вводимые понятия, после чего в какой-то момент повествования они теряют главную нить и начинают тупо конспектировать с мыслью «как-нибудь дома разберусь».
            В вашем случае, так как речь всё же не идёт о лекции в реальном времени, помог бы отдельный глоссарий всех использованных терминов и выделение оных в тексте, как стилистически, так и с помощью гиперссылок, ведущих на соответствующий пункт глоссария. Это радикально облегчит неторопливому читателю проблему понимания нового для себя материала и даст ему уверенность в том, что автор не оставит его наедине с какими-то мудрёными логическими переходами.

            Второе. Эти самые логические переходы.
            На мой вкус, у вас очень action-packed манера изложения. Минимум воды и разжёвывания, максимум стремительности и выведения одних вещей из других. Это круто для блокбастеров, но для статей на научную тематику чуть более дружественный к читателю-новичку стиль был бы приятнее. Как у Фленагана в JavaScript Definitive Guide: он нередко повторяет вкратце уже ранее данные полновесные объяснения, чтобы напомнить читателю какие-то вещи, о которых он читал 50 страниц назад, без необходимости мотаться по книге в поисках нужной страницы. Плюс, дотошно объясняя порой кажущиеся простыми вещи, иногда по несколько раз, но с чуть разных точек зрения, он даёт всестороннее представление о той или иной вещи, не оставляя шанса для некорректного или однобокого понимания, которое может возникнуть при более кратком пояснении.
            Я понимаю, что вас смущал объём текста. С необходимой водой, которой он был бы разбавлен до состояния, действительно доступного новичкам в пятницу вечером, текста стало бы в три раза больше. Но, как я уже писал в первом комментарии, тему можно было бы разбить на несколько тематических постов, и тогда проблема объёма не стояла бы так остро.

            В общем, отзыв я вам предоставил, что теперь делать — решать вам. Обладай я вашими техническими знаниями и кучей свободного времени, я бы писал не дополнительные статьи на смежные темы, а создал бы этот цикл заново, а данную тему оставил в назидание потомкам как иллюстрацию того, что просто о сложном говорить всё-таки непросто =).
            Если хотите, я мог бы помочь вам с редактурой. Плюс, я такой тугодум, что если я всё пойму — значит поймёт практически любой читатель =).
            • 0
              Кому как. Меня бы это разжёвывание свёртки только бы заставило искать, где оно заканчивается и начинается суть.
              • +1
                Для этого придумали такую вещь как спойлер-блоки. Кому нужно — смотрит, кому не нужно — проматывает дальше.
            • +1
              Меня в американских книжках убивает такая вода с миллионами повторов. В каждом из них встречается очередной важный аспект, не упомянутый ранее, типа чтобы не грузить, и из-за этого, а ещё и из-за того, что эти повторы никак не отделены от повествования, их не получается пропускать. Чувствую себя курицей, выклёвывающей вкусные зернышки из залежей навоза.
              • 0
                Я где-то встречал на Хабре комментарий про сравнение манеры подачи материала у нас и на Западе: там грешат излишней популяризацией, а у нас — излишней сухостью.
                Тот минус, который вы описали, можно исключить, если в одном месте будет находиться самое полное определение термина, а при его использовании будут даваться либо гиперссылки, либо спрятанными в спойлер-блоки цитаты. Причём цитировать можно уже именно тот фрагмент, который максимально актуален для конкретного контекста, в котором термин был использован.

                Грамотная вода может сильно облегчить понимание. При этом претензии тех, кому она без надобности, вполне удовлетворяются соответствующим стилистическим оформлением текста. Однако домыслить эту воду, если текст изначально создавался в сухом и лаконичном стиле, намного сложнее. А уж если американские книжки так грешат этой популяризацией, что это стало притчей во языцех, значит таки бывает от неё польза, и совсем списывать со счетов дружественную к новичку манеру подачи не стоит.
                • 0
                  Беда в том, что почти никто выделением и оформлением повторов не заморачивается…
                  Авторы, злоупотребляющие повторами, мне кажется, даже отчёта себе не отдают, что повтор очередной лепят.
                  • +1
                    Ну что уж поделать, мир не совершенен =).
                    Всех авторов не изменишь, да. А вот попробовать уломать конкретно автора этой статьи на использование гибридного стиля для последующих постов — вполне реально. Если получится — можно будет даже собственными глазами наблюдать разницу и думать, получилось ли достичь желаемого результата.
          • 0
            Для меня большим открытием оказалось применение Фурье для дискретизации аналогового сигнала. Респект.
            Однако, как-то не хватило подробностей про чаще встречающееся разложение сигнала на гармоники. Везде вижу, но ни разу не понял, как это — произвольную функцию представить суммой синусоид?..
            • 0
              > Для меня большим открытием оказалось применение Фурье для дискретизации аналогового сигнала.
              Стесняюсь спросить. Для чего, как Вы думали раньше, преобразование Фурье применяется чаще?
              • 0
                Правильно стеснялись. Цитирую: не хватило подробностей про чаще встречающееся разложение сигнала на гармоники.
                • –1
                  Дискретизация и разложение на гармоники — это одно и то же.
                  • 0
                    Вы что-то путаете.
            • +1
              А произвольную функцию и нельзя представить суммой синусоид. Довольно часто непрерывное преобразование Фурье пытаются интерпретировать именно подобным образом, но эта интерпретация неверна.

              Вот периодический сигнал разложить в сумму синусоид можно. Дискретный сигнал (последовательность чисел) тоже в определенном смысле можно.
              • 0
                Слышал вариант «нужный кусок области определения функции растиражировать вдоль оси — и можно считать её периодической»…
                • +1
                  Растиражировать можно, но зачем? Это уже получится другая функция, причем скорее всего разрывная (концы отдельных отрезков не идеально стыковаться будут)
              • 0
                А теперь до меня, кажется, начинает доходить, что наверно в результате такого разложения получится лишь спектр, то есть усреднённая оценка наличия в раскладываемом сигнале следов разных частот. Спектрограммы так рисуют, наверное, порезав сигнал на кусочки и разложив каждый отдельно, да? Восстановить, я так понимаю, сигнал в исходном виде — почти невозможно, лишь равномерную смесь синусоид. Да?
                • +1
                  Ну, в общем, да, непрерывный спектр — это в приближенном смысле усредненная оценка наличия в раскладываемом сигнале следов разных частот. Просто проблематично определить что такое «наличие в сигнале частоты x». На практике делают ровно наоборот — определяют понятие «спектральной плотности» и вообще «частоты в спектре сигнала» через преобразование Фурье, которое определяют через формулы.

                  Спектрограммы действительно рисуют, порезав сигнал на кусочки и разлагая каждый кусочек отдельно (полагая функцию вне взятого кусочка равной нулю). При этом, как я писал выше, происходит «спектральная утечка» — чем «тоньше» нарезка, тем сильнее спектр, скажем, синусоиды, расплывается по частотам. Из-за этой утечки точно восстановить исходный сигнал по конечному отрезку этого сигнала без дополнительной информации невозможно (хотя приближенно, с довольно хорошей точностью, — можно).
                  • 0
                    Спасибо!

                    То есть получается, что принято говорить о наличии частоты X в спектре — когда преобразование Фурье выдаёт для неё какую-либо амплитуду, да?

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

                    Ещё соображения возникли: кроме как через Фурье, наличие частоты в звуковом сигнале можно приблизительно определять органами чувств — на слух. Ну, и на глаз — по внешнему виду кривой сигнала.

                    На слух мы определяем наличие какой-то частоты в звуке по реакции слуховых ресничек в улитке внутреннего уха. Типа, смог сигнал раскачать ресничку на участке соответствующего диаметра — значит, есть такая частота. Продолжает качать долго — значит, она длится. Не успел раскачать и закончился — нет частоты. Не смог раскачать потому что слаб — нет частоты. В преобразовании Фурье есть аналогии этим процессам? Подобные пороги чувствительности по амплитуде и продолжительности там как-нибудь отражаются?
                    • +1
                      Да, с определением частоты все именно так.

                      С амплитудой колебаний присутствующих лишь в половине сигнала — в первом приближении да. Однако там еще будет «размытие» колебания по соседним частотам.

                      «Кроме Фурье» колебания можно определять через частотные фильтры. Представим себе фильтр, который синусоидальный сигнал определенной частоты пропускает, а все остальные сигналы — подавляет. Тогда наличие в сигнале данной частоты можно определить по наличию синусоиды на выходе подобного фильтра при подаче на него сигнала.

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

                      А физиология слуха — это вообще очень интересная и сложная тема, но я так понимаю, точного механизма там никто не знает. Там есть аналогии с Фурье, есть с вейвлетами, а единой модели нет.
                      • 0
                        А как Фурье эти биения умудряется не замечать?
                        • +1
                          «Не замечать» — несколько неверный термин. Преобразование Фурье раскладывает биение на сумму двух сигналов, а ухо — на произведение.
          • +1
            Вы же сами понимаете, что главные трудности здесь возникают со свёрткой и дельта-функцией.
            Дельта-функцию из википедии ещё можно понять (хоть и знал это раньше), а со свёрткой совсем беда. В вики про свёртку написано, что это «операция, показывающая схожесть двух функций». И дальше интеграл по какому-то Rd. Кто все эти функции, и чего они от меня хотят?

            Хотелось бы определение таких базовых вещей в простом виде.

            > habrastorage.org/storage3/7fd/edc/db5/7fdedcdb526b3b711c192d5902351969.png
            А здесь почему отрезки вверх кончаются стрелочками?
            • 0
              А здесь почему отрезки вверх кончаются стрелочками?
              Потому что это — условная бесконечность, умноженная на коэффициент. Строго говоря, значение в такой точке не определено, но при этом (за счет «магии» обобщенных функций) такие значения можно сравнивать друг с другом, и даже можно выполнять над ними арифметические действия. Отсюда и стрелочка — чтобы можно было отобразить это на графике, и при этом не перепутать с регулярной точкой.
        • +2
          Аналогично, я половину операций просто не помню как делать, поэтому выражения — легко представить и простое преобразование становятся непонятными и в этот момент теряешь нить. Причем нужны отнюдь не формулы — их я найду без проблем, мне нужно объяснение на пальцах пошагово, как это делается и самое главное — примеры из жизни для каждого момента — если делаем свертку, то как на википедии изображена картинка, которая легко дает понять почему свертка — есть особый вид интегрирования. Нужны простые и понятны примеры, которые непроходимые уродские формулы сделают понятными и осязаемыми. Без физического смысла математика — полная абстракция и совершенно неинетересна.
          Нужно показывать применение — если выполняем преобразование, то что оно дает. Зачем мы занимаемся скучной работой и нудным головоломным интегрированием.
        • +2
          Очень разумные и правильные замечания. По своему опыту могу подтвердить, что без завершения «компиляции библиотеки математических понятий» та самая нужная «маленькая часть» так и не будет понята до конца.
          • +2
            и поскольку часто не удается выделить столько времени, чтобы уложить в голове по полочкам все, что нужно, то окончательного понимания так и не приходит. Имеем образование по верхушкам. Обсудить можем- применить не всегда.
            • 0
              Пока не припрет необходимость. Обсуждение — это ведь не работа, а понимание приходит только когда плотно работаешь с такими вещами
              • 0
                А у меня в работе вообще нет необходимости в высшей математике. Я ее применяю только в хобби. Сейчас вот понадобилась для обработки данных с сенсоров и построения алгоритма полетного контроллера. В целом же для меня математика — это способ снизить алгоритмическую сложность программы. Это инструмент для обработки данных, которые — самое ценное, что есть в моей практике.
      • +1
        Тогда лучше заменить заголовок на «своими словами»
      • 0
        Не слушайте недовольных, обзор у Вас получился отличный. Народ просто не понимает смысл научных обзоров, задача которых — создать в голове читателя общее представление о той области, изучить которую человеку еще только предстоит. Даже если часть доказательств остается пока непонятной, наличие такой общей картины способно во много раз сократить затраты времени на полноценное изучение. А для людей, которые уже изучили этот материал, такой обзор поможет структурировать материал в голове, разложить все по полочкам. Так что читать его лучше дважды — до и после.

        В целом изложенный Вами материал примерно соответствует тому, что у меня в курсе ЦОС студенты изучают в течение целого семестра, так что плотность материала идеальная для обзора и все претензии по поводу отсутствия доказательств совершенно не по делу.
        • 0
          Спасибо большое, очень приятно было прочитать этот комментарий!

          Материал я думаю было бы все же неплохо дополнить рассказом про свертки и фильтры, тогда он был бы полным и давал более завершенную картину. И благодаря Вам этот рассказ стал немножко ближе к его практическому воплощению :)
          • 0
            Если там (в ЦФ и свертках) у Вас все так же хорошо продумано, как в спектрах, то получится просто замечательный и довольно полный обзор. На самом деле обзоры ведь хороши еще и тем, что в хорошем обзоре собраны в концентрированном виде объяснения смысла вводимых понятий — зачем они нужны и почему работают — те общие слова, которые математики часто пропускают, считая их слишком «физичными», и которые приходится по капле выискивать в разных книжках. В этой части у Вас с этим все очень хорошо.

            Кстати, такое понимание предмета очень трудно достижимо просто по книжкам, без опыта практической работы в данной области. Так что я бы почти достоверно идентифицировал Вас как коллегу :)
    • +1
      Автор хотел более доходчиво донести «физику явления». А формулы и их выводы можно в книжках посмотреть. Мне, например, очень понравилась часть статьи, где объясняется, почему применение окон приводит к растеканию спектра.
      • 0
        Это как раз не физика, а математика
    • 0
      PS после исправления статьи автором она стала читаться гораздо лучше, так что прошу мой комментарий выше считать устаревшим.
    • +2
      Угу, причем то, что объясняется о полезности этих преобразований, я и так понял из статьи на Википедии и помню из университетского курса, а вот как именно проводить свертку функций, как именно восстанавливать сигнал и как это превратить в полезный алгоритм я так и не понял. Текст пестрит любимыми математическими выражениями «очевидно» и «легко сделать», а на деле эти опускаемые моменты и являются самыми сложными и непонятными. В итоге поверхностно я понимаю эту тему, а пользоваться так и не могу. «Просто» не получилось. Самое интересное опущено, а то, о чем можно догадаться и понять на пальцах я и так уже давно понял.
  • +7
    Да… И это еще «простыми словами». В целом, строгое описание куда понятнее.
    • +3
      В строгом описании, скорее всего, придется до многого доходить на собственной шкуре, а здесь хотя бы перечислены ключевые моменты и подводные камни…
  • +11
    Иллюстрации крутецки круты.
  • +7
    Довольно хорошо написано и проиллюстрировано, хотя, раньше встречал еще более простое и изящное изложение преобразования Фурье, правда, сейчас уже не вспомню источник, кажется даже из курса каких-то лекций. Ключевым приемом таких публикаций является проведение аналогий и ассоциаций с предметами и событиями из повседневной жизни, что даже люди далекие от темы улавливают суть. Тот же Джоэль Спольски часто прибегает к такому подходу и другие известные популяризаторы, Джефф Хокинс вспомнился со своей книгой. Но в целом написано очень неплохо, с указанием ключевых моментов и подводных камней!

    А могли бы вы столь же популярно рассказать о вейвлет-преобразовании? :))
    • +7
      Плюсую вейвлет-преобразование!
      Желательно дискретное, и с реальными примерами кода.
      На википедии и в других местах написано очень много теории, и я вроде даже понял что это такое, но не нашёл ни одного алгоритма с доступным описанием (в отличие от fft), чтобы просто взять и попробовать.
      • +1
        Вот примеры кода с пояснением как именно работает преобразование на практике — это то, что нужно! Голую математику — в лес! у меня есть коспекты по высшей математике в вузе, я отлично сдал экзамены, даже условно понимаю зачем оно надо, но КАК оно работает я не понял до конца и так и не научился применять в произвольном реальном случае. Вот именно это и нужно. За такое объснение был бы очень благодарен.
        Мне как-то товарищ недавно объяснил на пальцах ПИД регулятор и я наконец-то понял как реальные данные связать и обработать. До этого формулы были отдельно, а реальные данные отдельно и воедино никак не собирались хоть ты тресни.
        • 0
          Обьясните и мне про ПИД, плиз
          • 0
            К сожалению, алгоритм я пока не реализовал, а без него могу разве что на пальцах рассказать зачем нужны пропорциональная, интегральная и дифференциальная часть регулятора и что является для них входными данными. Это полезно только для понимания процесса, но алгоритма не дает.
            • 0
              Хотя, вот тут, вроде, что-то про это рассказывалось уже…
              • 0
                Да, мне не очень помогло тогда. Не знаю почему.
    • 0
      С вейвлетами я знаком гораздо хуже :), но тема действительно интересная, так что если я со временем наберусь сил в ней основательно разобраться, то такую статью безусловно напишу. Но едва ли в ближайший месяц-два, к сожалению.
  • 0
    Как в mp3 преобразовывают данные, что фреймы идут с перехлёстом 50%, а коэффициентов во фрейме ровно половинное число отсчётов?
  • +8
    А я ведь понимал всё это в универе! А прочитал вот эту статью и иллюстрировать ощущения могу только картинкой из «ёжика в тумане».
    • +2
      Угу, а нужен не ежик в тумане, а конкретика. К сожалению, разогнать туман с помощью статьи не удалось.
  • +2
    Вполне милая статья, содержит основные позиции. Как универская шпора)

    Меня вот только всегда смущали интерпретации типа «утечки спектра». Ограничив сигнал по времени мы получаем сигнал, ограниченный по времени (КО). Его спектр вполне себе определен. Радиоимпульс конечной длительности — это не просто синусоида. Это полноценный сигнал со спектром sinc, лежащий в основе большинства радиосистем (ФМ-2 и т.п.). Если вы этот радиоимпульс умножили на неравномерное окно — получили третью функцию, с третьим спектром.

    Разговоры об «утечке спектра» возникают когда сделав FFT отрезка сигнала люди пытаются ответить на вопрос «А какой был бы спектр, если бы этот сигнал был бесконечно засемплирован?». Это отдельная задача, которую можно решать. Только это нужно подчеркивать и не вводить слушателя в заблуждения о наличии пороков у преобразования. Оно от этого не ломается)
    • –1
      Утечка спектра — вполне признанный термин. Хорошо демонстрирует границы применимости теоремы Котельникова.

      Сигнал ограничен во времени => спектр растекается (см. Benedicks's theorem). Спектр растекается => невозможно применить теорему Котельникова.
      • +3
        Я не спорю, что такое явление есть.

        Я лишь говорю, что не стоит преподносить это как недостаток ПФ:

        «На практике, однако, мы не можем применять ни FT ни DTFT напрямую, поскольку оба этих преобразования получают на вход сигнал определенный от минус до плюс бесконечности.»

        Любой сигнал, по определению, функция с конечной энергией. И FT, и DTFT без проблем с ним работают, несмотря на то, что функция эта не равна нулю только на некотором интервале.

        Безусловно, если мы берем периодическую функцию, ограничиваемся некоторым отрезком, берем ПФ, то итоговый спектр будет отличаться от спектра функции в бесконечных пределах — каждая составляющая спектра расползется по sinc'у. Но это частный случай, когда стоит задача определить спектр периодической функции, определенной в бесконечных пределах, по конечной выборке. Если функция и так ограничена, то никакой утечки спектра может и не быть. Я ратую за то, чтобы оговаривали задачу, перед тем как её решали, иначе это читателя только запутывает.
    • –1
      Спасибо за комплимент :). С замечанием про утечку согласен, я просто исходил из предположения что статью будет читать более-менее обычный человек, который будет пытаться «находить» или «измерять» определенные частоты в исходном сигнале, предполагая их аналогичными по смыслу частотам синусоидальных сигналов. На Хабре было несколько статьей подобного плана, описывающих эксперименты с Фурье и Matlab-ом и я попробовал отталкиваться от примерно схожей схемы мышления. Но вышло похоже действительно переупрощенно, так что я постарался подправить текст чтобы сделать его более корректным.
      • 0
        Матлаб — это исследовательский инструмент математика. Гораздо интереснее нормальный алгоритм, который можно превратить в код
        • 0
          Ну так чистый концентрированный алгоритм — это формулы, которые вы не любите.
          • 0
            Мне не нужен дистиллят. Мне нужно «мясо». Не святой дух формул, а алгоритм согласно его определению «Алгори́тм — набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий.»
            Формулы я признаю практически полезными, когда они записаны в виде конструкции любого языка программирования. Почему? Математика — это инструмент абстракции, поэтому перед ее практическим применением нужно сделать привязку к особенностям реального мира. Объяснив на красивом стройном ряде формул принцип, нужно спуститься с небес математики на грешную землю физики и инженерии и применить знания на практике. Только тогда формула станет полезной.
            Я сам часто цитирую фразу «нет ничего практичнее хорошей теории», но теория хороша тогда, когда она не слишком оторвана от реальности.
            В реальности вычисление производной или интеграла в символьном виде — практически невообразимо сложная алгоритмическая задача. Поэтому, например, интеграл на практике в дискретном цифровом мире является по сути вполне удобным сложением в цикле. И вот тут уже легко оценить красоту — сложное мат. преобразование красиво и вычислительно дешево дает практически ценный результат.
            В рамках фестиваля 360 градусов в Политехе показывали хороший фильм — «Чувственная математика» — гениальные математики на пальцах для зрителя показывали и объясняли сложнейшие вещи так, что ими невольно проникаешься. Это искусство, которое востребовано в жизни на каждом шагу.
  • +4
    Вы пишете
    Например в наших ВУЗах почему-то часто используют нормировку преобразования Фурье определяющую спектр в терминах угловой частоты (радианов в секунду). Я буду использовать более удобную западную формулировку, определяющую спектр в терминах обычной частоты (герцах).

    А потом сразу после этого определяете , где — угловая частота.
    • +1
      Да нет, он сразу после этого определяет \hat{f}(\omega), где \omega — обычная частота. Тоже, кстати, ошибка, но несколько другого рода.
      • +5
        Согласен, но просто, чтобы никого не запутывать, обычную частоту лучше обозначать через , а не .
        • 0
          Согласен, спасибо за замечание. Попробую подправить позднее
        • 0
          Ну f же привычнее, что за преклонение перед греческим алфавитом. Хотя тут оно будет конфликтовать с f(t). Но это — скорее повод переименовать f(t) в более привычное x(t).
          • 0
            Я думаю, что тут речь не о том, как обозначать функцию, а как обозначать её аргумент. Омегой обычно обозначается угловая частота, а буквой ню — просто частота. Просто общепринятое обозначение.
    • 0
      Скорее там не omega, а просто w. Иногда используется в зарубежной литературе.

      Меня скорее смущают некоторые ошибки в определениях (в формулах). Типа отсутствия j в показателе экспоненты в определении DFT.
      • 0
        О, спасибо за важное уточнение! Мнимая единичка действительно при переписывании потерялась. Поправлено.
        • 0
          Написал здесь, т. к. на информацию о помарках в ЛС реакции не было.

          А так вполне понятная статья, спасибо.
  • +7
    На этом сайте есть очень доходчивое и красивое объяснение betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/.

    Попутно не менее доходчиво можно разобраться в комлексных числах. Вообще сайт достоин как минимум присутствия в закладках.
    • +1
      Огромное спасибо за ссылку! Нисколько не умаляя стараний автора, только после статьи на betterexplained я понял суть.

      Такой бы на русском — студентам и школьникам бы очень пригодилось (да и преподавателям, как образец). Может быть, есть что-то такое?
      • 0
        А ссылочку на ту статью можно?
    • +1
      Великолепная статья на betterexplained — и не только она: чего только стоит статья про e и ln, или даже просто про pi и синусы. Что самое смешное — их реально можно рекомендовать даже студентам наших математических факультетов.

      Автор, после фразы «Начать надо, наверное, с того что обычное преобразование Фурье — это некая такая штука которая, как можно догадаться из названия, преобразует одни функции в другие, то есть ставит в соответствие каждой функции действительного переменного x(t) её спектр или фурье-образ y(w)» Вы теряете 90% читателей, потому что:

      а) вы жаловались на преподавание преобразования Фурье в ВУЗах и начали с такого же определения
      b) это не отражает интуитивного даже для гуманитария смысла преобразования Фурье
      c) лучше бы пример с time domain / freq domain и эквалайзером привели в начале )

      Мне нравится подход автора — см статью про то, как правильнее определить кошку.

      Но, может быть, я неверно понял целевую аудиторию заметки и зря привередничаю?
  • 0
    Хочу только добавить, что на практике дискретное косинус-преобразование (DCT) используется чаще, т.к. работает только с действительными числами.
    • +1
      Есть предложение — описать DCT и его преимущества по отношению к FFT. Если только я не пропустил такую статью.
  • +4
    Замечания.
    1. Частота в герцах в большинстве книг и в википедии (статья «частота») обозначается буквой f (ню), а угловая частота — буквой омега.
    2. Децибелы автором определены по мощности, а график дан для сигнала-функции. В последнем случае надо десятичные логарифмы умножать на 20.
    3. На 3-ем графике сверху по горизонтальной оси проставлена частота омега, а отметки некоторой граничной частоты даны как fсит.
    4. На графике синусоиды отмечена амплитуда а. Формула этой синусоиды содержит амплитуду, равную 1.
    5. Несдвинутая дельта-функция имеет при t = 0 бесконечное значение, поэтому вместо термина «амплитуда дельта-функции» точнее использовать понятие коэффициента при дельта-функции.
    6. Прямоугольная «выделяющая» функция на графике спектра имеет граничную частоту 1/2T, а не 1/T.
    7. Сигнал на выходе реального ЦАП действительно имеет вид ступенек (см. Кучумов А.И. Электроника и схемотехника", М., 2011)
    8. На графиках желательно указывать обозначения по горизонтальной оси.
    Цель этих замечаний — улучшить Вашу работу.
    • +1
      Спасибо за конструктивную критику!

      1,3. Согласен. Я привык f обозначать функцию и стремился избежать путаницы, но действительно стоило упомянуть об этой детали и использовать более широко распространенные обозначения

      2. Не согласен. Как раз наоборот, для амплитуды нужно умножать на 10, а для мощности — на 20. В первом случае — потому что ДЕЦИбелл, а во втором — потому что мощность есть квадрат амплитуды, а логарифм квадрата есть удвоенный логарифм

      4,5,6. Исправлено

      7. Не согласен, поскольку, во-первых, в большинстве современных ЦАПов (сигма-дельта) вообще всего 2 цифровых уровня сигнала на «цифровом» выходе, а во-вторых, при подобном подходе у ЦАПа получаются сильно субоптимальные характеристики. Так Кучумов в данном случае переупрощает.
  • 0
    Боже, какой же я тупой…
  • +1
    Тема окажется не полной без ссылок на используемые сегодня реализации БПФ и так же хотелось услышать Ваши комментарии о этих реализациях.
    А сам я начну с исторической реализации FFTPACK (http://www.netlib.org/fftpack/, эта реализация FFT на Fortran. А есть ли реализации на других языках?
    • 0
      FFTW — одна из стандартных библиотек на C. Интерфейсы на C и Fortran идут из коробки, обертки для других языков в изобилии (видел биндинги для Python, Ruby).
      • 0
        Года два-три назад наелся я с этой библиотекой. Версия, что была по умолчанию в ubuntu содержала баги и библиотека вела себя не так, как полагается по документации. Использование последних версий библиотеки мои проблемы решило. Так что хоть fftw «одна из стандартных библиотек» будьте осторожны при её использовании.

        P.S.: Кстати эти баги я искал интересно. У меня octave выдавал физически некорректные цифры на тестовых данных (которые на матлабе давали корректные значения + руками эти корректные значения были проверены). Из вывода промежуточных данных стало ясно что шалит fft преобразование. Я написал скрипт который брал эталонный вывод из matlab-а, а потом сравнивал с выводом из octave (который этот скрипт собирал с разными версиями fftw). Обнаружил в какой версии fftw «что-то сломалось» и в какой починилось. Потом с нужной версией fftw свой бинарник и линковал.
  • 0
    Да, кстати. Быстрое фурье-преобразование — это целая маленькая наука, без которой обработка обработка многомерных массивов (например, изображений) была бы очень затруднительна
  • 0
    Я уже пробовал, но попробую еще раз. С чего можно начать идиоту, который провтыкал всю высшую математику, и до сих пор не понимает практического назначения интегралов и логарифмов?
    • 0
      Хм. Назначение интегралов и логарифмов мы проходили в школе. Первые в 11 классе (или в 10 — не помню), вторые пораньше (9, 8???).
      Если такие понятия непонятны — начать со чтения школьных учебников, википедии, сайтов обучающих навалом.
      А можно я вас спрошу — а вам сейчас зачем понадобились те и другие? Какие проблемы в жизни вы собираетесь с новыми знаниями решить?
      Почему спрашиваю — как правило «провтыкиваются» или «не прилипают» те знания, которые непонятно где в жизни применить.
  • +1
    спасибо за экскурс!
    может Вы могли бы просветить, чем отличаются друг от друга различные ЦАП?
    и в сторону каких ЦАП смотреть если используется большой поток данных?
    • 0
      Частотой дискретизации (полосой частот), разрядностью (динамическим диапазоном), уровнем шума, стоимостью
      Что подразумевается под «большим потоком данных» и во что его предполагается преобразовывать?
      • 0
        подразумевается наличие постоянного аудиосигнала АЦП- процессор -ЦАП, одновременно с ним вывод с DAW дюжины дорожек (желательно на разные каналы) и возможность стороннего подключения других цифровых устройств
        • 0
          Вам нужно определиться с числом каналов, полосой частот, динамическим диапазоном и желаемым уровнем нелинейных искажений в аналоговом сигнале и после этого просто смотреть на подходящие модели и выбирать наиболее удобную.

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

          Но Вам лучше к специалистам обратиться, мои познания больше теоретические чем практические
          • 0
            Ценю любые познания. спасибо!
            Если Вы могли бы кого-либо посоветовать — был бы крайне признателен

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.