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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 09:19   #1
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
Стрелка Как справиться с погрешностью?

Работаю с 16-bit'ным целым типом short в c# - это аудиоданные из wav-файла(моно), я их перевожу в комплексные числа типа (double, double) и работаю дальше (возвожу в степень, ищу корни, синусы, тангенсы и так дальше), потом перевожу назад в целые по окончании всех действий. Эти целые числа(по математическим формулам) должны совпадать, ну или почти совпадать, а у меня очень печальное качество на выходе, прямо сразу слышно репение, если прослушать. Я сравнил целые данные на входе и на выходе и погрешность оказалось довольно большая, я думаю это изза того, что большие числа возвожу в степени(short -32768 ... 32767), перемножаю и т д.Работаю с ДПФ. Подскажите пожалуйста как уменьшить погрешности, ато не камильфо вообще. Я еще даже не начинал модифицировать эти данные, просто по формулам ДПФ туда-назад преобразовался =( Вот печальный пример нескольки чисел (не выбирал, это первые 11 чисел):
301 => 153
-351 => -192
-387 => -45
124 => 497
-123 => 248
-882 => -420
-829 => -279
-688 => -297
-880 => -644
-814 => -489
-1020 => -548
dar3dev1l26 вне форума Ответить с цитированием
Старый 11.05.2013, 09:33   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Эх, эх - печалька. Диапазончик узковат. Для нормального воспроизведения звука, нужно, как минимум 12 разрядов (но не 8, как у Вас). для "прорисовки" более высоких частот, как минимум - 14-и разрядный код.
Удачи.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.05.2013, 09:51   #3
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Еще одна фигня мне душу гложит - на вики пишет, что формулы ДПФ и ОДПФ различаются знаком в степени экспоненты, но у меня тот знак на результат не влияет: if (b == false) arg = -2 * Math.PI * k / N; else arg = 2 * Math.PI * k / N;
В любом случае одно и то же получается.
dar3dev1l26 вне форума Ответить с цитированием
Старый 11.05.2013, 10:09   #4
dar3dev1l26
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Эх, эх - печалька. Диапазончик узковат. Для нормального воспроизведения звука, нужно, как минимум 12 разрядов (но не 8, как у Вас). для "прорисовки" более высоких частот, как минимум - 14-и разрядный код.
Удачи.
У меня вообще-то double - 64-разрядные числа. Вся работа с ними проводится, а поскольку конечный результат должен быть примерно таким же, как и входные данные типа short на конечное преобразование double->short узкость не влияет. Фактически я работаю с double. 8 разрядов нет нигде у меня вообще, тот же short - 16-разрядное.

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

Всё, нашел ошибку, тут действительно не погрешность, опечатка в мнимой части перед ОДПФ.
dar3dev1l26 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++.Как справиться с задачей №4. lastditch Помощь студентам 2 17.04.2013 21:43
как справиться ? Алексей325 Помощь студентам 14 14.01.2011 15:38
Опроеделение суммы ряда с заданной погрешностью Dimon278 Помощь студентам 2 06.12.2009 16:56
QBasic. Проблема с циклом и погрешностью Clericos Помощь студентам 4 30.11.2009 18:16
задачи на накопление суммы с заданной погрешностью salmanov Общие вопросы C/C++ 2 16.12.2008 18:13