Автор |
Сообщение |
|
Дата: 29 Май 2012 23:26:52 · Поправил: pavelkolodin (30 Май 2012 16:36:31)
#
Пытаюсь понять "физику" преобразования Фурье (прямого/обратного). Свои глупые опыты ставлю на БПФ.
1) Вроде бы ПФ рассчитано на непрерывные сигналы. Тем не менее, каким-то образом работает ДПФ. Да, работает с оконной функцией, но мне это понимания не прибавляет. Беру кусок сигнала (2048 отсчётов), взвешиваю окном Ханна (перевёрнутые 2П cos от -п до п), получаю 2048 амплитуд (1024 + отражение), 2048 фаз. Делаю обратное БПФ - получаю первоначальный сигнал ВЗВЕШЕННЫЙ ОКНОМ. А как же непрерывность?
2) Если после прямого БПФ обнулить значения амплитуд и фаз (зеркально) на некоторых выбранных частотах (точнее на некоторых выбранных полосах (bins)) и сделать обратное БПФ, получается тот же сигнал с отфильтрованными полосами. То есть, к сонограмме можно приделать ластик и стирать ненужные частоты. Работает. Но, если их не стирать, а умножать на какой-то коэфициент (1...2), после обратного БПФ на краях сигнал не успевает уйти в ноль. То есть, убрать что-то можно, а добавить - нельзя?
Прошу прощения, подход слишком инженерный через дурацкие эксперименты. Но представить в голове сумму из 2048 комплексных гармоник я пока не могу...
Реализована функция стирания спектра, хотелось бы реализовать функцию рисования на спектре. Простое накидывание энергии на "палки в спектре" даёт какой-то новый звук примерно на частоте в том районе, куда я ткнул, но по всему спектру начинает ползти что-то страшное.
Спасибо.
|
|
Дата: 30 Май 2012 00:55:25
#
Здесь коллеги Sinus и Programmist хорошо разбираются в таких вещах.
От себя скажу лишь, что ДПФ рассматривает входную дискретную функцию в предположении, что эта дискретная функция - отсчеты непрерывного сигнала.
1) А что Вас смущает? С чего начали, к тому и возвратились. А для чего, собственно, Вы его взвешивали окном Ханна?
2) На краях чего?
|
Реклама Google
|
|
|
Дата: 30 Май 2012 03:31:52 · Поправил: Sinus (30 Май 2012 03:33:30)
#
brokenpot,
спасибо за комплимент :)
Однако, мы с Programmistом в этом деле оказались любителями на грабли наступать)). А отучал нас от хождения по граблям коллега petr0v.
pavelkolodin
Надо одновременно с экспериментами изучать теорию, а иначе будет трудно уловить для чего применяют ДПФ, и как применять его правильно. В ДПФ важно разобраться с явлением спектральной утечки.
Не знаю, поможет ли, вот в этой теме некоторые примеры у нас довольно подробно разбирались. Там есть полезные упражнения, которые нам задавал petr0v, и софт, который создали mikasa76 и Programmist для фильтрации сигналов.
brokenpot хорошо вопрос поставил - Вам надо решить, что Вы хотите получить от ДПФ. |
|
Дата: 30 Май 2012 03:57:51
#
|
|
Дата: 30 Май 2012 06:53:56
#
pavelkolodin
Для того, что Вы хотите сделать, вам нужен фильтрбанк (filterbank), а не ДПФ. Который, впрочем, может быть реализован в том числе и на основе БПФ. Гуглите "DFT filterbank", в сети материала много.
|
|
Дата: 30 Май 2012 09:15:43 · Поправил: pavelkolodin (30 Май 2012 11:38:02)
#
Насчёт фильтрбанков... Пытаюсь реализовать что-то похожее на это: (см. видеоролик о том, как фотошопят спектр) http://www.divideframe.com/?p=spectrallayers
Стирание спектра работает хорошо, а вот попытка что-то добавить приводит к тому, что восстанавливается сигнал, не с нулями на концах окна.
Я применял окно, т.к. "так принято", не вдаваясь в математические глубины. В википедии сказано:
"В большинстве задач цифровой обработки нет возможности исследовать сигнал на бесконечном интервале. Нет возможности узнать, какой был сигнал до включения устройства и какой он будет в будущем. Также ограничение интервала исследования может быть обусловлено нестационарностью исследуемого сигнала.
Ограничение интервала анализа равносильно произведению исходного сигнала на оконную функцию."
Непонятно вот что:
1) да, нет возможности исследовать сигнал на бесконечном интервале, но от применения окна сигнал не становится бесконечным. Он так же конечен, как и без окна. Что с окном, что без окна - одинаковая конечность - 2048 отсчёта (например).
2) И почему произведение исходного сигнала на оконную функцию "РАВНОСИЛЬНО" ограничению интервала анализа?
Хочется разобраться с математическим принципом того, почему конечный сигнал, взвешенный окном (то есть "что угодно, плавно растущее из нуля и плавно уходящее в ноль") восстанавливается ДПФ почти идеально обратно, а сигнал не взвешенный окном, но ТАКОЙ ЖЕ КОНЕЧНЫЙ, восстановить не получается? |
|
Дата: 30 Май 2012 13:24:33
#
pavelkolodin
Полезно абстрагироваться от быстрого алгоритма FFT и взглянуть на DFT как на набор полосовых фильтров с децимацией, так вот децимация осуществляется не по Котельникову, отсюда и все искажения при попытке фильтрации в частотной области, спектральные наложения от неправильной децимации взаимно компенсируются при обратном преобразовании только в том случае когда не изменяется спектр. Всякие окна это всего лишь огибающая импульсной характеристики полосовых фильтров. Корректно по Котельникову решить задачу со стиранием спектра можно с помощью oversampled(non-critically sampled) filter bank.
|
|
Дата: 30 Май 2012 15:32:16
#
petr0v
Спасибо.
У меня вот такой вопрос. Возьмём 2048 отсчётов сигнала с ЧД 44100. Для этого окна, FFT даст 1024 амплитудных и 1024 фазовых компонент (остальные - зеркало). Что будут собой представлять отсчёты на спектре? Каждый будет отвечать за полосу в 21.53 гц ((1/1024)*22100)? То есть отсчёт номер 1 - это кол-во энергии в полосе от 0 до 21.53 гц? Отсчёт 2 - это в полосе от 21.53 до 43.06? Так?
Если так, то не пойму, как IFFT восстанавливает сигнал. Предположим у меня было две гармоники на частотах 25 и 30 гц. На спектре они уйдут в одну палку. То есть информация о них, как о раздельных сущностях потеряется. Откуда они возьмутся обратно?
Я чувствую где-то подвох, но понять где - пока не могу.
|
|
Дата: 30 Май 2012 15:51:12
#
pavelkolodin
Никакой одной палки там не будет, будет много не нулевых координат исходного вектора. В принципе это чистая геометрия школьная, только в многомерном пространстве, разложили вектор по ортогональным базисным векторам, потом базисные вектора сложили с весами координат, получили в точности исходный сигнал.
|
|
Дата: 30 Май 2012 16:26:32
#
petr0v
Да, правильно, не одна палка... Хорошо, вроде ясность какая-то начала мелькать где-то вдалеке тоннеля. А для восстановимости частот в сигнале - ответит на вопрос теорема Котельникова?
У меня дискретное мышление на тему палок - мне почему-то кажется, что из множества 1024 можно восстановить только конкретные 1024 базисных функции, то есть синус частоты 50 и частоты 51. А откуда при восстановлении берутся частоты между 50 и 51 (50.03, например) - мне не очевидно.
|
|
Дата: 30 Май 2012 16:30:15
#
Под исходным вектором понимается исходный набор отсчетов, верно?
А ортогональные базисные векторы?
|
|
Дата: 30 Май 2012 16:32:49
#
Под исходным вектором понимается исходный набор отсчетов, верно?
Не нашёл фразы "исходный вектор" в этом топике вообще (-;
|
|
Дата: 30 Май 2012 16:36:40
#
brokenpot
Под исходным вектором понимается исходный набор отсчетов, верно?
Верно.
А ортогональные базисные векторы?
Комплексные экспоненты на которые раскладывается исходный набор отсчётов в DFT.
|
|
Дата: 30 Май 2012 16:44:00
#
pavelkolodin
мне не очевидно
Нарисуйте на бумажке декартову систему координат и произвольный вектор из начала координат, найдите проекции вектора на оси, сложите векторы проекций, получите исходный вектор, в FFT-iFFT то же самое происходит, даже если исходный вектор не лежит на оси он очевидно правильно восстанавливается.
|
|
Дата: 30 Май 2012 17:50:01 · Поправил: pavelkolodin (30 Май 2012 19:31:36)
#
Не могу понять, как из двух базисных ортогональных функций sin(x) и sin(x*2) можно получить чистое колебание sin(x*1.12345)... Или если взять побольше базисных функций, у меня таки это получится?
Прикладная задача, которую пытаюсь решить - получение новых гармонических составляющих путём манипуляции амплитудным и фазовым спектром. Например есть взвешенные окном ханна 512 отсчётов сигнала. Если его FFT, потом его IFFT, получаю обратно тот же взвешенный окном сигнал. Попытка увеличить на спектре значение произвольной умплитуды после IFFT даёт сигнал, который краями к нулю не уходит (при пробегании всего файла такими окнами с 50% перекрытием и суммированием их с 50% перекрытием в новый файл даёт щелчки в местах состыковки, если увеличивать значения на спектре. Если уменьшать - всё отлично, щелчков нет).
|
|
Дата: 30 Май 2012 19:41:00
#
Чтобы выяснить, сколько базисных функций необходимо, нужно, например, разложить функцию sin(1.12345*x) в ряд Фурье по функциям sin(x), sin(2x), ... и посмотреть, у скольких из них и каких амплитуда будет ненулевая.
|
|
Дата: 30 Май 2012 20:15:51
#
Проблема в интуитивном понимании. Для непрерывного идеального математического случая, я понимаю, что размерность бесконечна - то есть для обозначения частоты 1.12345 просто берётся данное измерение и делается ненулевым, остальные зануляются. Для дискретного случая у нас есть только частоты 1, 2, 3, 4... ГЦ Как из них слепить что-то типа 3.5 гц я просто не могу представить.
|
|
Дата: 30 Май 2012 20:57:20
#
pavelkolodin
Для дискретного случая у нас есть только частоты 1, 2, 3, 4...
Отрезок синусоиды - это не бесконечный синус, имеет широкий спектр типа sinx/x.
Прикладная задача, которую пытаюсь решить - получение новых гармонических составляющих путём манипуляции амплитудным и фазовым спектром. Например есть взвешенные окном ханна 512 отсчётов сигнала. Если его FFT, потом его IFFT, получаю обратно тот же взвешенный окном сигнал. Попытка увеличить на спектре значение произвольной умплитуды после IFFT даёт сигнал, который краями к нулю не уходит (при пробегании всего файла такими окнами с 50% перекрытием и суммированием их с 50% перекрытием в новый файл даёт щелчки в местах состыковки, если увеличивать значения на спектре. Если уменьшать - всё отлично, щелчков нет).
То бишь графический эквалайзер, изучайте банки фильтров и теорию сопутствующую, иначе качественный результат недостижим.
|
|
Дата: 31 Май 2012 12:43:32 · Поправил: pavelkolodin (31 Май 2012 14:56:37)
#
Кажется понял вчера важную вещь. Тот небольшой кусочек сигнала в 2048 (например) отсчёта, который мы скармливаем в FFT, теория FFT рассматривает как функцию определённую на бесконечности, просто равную везде нулю, кроме этого интервала.
Когда мы применяем окно Ханна (перевёрнутый и поднятый над осью X косинус от -П до П), мы фактически меняем сигнал и делаем из него то, что в физике называется "волновой пакет", точное определение волнового пакета не знаю, но это что-то, что везде ноль, а на коротком интервале - какая-то интересная штучка.
По сути подавая в FFT короткий отрезок сигнала, мы пытаемся вычислить спектр не данного ограниченного сигнала, а бесконечно протяжённого сигнала, который существует от минус бесконечности до бесконечности, но везде имеет ноль, а в этом коротком интервале - не ноль.
update
Кажется, неверное понимание. Нужно представлять "кусочек сигнала" как один из периодов периодического сигнала.
|
|
Дата: 31 Май 2012 17:38:11
#
pavelkolodin
Вы вроде бы и пытаетесь что-то понять, но делаете это небрежно, давно же было сказано - читайте теорию, ссылка дана, там все разжевали для американских студентов про периодичность и бесконечность. Поймите простую вещь - ограниченные во времени сигналы имеют не ограниченный спектр, и наоборот.
Делая преобразование над конечным во времени сигналом вы на самом деле делаете преобразование над его размноженными во времени до бесконечности копиями. Окно сглаживает эффект от разрывов. Если взять синус, укладывающийся целое число раз на интервале анализа, то и спектр будет из одной палки, во всех остальных случаях будет набор палок.
За Вас еще пожевать и переварить?
|
|
Дата: 31 Май 2012 18:21:23 · Поправил: pavelkolodin (31 Май 2012 18:23:51)
#
> Поймите простую вещь - ограниченные во времени сигналы имеют не ограниченный спектр, и
> наоборот.
Я не понял, к чему это... Это давно понятно.
|
|
Дата: 31 Май 2012 19:07:41
#
pavelkolodin
Если Вы поняли это давно, то зачем было вчера писать вот это:
У меня вот такой вопрос. Возьмём 2048 отсчётов сигнала с ЧД 44100. Для этого окна, FFT даст 1024 амплитудных и 1024 фазовых компонент (остальные - зеркало). Что будут собой представлять отсчёты на спектре? Каждый будет отвечать за полосу в 21.53 гц ((1/1024)*22100)? То есть отсчёт номер 1 - это кол-во энергии в полосе от 0 до 21.53 гц? Отсчёт 2 - это в полосе от 21.53 до 43.06? Так?
Если так, то не пойму, как IFFT восстанавливает сигнал. Предположим у меня было две гармоники на частотах 25 и 30 гц. На спектре они уйдут в одну палку. То есть информация о них, как о раздельных сущностях потеряется. Откуда они возьмутся обратно?
Я чувствую где-то подвох, но понять где - пока не могу.
Или давно - это сегодня утром?
|
|
Дата: 31 Май 2012 19:29:21
#
Мой вопрос касается практики, а высказывание "ограниченные во времени сигналы имеют не ограниченный спектр, и наоборот" больше к неведомой абстрактной математике, где возможно что-то неограниченное.
|
|
Дата: 31 Май 2012 20:53:09
#
pavelkolodin
Мой вопрос касается практики, а высказывание "ограниченные во времени сигналы имеют не ограниченный спектр, и наоборот" больше к неведомой абстрактной математике, где возможно что-то неограниченное.
Вы не хотите читать и думать. В этом проблема. Вы не понимаете суть выполняемого преобразования и функцию окна.
Еще раз - математический аппарат, которым Вы пользуетесь, считает сигнал бесконечным, размножая имеющееся конечное число отсчетов во времени до бесконечности. А окно сглаживает разрывы в местах стыковки размноженных копий. Поймите суть, дальше поймете и все остальное, с практикой хорошо станет. Мне голая теория тоже не интересна, фундаментальной наукой не занимаюсь, только практикой.
|
|
Дата: 31 Май 2012 23:45:43
#
Мне кажется, мы немного о разном. Но! Правильно ли я понимаю, что когда вы говорите "размножая имеющееся конечное число отсчётов во времени до бесконечности" вы хотите сказать, что этот математический аппарат считает содержимое одного окна - одним периодом бесконечного периодического сигнала?
|
|
Дата: 31 Май 2012 23:49:31
#
Да, именно так и есть.
|
|
Дата: 01 Июн 2012 04:06:48
#
pavelkolodin
Я сказал об этом раза четыре, и ссылку на методичку для американских детей и жертв фурсенко привел, где это разжевали с картинками и в рот положили, осталось только проглотить.
|
|
Дата: 01 Июн 2012 18:36:39
#
больше к неведомой абстрактной математике, где возможно что-то неограниченное
Для понимания того, о чем здесь идет речь эта математика должна перестать быть неведомой. Иначе - никак.
Пытаюсь понять "физику" преобразования Фурье
В преобразовании Фурье нет никакой физики, как нет никакой физики в том, чем мы здесь занимаемся, - одна лишь математика, в чистом виде.
Когда дело дойдет до обработки электрических сигналов, физика еще внесет свою лепту :)
|
|
Дата: 02 Июн 2012 00:53:23
#
pavelkolodin
Пытаюсь понять "физику" преобразования Фурье (прямого/обратного). Свои глупые опыты ставлю на БПФ.
Ну и правильно. Тут есть два пути: либо изучить теорию, либо что-то сделать самому. Имхо, второй путь не так скучен :) Времени на то или на другое нужно потратить примерно одинаково, тогда станет понятно, что можно сделать с помощью этого инструмента, а что нет. В любом случае время будет потрачено не зря.
|
|
Дата: 12 Июн 2012 16:46:15 · Поправил: pavelkolodin (12 Июн 2012 16:48:35)
#
Привет обратно.
Придумал себе задачу: рисую карандашом на сонограмме (частотно-временное отображение сигнала), получаю синусоиду в тех временных "окнах" и на тех частотах, где оставил след карандаш.
Что делаю:
Окно - 2048 семплов. Беру массив комплексных чисел (Re + Im) длиной 2048, заполненный нулями. Это спектр. Ставлю симметрично (относительно центра - точка номер 1024) на действительной части спектра некоторое значение (например значение 2E6 (2000000) в точках 32 и 2047-32). Делаю IFFT. Получаю такую штуку: http://savepic.net/2942095.png
Пытался ставить в тех же точках на фазовом спектре значения -2E7, 2E7 (не понимая математики, тупо копируя увиденное при анализе ситусоиды) - та же история.
Чего хочу? Целого количества периодов синусоиды одной амплитуды во всё окно.
Может кто-нибудь прокомментировать? |
Реклама Google |
|