ффт - штука полезная, спору нет. Но сю радость пихают куда ни попадя, к примеру, "раскладывают" спектры далёких "звёзд". Однако, давайте-ка глянем вот на это.. это синусоида в Дикой Среде, то бишь она не имеет постоянных амплитуды и фазы. когда требуется выудить РЕАЛЬНЫЕ частоты чел голоса, эта проблема сильно вылезает
Ну всё верно, да. Поэтому были поиски и есть скорее всего до сих пор других разложений. Вейвлеты, например, мне еще в институте лет 20 назад преподавали. Они как раз переменные по амплитуде. Главная идея у Фурье была в том, что когда изучали уравнение струны, то осознали контриинтуитивную штуку - если струну щипчиками растянуть, то ей можно придать любую форму, а если потом отпустить она начнётся колебаться по гармоническому закону и быстро превратится в какой то набор гармоник. А значит если запустить процесс математически вспять, повернуть время назад, то приходим к неожиданному выводу - наложение синусоид как будто бы способно принять любую форму (начавшись от чистых гармоник в какой то момент времени и потом развиваясь как процесс). Вот этот фактик сперва был воспринят как парадокс, какой то косяк в теории, но Фурье ЕМНИП доказал со всей строгостью, что это действительно правда. Однако тут надо помнить, что есть "неудобные" для разложения в гармоники сигналы которым реально надо бесконечное число составляющих, чтобы приблизиться с хорошей точностью.
а как правильно их выуживать? вроде где-то существуют алгоритмы, где из белого шума с большей амплитудой чем голос - вынимают речь. как сие правильное гуглить?
Локаторы хороших годных обсуждений обнаружили ЭГФ в треде сиëм. Главное поменьше вялотекучести и прям тогда сегодня будем вырубать голоса рептелоендов с мембраны мироздания
В одной книге видел, что при помощи дискретного преобразования Фурье можно написать даже алгоритм декодирования корректирующих кодов, которые работают в конечных полях. Интересно, в чем там идея? Типа если поле это циклическая группа, то можно провести аналогию с синусоидами? Типа и там и там период.
Вейвлеты локализованы по времени, поэтому позволяют узнать в какой момент времени какая частота присутствует в сигнале. По факту же это просто умножение спектра вейвлета на спектр исходного сигнала в частотной области. Там где в Фурье мы получаем дельта функцию - считай единичный пик, у вейвлетов получаем уже какую-то кривую которая охватывает какую-то часть спектра. БПФ в отличии от ПФ определено на конечной области из-за этого происходит искажение спектра, а из-за дискретизации искаженный спектр повторяется. Все эти изменения - это нелинейные преобразования которые искажают спектр добавляя искажения к основной синусоиде. Чтобы получить базовый тон (если это имеется в виду) какого-либо колебания нужно использовать алгоритм определения высоты (pitch-detection), который в том числе можно определить в частотной области (к примеру HPS).
увы и ах, речевой аппарат тоже не выдаёт постоянного спектра. из белого шума можно выудить что угодно, но это уЖО из разряда артистизма а-ля "песнь далёких звёзд" локальную амплитуду сигнала можно щимить так: x(1)/sin(ωt1) ≈ x(2)/sin(ωt2). короче, чем большую погрешность допускаем, тем больше попаданий
Любой анализируемый сигнал в ПФ рассматривается от -∞ до +∞ и имеет единый спектр. В FFT ты берешь какую-то часть сигнала, это эквивалентно умножению на прямоугольное окно - сворачиваешь с его спектром. Далее производишь дискритизацию - повторение спектра и наложение частот. Вот из-за того что ты берешь каждый раз разный сигнал - получаешь разный спектр - что логично. Белый шум имеет равномерный спектр так что какой-либо сигнал на фоне шума будет выбиваться из него. Можно отфильтровать ненужные частоты, но сигнал получится искаженным. Это если имеется в виду спектр непереодического сигнала. Любой периодический сигнал просто усредняется - шум уменьшается а амплитуда полезного - остается.
Да, до чего ВАСМ докатился! БПФ - в хипе, UbIvItS - в почете! Одно название треда чего стоит. Для меня FFT - как икона для верующего, а для кого-то забавности. А если серьезно, то приятно осозновать, что кроме меня, это еще кому-то интересно.
Я не понял в чём проблема, динамический спектр, изменяющийся со временем. Как в любом анализаторе спектра по бегущему окну - отрезку времени измерений. Спектр есть у любого сигнала, в любом отрезке его существования.
Ну щас вам UbIvItS накидает идей. Вспомнилось как он один раз Thetrik'у морочил голову какими-то статистическими фильтрами и про то, где и в каких случаях лучше всего применять вокодер. Ну а если без шуток, то лучше всего искать ответы на подобные вопросы на таких вот или похожих сайтах и форумах: http://www.dsplib.ru/index.html http://ru.dsplib.org/forum/
Когда сам с FFT разбирался позабавил один момент - задам его тут в качестве загадки для любопытствующих. Алгоритму мы подаём на вход массив сигнала такого как звук какой то длины и на выходе имеем массив описаний синусоид из которых он состоит. При этом для одной частоты синусоиды на выходе возвращается один результат - амплитуда и фаза (т.е. размах колебаний и с какого начального отсчёта эти колебания начинаются). Так вот представьте себе, что мы сделали сигнал из двух одинаковых частот, но с разными фазами и амплитудой, т.е. разного размаха и сдвинутыми друг относительно друга по времени - наложили и скормили в FFT. Но ведь исходя из структуры возвращаемых данных для одной частоты он может вернуть только одну амплитуду и фазу - две принципиально нельзя. Вот теперь кто не в курсе попробуйте догадаться как из такой ситуации должен выкрутиться FFT и вернуть что-то осмысленное и правильное.
Вот тут и начинаются ньюансы где и происходит растекание спектра. Умножение сигнала на какое-то окно искажает спектр, а дискретизация зацикливает его + из-за оконного эффекта частоты между бинами FFT будут растекаться по всему диапазону. Я уже где-то тут писал и даже делал анимацию поясняющую это: Умножая на какое-либо окно можно изменять уровень боковых лепестков и ширину основного. Тут нет ничего необычного, т.к. система линейна (и обладает свойствами аддитивности) то сумма двух сигналов во временной области также будет являться суммой двух сигналов в частотной, т.е. мы получим сигнал той-же частоты, но другой амплитуды и фазы. Если фазы будут противоположными то амплитуда будет равняться нулю. Нужно представлять себе результат преобразования Фурье (для реального сигнала) не как синусы и косинусы, а как синусоиду с определенной частотой и фазой:
Учебники математики пишутся для математиков. Там и не должны быть красивые трюки и решения для чисто инженерных, часто очень разнообразных и очень частных задач. Например, пред- и пост- обработку инженер или программер должен сам изобрести и придумать. Ну и многое другое. Я слышал про использование преобразования Гильберта после DFT. Не знаю в чём смысл, не вникал. Но у меня легко получался динамический диапазон более 80 дБ, при использовании тысяч(может больше, уже не помню) периодов для анализа - это уж совсем простой ход. Если напрячь мозги можно ещё кое-что придумать...
Преобразование Гильберта применяется для получения аналитического сигнала который используется к примеру для SSB молуляции/демодуляции.
И это правильный ответ - сумма двух синусоид одинаковой частоты, но разных фаз и амплитуд будет третьей синусоидой точно такой же частоты, но (возможно) другой фазы и амплитуды. Это закон.
Thetrik, есть вот такой интересный эффект для гитары. Единственное, что не нравится, это то, что трубку нужно в рот брать, а это не гигиенично. Представляете, допустим, Трешген на такой гитаре поиграет - как потом после него играть? Это же можно глупостью какой-нибудь заразиться и превратиться в Трешгена дубль два. А если серьезно, нет ли у вас примерного представления как это можно, скажем, в виде VST-эффекта реализовать? Только без трубки - на базе каких-нибудь фильтров. Это, если я не ошибаюсь, работает по принципу резонатора, вроде бы? Есть какие-нибудь идеи? Смотреть примерно с 03':30" (чтобы не терять времени)
Можно сделать всё, любой звук, используя не аналоговую электронику, а программы, программные анализаторы спектра, Audacity и C# с библиотекой генерации звука NAudio, и - захват системного звука с перенаправлением в файл.