Привет Всем Есть некая главная функция, не полностью приведена ниже. Я не пойму что должно записываться в 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)? ЗЫ: Я понимаю, что эти вопросы надо задать программисту, но не могу....Этот код работает  |