![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте! Пришел прогресс к моей работе по защите wav файла с помощью математической модели. Так вот: многое, что нужно сделать, проделано мною в EXEL документе. Это конечно хорошо, но! Нужно это сделать по-человечески в Delphi. Так вот: не буду долго рассказывать что и зачем нужно. Но для начала первый вопрос:
Нужно найти границы интервалов. Для этого нужно к мин амплитуде прибавить ранее найденный дельта X. Сделал в delphi это по калеченому. Как это сделать нормально.. думаю вы поймете о чем я. Внизу EXEL. Пока интересующий столбик - это A34:F47. Вот по-калеченому: Код:
For i:=1 to m do begin Gran[1]:=WavInfo.MinAmplitude+delX; Gran[2]:=Gran[1]+delX; Gran[3]:=Gran[2]+delX; Gran[4]:=Gran[3]+delX; Gran[5]:=Gran[4]+delX; Gran[6]:=Gran[5]+delX; Gran[7]:=Gran[6]+delX; Gran[8]:=Gran[7]+delX; Gran[9]:=Gran[8]+delX; Gran[10]:=Gran[9]+delX; Gran[11]:=Gran[10]+delX; Form1.Memo3.Lines.Add('Gran ' +FloatToStr(Gran[i])); end; Но нигде не известно, что интервалов 11. Их может быть сколько угодно.. Как сделать правильно, где-то в 2 строки.. Помогите.. Позже будут еще вопросы.. Кто отзовется помогать - тому нечеловеческое СПАСИБО! |
#2
|
|||
|
|||
![]() я бы сделал так..
Код:
Gran[1]:=WavInfo.MinAmplitude; Form1.Memo3.Lines.Add('Gran ' +FloatToStr(Gran[1])); For i:=2 to m do begin Gran[i]:=Gran[i-1]+delX; Form1.Memo3.Lines.Add('Gran ' +FloatToStr(Gran[i])); end; Последний раз редактировалось zibert, 26.12.2012 в 18:45. |
Этот пользователь сказал Спасибо zibert за это полезное сообщение: | ||
Dmitry_DM (26.12.2012)
|
#3
|
|||
|
|||
![]() Здравствуйте, уважаемые участники форума! Помогите мне составить 3 массива.. В ниже прикрепленном файле наведен пример обработки данных. Все массивы я сделал.. кроме последних трех. (В ячейках O, P, Q). Ниже прилагаю код уже сделанного. Прошу только грамотно сделать те 3 массива, так как они сделаны в EXCEL.
Код:
////////////////////////////////////////////////////////////////////// m:=trunc(3.3*log10(NumSamples)+1); //delX:=(WavInfo.MaxAmplitude - WavInfo.MinAmplitude) / m; delX:=((WavInfo.MaxAmplitude - WavInfo.MinAmplitude)/WavInfo.MaxAmplitude) / m; ////////////////////////////////////////////////////////////////////// Gran[1]:=WavInfo.MinAmplitude/wavinfo.MaxAmplitude; Form1.Memo3.Lines.Add('Gran[1] ' +FloatToStr(Gran[1])); For i:=2 to m+1 do begin Gran[i]:=Gran[i-1]+delX; Form1.Memo3.Lines.Add('Gran['+inttostr(i)+']' +FloatToStr(Gran[i])); end; ////////////////////////////////////////////////////////////////////// For i:=1 to m+1 do begin Ap.Cells[i,1]:=Gran[i]; ppp[i]:= Ap.Cells[i,3]; Form1.Memo3.Lines.Add('ppp['+inttostr(i)+']' +FloatToStr(ppp[i])); end; ////////////////////////////////////////////////////////////////////// for f:=1 to m do begin for I := 1 to NumSamples do for J := 1 to WavInfo.WaveFormat.nChannels do if Samp2[j,i]<Gran[f+1] then Kol[f]:=Kol[f]+1 ; Form1.Memo3.Lines.Add('Kol['+ inttostr(f) +']='+FloatToStr(Kol[f])); end; ////////////////////////////////////////////////////////////////////// Nj[1]:=(Kol[1]/delX/NumSamples); Form1.Memo3.Lines.Add('Nj[1] ' +FloatToStr(Nj[1])); for f:=2 to m do begin Nj[f]:=((Kol[f]-Kol[f-1])/delX/NumSamples); Form1.Memo3.Lines.Add('Nj['+ inttostr(f) +']='+FloatToStr(Nj[f])); end; ////////////////////////////////////////////////////////////////////// pp[1]:= kol[1]; Form1.Memo3.Lines.Add('pp[1]='+FloatToStr(pp[1])); for i:=2 to m do begin pp[i]:=(Kol[i]-Kol[i-1]); Form1.Memo3.Lines.Add('pp['+ inttostr(i) +']='+FloatToStr(pp[i])); end; ////////////////////////////////////////////////////////////////////// for i:=1 to m do begin p[i]:=(ppp[i+1]-ppp[i])*NumSamples; Form1.Memo3.Lines.Add('p['+ inttostr(i) +']='+FloatToStr(p[i])); end; ////////////////////////////////////////////////////////////////////// for i:=1 to m do begin pppp[i]:= sqr(PP[i]-p[i])/p[i]; Form1.Memo3.Lines.Add('pppp['+ inttostr(i) +']='+FloatToStr(pppp[i])); end; ////////////////////////////////////////////////////////////////// for i:=1 to m do SUMM:=summ+ pppp[i]; P.S Пример только для одного набора сэмплов, равен 2000 шт. Работать должно для любого файла так, как происходит это с массивами, которые я уже сделал. И еще вложу книгу, там на 4 ст. красивее написано, чем на рисунках. Последний раз редактировалось Dmitry_DM, 28.12.2012 в 21:40. |
#4
|
|||
|
|||
![]() Ну мне кто-то поможет? Поймите, это очень важно!
|