Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2012, 01:37
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию Значения случайной величины, интервалы

Здравствуйте. Вот уже несколько дней ломаю голову над поставленной задачей. В общем: есть значения случайной величины - сэмплы из wav файла. Надо подсчитывать кол-во значений случайной величины, которые попадают в j-ый интервал (N[j]).
Nj - абсолютная частота для j-го интервала;
j - номер интервала, j меняется от 1 до m;
m - кол-во интервалов;
Считается m так:
Код:
m:=trunc(3.3*log10(NumSamples)+1);
delX - длина интервала m (кол NumSamples, которые попали в m)
Считается delX так:
Код:
delX:=NumSamples / m;
То есть это все семплы разбились на интервалы, например NumSamples=1079, а m=11, delX=98. Получается 98*11 = 1078.
NumSamples - кол-во значений случайной величины;
С этим все ясно.
Вернемся к задаче.. (выделена красным)
Для этого надо создать цикл по i , которое изменять от 1 до NumSamples. В цикле проверять, в какой интервал попало i -е значение и при этом изменять соответствующий счетчик - абсолютную частоту.
Вот такой у меня цикл для всех операций с сэмплами:
Код:
   for I := 1 to NumSamples do
      begin
        for J := 1 to WavInfo.WaveFormat.nChannels do        // так как бывает 2 канала. 
           begin
////////////////////////Здесь все происходит
           end;
      end;
Вот формула: (обведена красным)

Но пока Yj отложим на потом.
И на этом я застрял. Не знаю как это все осмыслить и как должно считаться. Как найти Nj??? Еще добавлю, что Nj по количеству должно быть столько же, сколько и m. Пока все. Надеюсь на вашу помощь. Заранее благодарен! Для меня это очень важно..
Ответить с цитированием
  #2  
Старый 14.12.2012, 13:15
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
В общем: есть значения случайной величины - сэмплы из wav файла. Надо подсчитывать кол-во значений случайной величины, которые попадают в j-ый интервал (N[j]).
Написано очень много, единственно только не написано по какому критерию необходимо разбрасывать сэмплы по интервалам.
Цитата:
Сообщение от Dmitry_DM
То есть это все семплы разбились на интервалы, например NumSamples=1079, а m=11, delX=98. Получается 98*11 = 1078.
А что с 1079-ым сэмплом? Он не учитывается?
Ответить с цитированием
  #3  
Старый 14.12.2012, 18:35
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Написано очень много, единственно только не написано по какому критерию необходимо разбрасывать сэмплы по интервалам.
Да вот это я не понимаю.. Мне кажется просто по-порядку, как идут в файле.
Можно как-то сделать пример и посмотреть что вышло? И еще - Nj должны быть ТОЛЬКО положительного значения. И их кол-во равняться кол m столбиков.
Цитата:
Сообщение от poli-smen
А что с 1079-ым сэмплом? Он не учитывается?
Это я сам не знаю. Всегда в первом m интервале на 1 семпл меньше, чем в остальных.
Ниже мой юнит, весь проект нету смысла выкладывать.
Вложения
Тип файла: rar Unit1.rar (5.6 Кбайт, 1 просмотров)
Ответить с цитированием
  #4  
Старый 14.12.2012, 20:20
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Да вот это я не понимаю..
Так как же можно решать задачу, если не известно её условие? (не метод решения, а именно условие)
Цитата:
Сообщение от Dmitry_DM
Мне кажется просто по-порядку, как идут в файле.
Ну тогда к примеру для случая NumSamples=1079 получим, что в нулевой интервал попадают сэмплы с 0 по 97, в первый интервал сэмплы с 98 по 195, во второй интервал сэмплы с 196 по 293 и т.д. И если подсчитывать кол-во значений случайной величины, которые попадают в j-ый интервал (N[j]), то получим что в нулевом интервале будет 98 сэмплов (т.е. N[0]=98) и в первом интервале будет 98 сэмплов (т.е. N[1]=98) и во втором интервале будет 98 сэмплов (т.е. N[2]=98) и т.д.
Ответить с цитированием
  #5  
Старый 14.12.2012, 23:41
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Так как же можно решать задачу, если не известно её условие? (не метод решения, а именно условие)
Ну тогда к примеру для случая NumSamples=1079 получим, что в нулевой интервал попадают сэмплы с 0 по 97, в первый интервал сэмплы с 98 по 195, во второй интервал сэмплы с 196 по 293 и т.д. И если подсчитывать кол-во значений случайной величины, которые попадают в j-ый интервал (N[j]), то получим что в нулевом интервале будет 98 сэмплов (т.е. N[0]=98) и в первом интервале будет 98 сэмплов (т.е. N[1]=98) и во втором интервале будет 98 сэмплов (т.е. N[2]=98) и т.д.
Да в том то и дело, что условие точно так и не стало мне понятно.. Вот я и спросил, есть ли какие-то варианты подсчетов.. А 98(данный пример) это дельта Х(delX). Это длина одного столбца. Как еще можно что-нибудь сделать, при этом использовать цикл, и что бы значения были разными и маленькими, потому что для построения гистограммы нужно откладывать границы (это по X). Левая граница первого интервала - это минимальное значение случайной величины, когда сделать нормировку(то есть разделить мин и макс на макс амплитуду) (оно всегда в районе (-1)) , правая граница первого интервала - это минимальное значение случайной величины плюс длина интервала m, m=3,3log*NumSamples+1, где NumSamples - кол-во значений случайной величины. Таким образом все столбики, (при NumSamples=1079 их 11) должны по Х откладываться в диапазоне от -1 до 1. Из этого выплывает, что в -1 до 1 не могут влезть столбики, шириной 98. Может произвести нормировку всех сэмплов? (поделить их в цикле на макс ампдитуду). Я так подумал, потому что на самом первом графике, на рис., было -128 + 128, а потом зачеркнулось и поставилось -1 +1. И логично предположить, что Y тоже не будут огромными. Гистограмма должна получится, как на прикрепленном мною рисунке, чуть выше формулы в прямоугольнике. Так же с той картинки видно, что 1<=j<=m. Значит j и m это разные значения. И еще видно, что один столбец выше, другой - ниже. Не все одинаковые. Это все что известно.. Вот так я ломаю голову уже долго..
Ответить с цитированием
  #6  
Старый 15.12.2012, 20:23
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Ну что, poli-smen, есть идеи?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025