![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Пытаюсь спрятать в фазовую область аудиофайла информацию, всё делаю по книге:
![]() Всё сделал, должно работать как часы, но вот на практике работает только частично. Во-первых денные зеркально дублируются - сначала идут нужные данные, потом столько же ненужных зеркально отраженных, но это не страшно, можно поделить контейнер на 2 и не читать их. Вторая проблема хуже - если надо спрятать маленькое сообщение (до 64 символов) то всё работает, если больше - начинается искажение, массив фаз не такой, каким должен быть (как будто погрешность появляется). Проиллюстрирую на примере. Случай 1 - прячу сообщение "Hello", на выходе получаю фазы: [0] -0.79 0.785 -0.784 -0.784 0.786 -0.785 -0.786 -0.78 [1] -0.786 0.786 0.785 -0.786 -0.785 0.784 -0.789 0.787 [2] -0.788 0.785 0.785 -0.785 0.786 0.786 -0.786 -0.784 [3] -0.786 0.785 0.784 -0.785 0.786 0.786 -0.786 -0.784 [4] -0.785 0.8 0.762 -0.791 0.805 0.806 0.819 0.757 [5] -0.039 -0.064 0.007 -0.001 -0.093 0.007 -0.025 0.04 [6] -0.064 0.162 0.063 0.021 -0.03 -0.226 -0.138 -0.026 [7] 0.13 -0.046 -0.36 -0.033 -0.104 0.081 0.154 0.038 ======== Ненужные биты отсеиваются так - всё что больше П/6 и меньше -П/6 - нужные данные. В данном случае +0.7 - соответствует биту 1, а -0.7 - биту 0, получаем: [0]~01001000 [1]~01100101 [2]~01101100 [3]~01101100 [4]~01101111 [5]~10101010 [6]~10010001 [7]~01110110 ======== Переводим в строку: Helloªv Всё работает верно - излишок не страшен, главное сообщение я получаю полностью. Когда надо закодировать больше символов появляется "погрешность", в начале идут цифры типа -0.79, 0.785 и т д, но потом появляются абракадабры типа -0.563, -0.027, чем больше букв кодируем - бем больше искажение, иногда цифры переваливают за 0 и МЕНЯЮТ знак. Тогда чем больше сообщение - тем меньше бит я смогу расшифровать. Подскажите кто разбирается в дискретном преобразовании Фурье что может быть не так, откуда искажение?Я всё что мог уже перепроверил, два дня страдаю, я всё правильно по формулам делаю, ДПФ отдельно тоже работает (без модификации фазы). Последний раз редактировалось dar3dev1l26; 18.05.2013 в 18:55. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Чудес не бывает - сколько бит Вы пытаетесь впихнуть на Кбайт звукового файла?
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Соотношение скрываемая информация:аудио данные - 1:4. То есть на 16 бит скрываемой информации приходится 64 единицы аудио данных. Это 2^8-битовое целое для стерео или 2^16-битовое целое для моно (wav). По-моему достаточно, на слух не слышно разницы.
Я понимаю что чудес не бывает, я всё уже перепроверил 100 раз, всё по отдельности работает, я думаю в книге просто не указано это отклонение, может быть оно так и должно быть... Если бы была формула как посчитать это оклонение, может быть бы получилось. Последний раз редактировалось dar3dev1l26; 18.05.2013 в 21:07. |
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Сокращение объема аудиоданных на 20% не может не сказаться на качестве звука. Не заметить этого можно только, если прослушиваешь запись через компьютерные пластмассовые колонки ценой $20. В алгоритме не разбирался, но мне кажется, если есть желание добиться результата, соотношение нужно радикально поменять, чтобы на скрытые денные приходилось менее 1% (и, соответственно, сокращение объема звуковых данных не превышало этого самого 1%). Цитата:
Разбивать скрываемую информацию на небольшие фрагменты и каждый из этих фрагментов размещать независимо в небольшом отрезке звукового файла. |
||
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Вы не поняли, я меняю не сами аудиоданные на +\- П/2, а фазу. Я применяю БПФ к массиву аудиоданных, разбиваю его на массив фаз и амплитуд, меняю фазы где мне нужно, синхронизирую с фазами других кусков(в которых нет скрываемых данных), потом из старого массива амплитуд и модифицированного масива фаз по формуле получаю другой массив, применяю обратное БПФ и получаю массив, который лишь немного отличается от входного. Поэтому не слышно искажений.
Я уже думал над тем, чтобы БПФ применять на меньшие кусочки и несколько раз встраивать информацию, я проверил например - БПФ(1,2,3,4) не равняется БПФ(1,2) + БПФ(3,4), в результате если так поступить, то массивы фаз будут разными и я не знаю как синхронизировать их всех в одном аудиофайле - вот тогда будут слышны помехи. То есть результат БПФ зависит от размера массива. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Мне кажется, проблемы возникают на самом раннем этапе:
фаза - это часть аудиоданных, а не что-то внешнее и лишнее. Изменяя фазу, Вы искажаете звук. Разбираться в алгоритме, честно говоря, нет никакого желания, но если бы передо мной стояла задача аналогичная Вашей, то мною бы алгоритм, искажающий аудиоданные на 20% был бы отвергнут только по этому признаку. Судя по Ващим сообщениям, Вы тоже не особо пытались разобраться в алгоритме, используя лишь "формулы" без понимания, как эти формулы получены и в каких условиях ими можно пользоваться. А это значит, что возможен целый ряд "подводных камней", начиная от ошибок в формулах или неверного их применения, и заканчивая тем, что разработчик алгоритма изначально вольно или невольно вводит читателя в заблуждение относительно свойств алгоритма. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Нету 20% искажений, я же писал выше. Эти 20 процентов вносятся в фазу заукового отсчета, фаза может быть 0 .. 2*Пи, как у синуса или косинуса, потом остальные данные синхронизируются.
В том-то и дело что всё сделано как надо, но на практике не работает. Думал кто-то может подсказать почему ДПФ для одинаковых закодированных данных в масиве фаз (+\- Пи/2) возвращает не одинаковые (примерно) значения. Погрешность должна быть маленькой, а она огромная. Я на погрешность никак не могу повлиять, на нее влияют как я понял только погрешности компьютерных рассчетов. В чистой математике никакой погрешности бы небыло. Я думаю дело в том, что у меня аудиоданные типа short (2^16 битовое целое), думаю если бы это было, к примеру 2^8 битовое целое таких погрешностей бы небыло. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
И да, еще одно - я ОСОБО пытался разобраться, несколько дней только и делаю, что исследую каким образом можно повлиять на погрешность. Я просто уже не знаю что делать.
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...погрешность идет хотя бы уже от того, что вы делаете последовательность прямого и обратного преобразования Фурье. Количество точек, а значит получаемых гармоник и восстановленных отсчетов от количества исходных отличается (минимум в два раза меньше). Даже, если вы и с точностью до герца считаете.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Вот это полезное сообщение. Я использую функцию БПФ с википедии (для с#), у меня после преобразований размер массива не меняется, но зеркально дублируются данные внутри него. Я их просто отсекаю когда ищу нужную мне информацию. Можете пожалуйста объяснить почему БПФ должна размер 1:2 иметь и может ли быть моя проблема в том, что у меня эта функция неправильно работает изза того, что возвращает такое же число значений?
Вот моя функция: Код:
Я проверял прямое и обратное преобразование, например если я создаю массив {1,2,3,4}(я и большие создавал), то после прямого и обратного преобразования получал тот же массив ({1,2,3,4}). Я думаю всё работает правильно. Последний раз редактировалось dar3dev1l26; 19.05.2013 в 19:27. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Колонизация бассеина Ангары и всего Дальнего Востока - печальная перспектива к 2020 гому | Virtson | Свободное общение | 2 | 17.03.2011 01:51 |
Конвертация аудиофайлов WAV -> WAV | namestnik | Помощь студентам | 2 | 27.05.2009 23:05 |
Кодирование | asil | Помощь студентам | 1 | 02.05.2009 20:48 |
Кодирование | Mss_Smith | Помощь студентам | 3 | 17.04.2007 14:46 |