Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Обьясните что делает код


Автор: weldpua2008 5.4.2009, 00:17
Привет Всем
Есть некая главная функция, не полностью приведена ниже. Я не пойму что должно записываться в       FileRead(FH,Q.spectr, sizeof 4*2*Q.nDSPZ); в Q.spectr. Она в класе обьявлена:  public:int   *spectr; А Q.allocate_spectr(), которая тоже ниже приведена заполняет её...
Код

void TMainForm::vOpenDSPZdata(){

     FLName=OpenMultiDialog->Files->Strings[nf];
    FH=FileOpen(FLName,fmOpenRead);
    if(FH==-1){ShowMessage("Error with FileOpen");return;}

    FSName = ExtractFileName(OpenMultiDialog->Files->Strings[nf]);
    FSName = FSName.SubString(0,FSName.Length()-4)+".dsp";
    FSName = ExtractFilePath(FLName) + FSName;

    filec = 0;
    file_razmer = FileSeek(FH,filec,2);
    FileSeek(FH,0,0);

    FileRead(FH,&Q.fh, sizeof Q.fh);
    Q.fh2dspp(66000,0,0);
    Q.allocate_spectr();

    n_vib = (file_razmer - (sizeof Q.fh))/(sizeof 4*2*Q.nDSPZ);
    int Naver;
    Naver=10;
    for(i=0;i<Naver;i++){

      FileRead(FH,Q.spectr, sizeof 4*2*Q.nDSPZ);

      Q.get_spectrAB_prop();

      SeriesShow();

    }

    Application->ProcessMessages();
    FileClose(FH);

 }
}


Q.allocate_spectr():
Код

void DSPZ::allocate_spectr(){
  spectr = new int[2*nDSPZ];
  chA = new float[nDSPZ];
  chB = new float[nDSPZ];
}



Q.get_spectrAB_prop():
Код

void DSPZ::get_spectrAB_prop(){
  for(j=0;j<nDSPZ-1;j++){
      tmp =  Float_num(spectr[2*j],1);  //if (tmp<=0) tmp = 1; tmp = 10*log10(tmp);
      if (dspp.winchA%2)   chA[nDSPZ-j-1] = tmp;
      else chA[j] = tmp;
      tmp =  Float_num(spectr[2*j+1],1); //if (tmp<=0) tmp = 1; tmp = 10*log10(tmp);
      if (dspp.winchB%2)   chB[nDSPZ-j-1] = tmp;
      else chB[j] = tmp;
  }
      ud.id = spectr[2*(nDSPZ-1)];
      spp.cntms = ud.fd.cnt;
      spp.satA  = ud.fd.sat;

      ud.id = spectr[2*(nDSPZ-1)+1];
      spp.cnt   = ud.fd.cnt;
      spp.satB  = ud.fd.sat;

      if (dspp.winchA%2)  chA[0] = chA[1];
      else   chA[nDSPZ-1] = chA[nDSPZ-2];

      if (dspp.winchB%2)  chB[0] = chB[1];
      else   chB[nDSPZ-1] = chB[nDSPZ-2];
}

Код

float Float_num(int SSAMPLE,float _Avc)
{
  float _SNrm = 4*2*1024./4294967296./_Avc; //norming
  int expn = (SSAMPLE&0x1f);            //exponent
  unsigned int mant = (SSAMPLE&0xFFFFFFC0); //mantissa
  return (float)(mant)/pow(2., expn)*_SNrm;
}


Добавлено через 4 минуты и 15 секунд
Где можно прочитать по Borland'ким функциям:
FileSeek()
FileRead()

И почему в 
Код

float Float_num(int SSAMPLE,float _Avc)

 pow(2., expn), а не  pow(2, expn)?
ЗЫ:
Я понимаю, что эти вопросы надо задать программисту, но не могу....Этот код работает smile

Автор: mes 5.4.2009, 00:27
2  - int
2. - double


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)