![]() |
|
|
![]()
|
|
| dwr_budr |
|
|||
|
Unregistered |
День добрый знатоки всяких разных преобразований из time domain в frequency domain!
Извиняюсь за вероятное ламерство вопроса! Я начинающий в этом деле! Само преобразование меня нисколько не смущает и не пугает, закодить ео если что смогу! Мне интересно другое! Интерпретация результатов таких преобразований! К примеру БПФ! Решил зажать песню к слову! Беру первые 512 выборок! БПФ вернет мне 512 комплексных значений (амплитуда и фаза).. так? И вот собственно вопросы.. - амплитуды каких частот это будут? - или это еще не готовые амплитуды и еще что то нужно сделать? - что делать с фазами? (а то как то вместо 512 чисел уже 1024 нарисовалась для хранения) - как интерпретировать вообще эти результаты и понять какие данные можно выкинуть что бы потом восстановить без ощутимых для слуха потерь? (понимаю /*надеюсь что правильно понимаю*/ что по амплитудам смотреть.. но как уже говорил для меня загадка какие частоты находятся в ответе..) Может можно пример привести конкретный! Типа вот 8 вхдных значений.. вот 8 выходных и т.п. Такие то игнорим и сохраняем место таким образом.. Или где такой пример можно глянуть? Спасибо! |
|||
|
||||
| dwr_budr |
|
|||
|
Unregistered |
Вот покапался у вас и нашел ссылочку
http://www.dsp.sut.ru/book/lections/l4/l4_4.htm Там есть раздел: практический пример. Ответ про отбрасывания значений начинаяя от N/2 прочитал! И про вычисление амплитуды SQRT(real^2 + img^2).. вроде так? И про распределение частот в выходном массиве тоже вроде понял! Но не пойму все еще что делать с фазами? За счет чего получится сжатие? Раз N/2 значений игнорим то остается еще N/2 (комплексных) которые и займут по размеру столько же сколько N входных значений! Или сжатие будет за счет того что в оставщихся N/2 значениях слабые частоты (и их фазы) можно просто занулись и эффективней сохранить уже использую обычные алгоритмы сжатия? |
|||
|
||||
| dwr_budr |
|
|||
|
Unregistered |
И сорри! Не покАпался, а покопался
Совсем забываю следить за грамотностью в инете!! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
а само ФП никакого сжатия и не делает - это просто преобразование сигнала
просто выбрасывать какие-то амплитуды - нехорошо если выбросить фазы - будут проблемы с восстановлением вообще, если выбирать такой способ сжатия, то я бы квантовал амплитуды и фазы - запоминал их с меньшей точностью, а потом, возможно, что-то вроде кодирования Хаффмана или арифметического... кроме того можно использовать результаты кодирования предыдущего сигнала (какое-то прогнозирование) Это сообщение отредактировал(а) maxim1000 - 8.4.2004, 11:53 -------------------- qqq |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Если нравятся время-частотные преобразования, то сжимать можно вейвлетами.
|
|||
|
||||
| dwr_budr |
|
|||
|
Unregistered |
Максим1000
Не ну понятно что не дает! Я именно к тому как можно частотную информацию обработать дабы зажать лучше! Вот и спрашивю за счет чего же таки сжимают и как правильно что отбросить что бы потери в качестве не были слышны Более того еще вопрос! Результаты ведь вещественого типа? Ничего если я до целого буду округлять? Слышал про целочисленные преобразования фурье! Они округляют или вообще с целыми работают? Спасибо! |
|||
|
||||
| dwr_budr |
|
|||
|
Unregistered |
Podval
С вейвлетами еще не ковырялся! Может и с ними все организую! Спрашивать если что у тебя можно? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Дело насколько я знаю обстоит немного сложнее.
Есть целая теория насчёт того, что человеческое ухо не воспринимает частоты A, если амплитуда частоты B больше на N (существуют таблицы). Такие значения можно сажать на ноль. в итоге получим много нулей подряд. Ещё: не вероятно, что в сигнале присутствуют ВСЕ возможные частоты, которые воспринимает человеческое ухо. За счёт этого нам становатся не нужны все биты значений оригинального сигнала. Надеюсь это хоть сколько нибудь поможет. К сожалению давно уже это было, когда с сжатием разбираться заставляли |
|||
|
||||
| dwr_budr |
|
|||
|
Unregistered |
Сергей спасибо!
В мп3 они насколько я знаю именно так и делают.. это кацца masking нзывается! (только они не по всему спектру сразу смотрят а более детально по 32м диапазонам если не ошибаюсь) По поводу того что это сожнее.. я ни на миг не сомневаюсь! Нужно ж по идее понимать где эти частоты во времени находятся что бы сказать происходит ли этот эффект скрытия или нет! %) Товарисчи! Еще комментарии будут? Как закодю |
|||
|
||||
| podval |
|
||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Нужно! И еще рекомендую зарегистрироваться на форуме, появятся полезные возможности. Добавлено @ 12:02
Именно работают! И кстати, не только преобразование Фурье, есть и другие целочисленные. |
||||
|
|||||
| dwr_budr |
|
|||
|
Unregistered |
2Podval
Да не вопрос зарегюсь |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Как поживает супер-кодек?
Я тут подумал.. Ты же поток разбиваешь на части-окна и анализируешь спектр окна. Тут то ИМХО маскинг применять и надо. То есть исходишь из того, что все частоты в окне имеют место одноврменно и маскируешь. Реализацию в вейвлетах не встречал, так что должно быть что то принципиально новое. Попробовать в любом случае стоит! Кстати, podval, как ты думаешь, принесёт что нибудь Zero-Tree в однодимензиональном сигнале? |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
2 sergej.z
Поживает :) Завтра преподу план проекта несу :) А через недельку начну кодить собственно! Только FFT вероятно не буду использовать. Игрался с ним и после обработки каждого интервальчика в частотном виде при склеивании на границах получались счелчки.. Как их сглаживать я не знаю (поделитесь если кто знает) Зато вычитал про MDCT (midified discrete cosine transform). В нем преобразование по своей природе мы делаем на нахлестывающихся друг на друга интервалах, и следовательно в этом факте само сглаживание и заложено! (поправьте если неправ.. лучше знать о неверном предположении заранее :) Ну а дальше буду разбивать на поддиапазоны и применять маскинг! Как частотный так и временной! (ждите в скорем времени много вопросов :) Потом квантование и что нить типа адаптивного хаффмана! (это пока такие мысли) В догонку хочется что б сам формат был фреймованный и игрался как мп3 с любогоместа.. но не думаю что я все успею до 10го июня :) PS Кстати MDCT как раз в mp3 и используется.. да и в Vorbis'е тоже если ничего не напутал читая :) |
|||
|
||||
| maxim1000 |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ни FFT, ни DCT понятия не имеют обо всем сигнале, на их вход подается просто сигнал фиксированной длины, никто не запрещает подавать на вход FFT кусочки с перекрытием
алгоритм Хаффмана оптимален, но в адаптивном случае появляется необходимость очень часто перестраивать дерево кодирования есть еще арифметическое кодирование, подстройка под изменение распределения там имеет значительно меньшую вычислительную сложность и часто достигает почти тех же результатов, что и Хаффман... вообще надо определиться с критериями обычно при разработке кодеков (а особенно супер-кодеков
достаточно сделать так, чтобы ошибка, случайно возникшая где-то всередине, достаточно быстро затухала -------------------- qqq |
||||||||
|
|||||||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
А что именно ты хочешь спросить? Только по-русски |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Как Zero tree по русски....
Существует ведь Z-Tree в вейвлет - кодирование картинки (двухдимензионального сигнала). ![]() Та же Лена ![]() Я эксперементировал с сигналами и "Haar trandformation", но ничего, Где можно было бы применить Z-Tree, не получилось. Но ведь как-то это возможно.. |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
2 maxim1000
FFT vs DMCT Я понимаю что ни FFT ни DCT не знают о сигнале! Но мне непонятен следующий аспект! В MDCT все просто. Взял 1024 выборки. С 0й по 1023ю и получил 512 частот. Дальше еще 1024 теперь с 512й... снова 512 частот. Каждый раз полноценные 512 частот. Т.е. выходная размерность всегда будет в 2 раза меньше входной! Таким образом пройдя через весь файл мы обработали 2N элементов, а в ответ получили N элементов! А как с FFT? Обсчитали 1024 выборки.. получили 1024 комплексных рузультата! Из них половина симметричная! Т.е. 512(+1) комплексных результатов! Т.е. по сути 1024 числа! И если мы будем обсчитывать в нахлест, то на 2N входных значение получим 2N выходных. Сам себе взял и увеличил объем данных которые нужно будет хранить :) Доперекрывался я называется :) Как с этим быть? Адаптивный хаффман. Я осознаю насколько это медленно постоянно обновлять дерево. Но раскодирование файла в реальном времени думаю даже тормозной адаптивный хаффман будет успевать делать. (+ overhead не нужно будет хранить) Но опять таки это пока идея. Может подойдя к фазе упаковки я осознаю, что мне будет удобнее что-нибудь другое! Спасибо за комментарий повышающий бдительность :) Поводу скорости. Самая первая версия сего супе пупер кодека будет дико медленная :) Тот же MDCT я написал в лоб. Но безусловно потом такие моменты перепишу более быстро. Ошибка. Можно тут подробнее? Просто я вижу поток битов и если будет ошибка пострадает лишь один фрейм. А что ты имеешь в виду под затуханием? |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
sergej.z
Я это понимаю Так ты хотел применить к одномерным сигналам? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Ну конечно! Ёлы палы, Чего то у меня с теминами не того PS:Я так понимаю Z-Tree подходит лишь для низкочастотных сигналов или нет? |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
кажется, я кое-чего не заметил - буквочки M в MDCT возможно, это - какой-то модифицированный метод (было бы интересно узнать - если можно, кра-а-атенькое описание) просто как-то сомнительно, чтобы из 1024 дискрет метод давал 512 чисел (или он не допускает точного восстановления)... (или использует предыдущие данные)
кодировать независимо каждый фрейм можно, но сигналы очень часто бывают периодическими (или почти периодическими) поэтому за счет зависимости между ними можно много чего выиграть особенно, если используется статистическое кодирование (например, Хаффман) идея вот в чем: если взять один фрейм вероятности будут считаться, так сказать, на общих условиях, если известен предыдущий фрейм, можно уточнить вероятности, а значит, улучшить степень сжатия Хаффмана. Проигрывание файла с середины можно рассматривать как ошибку во всех предыдущих фреймах, если кодирование фреймов независимо - это ни на что не повлияет, если используется информация с предыдущих фреймов - появится ошибка, в некоторых случаях даже если ошибка появляется, она быстро затухает - сигнал приближается к исходному -------------------- qqq |
||||
|
|||||
| podval |
|
||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Моя твоя не понимай А здесь ты что хотел сказать? Ну ладно, раз уж ты добрался до таких тонкостей, рекомендую качнуть книжку Теория и практика вейвлет-преобразования. Найдешь много интересного, в т.ч. и алгоритмы нуль-деревьев. Кстати, на том сайте много еще по вейвлетам. Из книжки:
А теперь скачивай книжку |
||||
|
|||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
2 maxim1000
Вoт по этой ссылке я собственно mdct делал http://en.wikipedia.org/wiki/Modified_disc...osine_transform Кра-а-а-тенькое описание: Прямое преобразование: 2n элементов на входе дают n элементов на выходе. Поэтому пересчет нахлестывающихся промежутков не грозит увеличением данных Обратное преобразование: n входных жлементов дают 2n выходных Однако выходные 2n элементов не равны входным (как ты и подозревал :) Поэтому нахлестывающиеся промежутки выходных 2n элементов нужно еще в добавок сложить. Тогда получаются оригинальные значения. Правда самые первые 0...n элементов не востановятся ровно как и последние mn...(m+1)n так как не с чем они не перехлестываются, но ничего нам не мешает дополнить входной сигнал чуток с обоих сторон дабы был нахлест :) А за комментарии про ошибку спасибо :) Это сообщение отредактировал(а) dwr_budr - 24.4.2004, 21:52 |
|||
|
||||
| vahitov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 26.3.2004 Репутация: нет Всего: нет |
Люди.
скажите вот что. Когда мы сделали преобразование Фурье, у нас на выходе значение амплитуд sin и cos(реальная и мнимая часть). А теперь по какой формуле производиться преобразование в парe: амплитуда у синуса и фаза. Если я не ошибаюсь, то амплитуда находится 2*sqrt(x[i]^2 + y[i]^2)/N |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Фаза = arctan(Im/Re) Амплитуда = sqrt(Re^2 + Im^2) Вроде так |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |