Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2013, 23:40   #11
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
dar3dev1l26, это ведь Вы писали?
А в приведенном Вами скане фигурирует 8-32 бита в секунду, что примерно соответствует 1:48000.
Разница - ни много, ни мало - 4 порядка.
Может, здесь и ошибка?
Не думаю, почему тогда работает с массивом сгенерированным ГСЧ?
Чуть позже закину пример из другой книге и Вы всё поймете.




Последний раз редактировалось dar3dev1l26; 21.05.2013 в 11:46.
dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 00:31   #12
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию





dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 00:34   #13
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию




dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 00:45   #14
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Видите, в примере они кодируют 200 битовое сообщение в первых 1024 элементах массива аудиоданных, а остальные синхронизируют. Эта пропускная способность наверное значит не то, что в секунду можно пропустить 32 бита только по массиву, иначе они бы не стали брать 200 битовое сообщение и кодировать его в первой секунде (44100/1024=1/43 секунды даже)
dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 07:29   #15
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...приведите полностью весь документ, а не избранные кусочки, на досуге сам почитаю.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.05.2013, 11:48   #16
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...приведите полностью весь документ, а не избранные кусочки, на досуге сам почитаю.
Добавил. Теперь это полный раздел, до и после уже идут другие методы.
dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 12:33   #17
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...не помню, чтобы правка постов была доступна по прошествии такого количества времени. Приведите ссылку на оригинал.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.05.2013, 13:26   #18
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

11-12-13 сообщение - это нужная глава книги. Книга называется "Цифровая стеганография", Конахович и Пузыренко, с. 204 - 214
http://rutracker.org/forum/viewtopic.php?t=837576
dar3dev1l26 вне форума Ответить с цитированием
Старый 21.05.2013, 23:21   #19
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Я знаю где ошибка - функция БПФ. В книге пример функции БПФ из MathCad, она возвращает в два раза меньше значений, чем есть во входном массиве данных. Я же пользуюсь функцией из википедии, немного модернизировав её для того, чтобы возможно было делать обратное БПФ(я просто булевую переменную ввёл, которая меняет нужный знак в формуле внутри БПФ). Моя функция возвращает столько же значений, сколько и приняла, только некоторые как бы зеркально отображены. После каждого применения БПФ результат примерно такой:
[Pi или 0]
x
y
z
[Pi или 0]
-z
-y
-x
С массивами амплитуд и фаз тоже самое. ДУмаю проблема в том, что я не знаю как правильно написать модифицированные фазы, я пишу так(первый пример):
0
0
[+ Pi/2 или - Pi/2 (в зависимости от скрываемого бита)]
[+ Pi/2 или - Pi/2 (в зависимости от скрываемого бита)]
0
0
0
0
Пробовал также так (второй пример):
0
0
[+ Pi/2 или - Pi/2]
[+ Pi/2 или - Pi/2]
0
[- Pi/2 или + Pi/2 (зеркальное отображение)]
[- Pi/2 или _ Pi/2 (зеркальное отображение)]
0
Также пробовал на место 1 и 5 элемента ставит в различных комбинациях 0 и Pi.
Не помогает ничего. Западло в том, что числа сгенерированные ГСЧ работают и так (как в первом примере). Может проблема в том, что на 1 и 5 месте данных примеров должны стоять не 0 и Pi, а что-то другое, но я не знаю как посчитать это.
Вот моя функция БПФ:
Код:
public class FFT
    {
        /// <summary>
        /// Вычисление поворачивающего модуля e^(-i*2*PI*k/N)
        /// </summary>
        /// <param name="k"></param>
        /// <param name="N"></param>
        /// <returns></returns>
        private static Complex w(int k, int N, bool b)
        {            
            if (k % N == 0) return new Complex (1,0);
            double arg; 
            if (b == false) arg = -2 * Math.PI * k / N; 
            else arg = 2 * Math.PI * k / N;
            return new Complex(Math.Cos(arg), Math.Sin(arg));
        }
        /// <summary>
        /// Возвращает спектр сигнала
        /// </summary>
        /// <param name="x">Массив значений сигнала. Количество значений должно быть степенью 2</param>
        /// <returns>Массив со значениями спектра сигнала</returns>
        public static Complex[] fft(Complex[] x, bool b)
        {
            Complex[] X;
            int N = x.Length;
            if (N == 2)
            {
                X = new Complex[2];
                X[0] = x[0] + x[1];
                X[1] = x[0] - x[1];
            }
            else
            {
                Complex[] x_even = new Complex[N / 2];
                Complex[] x_odd = new Complex[N / 2];
                for (int i = 0; i < N / 2; i++)
                {
                    x_even[i] = x[2 * i];
                    x_odd[i] = x[2 * i + 1];
                }
                Complex[] X_even = fft(x_even,b);
                Complex[] X_odd = fft(x_odd,b);
                X = new Complex[N];
                for (int i = 0; i < N / 2; i++)
                {
                    X[i] = X_even[i] + w(i, N,b) * X_odd[i];
                    X[i + N / 2] = X_even[i] - w(i, N,b) * X_odd[i];
                }
            }
            return X;
        }
    }
dar3dev1l26 вне форума Ответить с цитированием
Старый 22.05.2013, 00:08   #20
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Я же пользуюсь функцией из википедии, немного модернизировав её для того, чтобы возможно было делать обратное БПФ(я просто булевую переменную ввёл, которая меняет нужный знак в формуле внутри БПФ). Моя функция возвращает столько же значений, сколько и приняла, только некоторые как бы зеркально отображены
внезапно - в маткаде правильная функция, а вместо вики пользуйтесь проверенными источниками, например теткой Марпл. Да, ввиду зеркальности в два раза меньше, так и должно быть.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрое преобразование Фурье. Практика использования (статья) raxp Обсуждение статей 7 26.04.2013 12:45
Быстрое преобразование Фурье: фаза Dimmak01 Помощь студентам 1 02.12.2012 23:18
Быстрое преобразование Фурье HarleyDav Помощь студентам 0 09.01.2012 08:37
обновление в блоге - Быстрое преобразование Фурье. Практика использования Pblog Обсуждение статей 0 29.11.2010 22:20
Быстрое преобразование Фурье (комментарии). brendog Общие вопросы C/C++ 2 21.07.2009 01:15