2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5, 6  След.
 
 Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 14:33 


09/11/10
29
Рассматривается задача сжатия данных без потерь при помощи разложения функции в ряд Фурье.
Дано: Функция, заданная в $k$ точках $x_1, x_2, x_3...x_k$: $f(x)=f_1, f_2, f_3...f_k$
Пусть, для наглядности, значения $f(x)$ будут целыми от 0 до 255. То есть для хранения $k$ значений функции потребуется $k$ байт.

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

$f(x)=\frac {a_0} 2$ +\sum\limits_{n=1}^\infty a_ncos\frac {\pi nx}k ; $a_0=\frac 2 k \int_{0}^k f(x)dx$ ; $a_n=\frac 2 k \int_{0}^k f(x)cos\frac {\pi nx}kdx$
после некоторых выкладок получим:

$a_0=\frac 2 k(f_1+f_2+f_3+...+f_k)$ $a_n=\frac 4 {\pi n}sin\frac{\pi n} {2k}(f_1cos\frac{\pi n} {2k}+f_2cos\frac{3\pi n} {2k}+f_3cos\frac{5\pi n} {2k}+...+f_kcos\frac{(2k-1)\pi n} {2k})$

К сожалению сумму $A=f_1cos\frac{\pi n} {2k}+f_2cos\frac{3\pi n} {2k}+f_3cos\frac{5\pi n} {2k}+...+f_kcos\frac{(2k-1)\pi n} {2k}$ свернуть не удалось. Разложив её в ряд Маклорена и перегруппировав получаем:

$a_n=\frac 4 {\pi n}sin\frac{\pi n} {2k}\left(f_1+f_2+f_3+...+f_k-\frac{(\frac{\pi n} {2k})^2} {2!}(f_1+3^2f_2+5^2f_3+...+(2k-1)^2f_k)+\frac{(\frac{\pi n} {2k})^4} {4!}(f_1+3^4f_2+5^4f_3+...+(2k-1)^4f_k)+...\right)$ или

$a_n=\frac 4 {\pi n}sin\frac{\pi n} {2k}\left(s_1-\frac{(\frac{\pi n} {2k})^2} {2!}s_2+\frac{(\frac{\pi n} {2k})^4} {4!}s_3+...\right)$ ну и, наконец,

$f(x)=\frac {1} k s_1 +\frac 4 \pi\sum\limits_{n=1}^\infty \frac 1 n sin\frac{\pi n} {2k}\left(s_1-\frac{(\frac{\pi n} {2k})^2} {2!}s_2+\frac{(\frac{\pi n} {2k})^4} {4!}s_3+...\right)cos\frac {\pi nx}k$

Применение формулы.
Дано $k$ значений функции(файл), например, $k=10000$
вычисляем нужное число сумм $s_i$ ,например, $i=100$. Сохраняем $s_i$ в файл-это будет архив. Когда нужно разархивировать используем последнюю формулу.

Значения функции $f$ могут быть и большими, в архиве хранится будут только $i$ сумм $s$
Придется использовать вычисления с большими числами.

В данное время пытаюсь оценить:

0. Применимо ли всё это на практике.(программу написал без Маклорена всё отлично сходится, теперь нужно с большими числами и разрядностью проверить)
1. Сколько сумм $s$ хранить в архиве при различных ОДЗ $f$
2. Какой должен быть $n$, чтобы можно было остановить процесс разархивации.

Пишите кому интересно..

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 16:41 
Заслуженный участник


04/05/09
4589
В формулах разбираться лень, поэтому возражение по идее.

Я правильно понял, что Вы утверждаете, будто этот алгоритм позволяет без потерь сжать произвольные 10000 байт в ("например") 100?

Безотносительно к алгоритму это просто невозможно. Даже в 9999 байт.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 16:59 


09/11/10
29
venco в сообщении #374043 писал(а):
В формулах разбираться лень, поэтому возражение по идее.

Я правильно понял, что Вы утверждаете, будто этот алгоритм позволяет без потерь сжать произвольные 10000 байт в ("например") 100?

Безотносительно к алгоритму это просто невозможно. Даже в 9999 байт.


Не правильно. Пока это теория.
Но я считаю, что возможно придумать формулу для эффективного, в разумных пределах сжатия, пускай и с потерей по времени. Сжать 10000 байт в 100 уж точно не получится ввиду необходимости хранения коэффициентов Фурье, которые будут довольно большими(я имею ввиду $s$).
Суть алгоритма в том, что мне удалось построить формулу "почти" не зависящую от количества входной информации.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 17:57 
Заслуженный участник


26/07/09
1559
Алматы
Чем-то похоже на дельта-компрессию. :)

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 18:28 


09/11/10
29
Circiter в сообщении #374094 писал(а):
Чем-то похоже на дельта-компрессию. :)

Нет. Это совершенно не то. Дельта-компрессия это, имхо, оператор подготовки к последующему сжатию.
PS Я защищал дипломную по сжатию данных. Был создан архиватор, с небольшим, но сжатием примерно в 1.3 раза, но на основе формулы и без зависимости от исходных данных. mp3 сжимал но за счет потерь времени.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 18:47 
Заслуженный участник


04/05/09
4589
Rino в сообщении #374120 писал(а):
Был создан архиватор, с небольшим, но сжатием примерно в 1.3 раза, но на основе формулы и без зависимости от исходных данных. mp3 сжимал но за счет потерь времени.
Зависит от mp3 файла. Mp3 с постоянным bit-rate могут содержать большое количество байтов 0xff. Не удивлюсь, если Вы нашли файл, в котором четверть таких байтов.
Принципиально невозможен архиватор без потерь, который мог бы сжимать любые данные. Если у Вас такое получилось - ищите ошибку.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 19:07 


09/11/10
29
venco в сообщении #374136 писал(а):
Rino в сообщении #374120 писал(а):
Был создан архиватор, с небольшим, но сжатием примерно в 1.3 раза, но на основе формулы и без зависимости от исходных данных. mp3 сжимал но за счет потерь времени.
Зависит от mp3 файла. Mp3 с постоянным bit-rate могут содержать большое количество байтов 0xff. Не удивлюсь, если Вы нашли файл, в котором четверть таких байтов.
Принципиально невозможен архиватор без потерь, который мог бы сжимать любые данные. Если у Вас такое получилось - ищите ошибку.

я такого и не говорил). Хотя...возьмусь утверждать, что смогу сжать любые данные больше одного килобайта...хотябы на один байт :)

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 19:21 
Заслуженный участник


04/05/09
4589
Rino в сообщении #374155 писал(а):
Хотя...возьмусь утверждать, что смогу сжать любые данные больше одного килобайта...хотябы на один байт :)
Это принципиально невозможно.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 19:30 


09/11/10
29
venco в сообщении #374165 писал(а):
Rino в сообщении #374155 писал(а):
Хотя...возьмусь утверждать, что смогу сжать любые данные больше одного килобайта...хотябы на один байт :)
Это принципиально невозможно.

А вот как раз это возможно. Когда известна структура сжимаемых данных, под неё уже можно создать сжимающий алгоритм.
Но всё таки о теории хотелось бы поговорить...

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 19:36 
Заслуженный участник


04/05/09
4589
Rino в сообщении #374177 писал(а):
venco в сообщении #374165 писал(а):
Rino в сообщении #374155 писал(а):
Хотя...возьмусь утверждать, что смогу сжать любые данные больше одного килобайта...хотябы на один байт :)
Это принципиально невозможно.

А вот как раз это возможно. Когда известна структура сжимаемых данных, под неё уже можно создать сжимающий алгоритм.
Но всё таки о теории хотелось бы поговорить...
Это как раз теория.
Вариантов входных файлов длины 1024 байт - $2^{8192}$.
Вариантов выходных файлов длины меньше 1024 байт - $\frac {2^{8192}-1}{2^8-1} < 2^{8192}$.
Соответственно, обязательно найдутся два входных файла, которым соответствуют одинаковые сжатые данные. Значит, распаковать эти данные Вы не сможете.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 19:58 


09/11/10
29
Я Вас понял. А архиваторы Вы совсем отменили?

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 20:00 
Заслуженный участник


04/05/09
4589
Rino в сообщении #374201 писал(а):
А архиваторы Вы совсем отменили?
Каким образом Вы сделали такой вывод из моих слов.

И по существу есть возражения?

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 20:14 


09/11/10
29
Здесь дело вот в чём. Байты байтами, а интерпретация того что в архиве может быть разной. Например, в архиве может быть один байт, несколько...О чем они Вам расскажут? Да ни о чём. Они расскажут только разработчику.
Для одного разработчика этот байт будет означать Войну и мир. Для другого всю эпопею Звёздных войн. Аналогию понимаете? Одинаковые архивы Могут привести к разным данным, при наличии соответствующих программ-алгоритмов.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 20:15 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Суть в том, что любая конкретная программа-алгоритм некоторые файлы сжимает, а некоторые увеличивает. И от этого никуда не уйти.

 Профиль  
                  
 
 Re: Сжатие данных без потерь при помощи ряда Фурье
Сообщение12.11.2010, 20:23 


09/11/10
29
Xaositect в сообщении #374212 писал(а):
Суть в том, что любая конкретная программа-алгоритм некоторые файлы сжимает, а некоторые увеличивает. И от этого никуда не уйти.

А я что говорю противное? Я придумал новый алгоритм прошу его оценить, прочитайте хотя бы , написал доступно, вроде)...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 76 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group