![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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 |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Эх, эх - печалька. Диапазончик узковат. Для нормального воспроизведения звука, нужно, как минимум 12 разрядов (но не 8, как у Вас). для "прорисовки" более высоких частот, как минимум - 14-и разрядный код.
Удачи.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Еще одна фигня мне душу гложит - на вики пишет, что формулы ДПФ и ОДПФ различаются знаком в степени экспоненты, но у меня тот знак на результат не влияет: if (b == false) arg = -2 * Math.PI * k / N; else arg = 2 * Math.PI * k / N;
В любом случае одно и то же получается. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
У меня вообще-то double - 64-разрядные числа. Вся работа с ними проводится, а поскольку конечный результат должен быть примерно таким же, как и входные данные типа short на конечное преобразование double->short узкость не влияет. Фактически я работаю с double. 8 разрядов нет нигде у меня вообще, тот же short - 16-разрядное.
Последний раз редактировалось dar3dev1l26; 11.05.2013 в 10:12. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 06.10.2011
Сообщений: 58
|
![]()
Всё, нашел ошибку, тут действительно не погрешность, опечатка в мнимой части перед ОДПФ.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |