![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте! Столкнулся с проблемой. Надо вычислить асимметрию и эксцесс по сэмплам wav файла. Я точно не знаю правильно ли оно считается, потому что возникли непонятки с сэмплами и Max Amplitude. Я вывожу все сэмплы в txt файл и вижу, например следующее:
Код:
Вот код этого всего дела. P.S Выводы в memo сделал просто для наглядности. Код:
Последний раз редактировалось Dmitry_DM, 22.09.2012 в 17:25. |
#2
|
|||
|
|||
![]() Ну помогите мне, пожалуйста! Мне срочно надо, чтобы двигаться дальше.
|
#3
|
||||||
|
||||||
![]() Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (23.09.2012)
|
#4
|
|||
|
|||
![]() Цитата:
![]() |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
|||
|
|||
![]() Цитата:
Код:
4294966664 4294967086 4294967113 Как их убрать? И еще одно: в txt файле с выведенными всеми сэмплами, нету сэмпла, равному MaxAmplitude. Хотя раньше (С Int64) такое число находилось. Неувязка получается.. А еще я заметил, что если в файле число байт для предоставления одного отчета: 4, а не 2, то сэмплов в txt файле в 2 раза больше, чем указано в NumSamples. Еще одна неувязка.. Последний раз редактировалось Dmitry_DM, 23.09.2012 в 22:25. |
#7
|
||||
|
||||
![]() Цитата:
|
#8
|
|||
|
|||
![]() Цитата:
Я попробовал повысить его до LongInt. Теперь все нормально (с величиной чисел). Вот только я не знаю:числа у меня вывелись <0 и >0. Это логично. Но по-моему не логично то, что на графике столбик-сэмпл выше оси OX соответствует отрицательному числу в txt файле. Как бы наоборот получается... P.S Всегда MaxAmplitude положительное, это из-за: Код:
И еще все же мне непонятно так должно быть или нет: когда в wav BlockAling 4, а не 2, то сэмплов выводиться ровно в 2 раза больше. Последний раз редактировалось Dmitry_DM, 24.09.2012 в 11:56. |
#9
|
||||||
|
||||||
![]() Цитата:
Цитата:
![]() Чтобы перевернуть ординату в правильное положение нужно просто вычесть её из высоты (или из другой константы). Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (24.09.2012)
|
#10
|
|||
|
|||
![]() Цитата:
Цитата:
Или это так надо, исходя из того, что используется 2 канала? Последний раз редактировалось Dmitry_DM, 24.09.2012 в 14:17. |
#11
|
||||||
|
||||||
![]() Цитата:
Код:
Цитата:
Код:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (24.09.2012)
|
#12
|
|||||
|
|||||
![]() Цитата:
|
#13
|
|||||||||
|
|||||||||
![]() Цитата:
Ну ладно. Теперь комментарии по коду: Цитата:
Во-вторых зачем в цикле складывать числа от 1 до NumSamples если для этого есть формула суммы арифметической прогрессии: ![]() Код:
А следующие 4 цикла можно объединить в один: Код:
![]() Например при NumSamples:=12345 и твой и мой код выводят: Цитата:
|
#14
|
||||||||||||
|
||||||||||||
![]() Ну почему же Sample не участвует в вычислениях? Ведь именно это число самое главное, к тому же подтверждением этих сэмплов есть вывод их в txt. Они там благополучно присутствуют.
На счет инициализации s: Что, просто поставить в начале всего процесса S:=0; ? И еще: почему мы заменяем Код:
Код:
Если по формуле надо к S прибавлять X[i]. В моем случае это Sample. На счет объединения я согласен, так лучше. И все же меня обеспокоило, что вы думаете, что Sample не участвуют в вычислениях. А ведь должны... Кстати я попробовал на своем файле ваш и мой коды и результаты отличаются. Вот мой код: Код:
Код:
Код:
то вообще будет так: Код:
Последний раз редактировалось Dmitry_DM, 25.09.2012 в 21:41. |
#15
|
|||||||||||||||||||
|
|||||||||||||||||||
![]() Цитата:
Цитата:
Цитата:
Цитата:
Код:
Код:
Код:
Цитата:
![]() Смотри во вложении тестовый пример. Там левая кнопка выводит в левый Memo результат работы твоего кода, а правая кнопка выводит в правый Memo результат работы моего кода. Результаты не должны отличаться. Для вычислений открывать wav-файл не нужно, достаточно ввести в поле ввода значение NumSamples (количество сэмплов), которые ты можешь получить открыв wav-файл в своей программе, ну и заодно убедиться, что результаты работы в твоей программе и в этом тестовом примере не отличаются и не зависят от самого wav-файла. И ещё обрати внимание, что у тебя там происходит переполнение: если сложить все числа от 1 до 398592 (т.е. 1+2+3+...+398591+398592), то должно получиться огромное число 79437990528, а у тебя показывает всего лишь: Цитата:
Цитата:
![]() |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (26.09.2012)
|