void CMainFrame::ProcessingPAM() { //m_length_wave -> длина волны //m_distance_layer -> расстояние между слоями //m_apertura ->размер аппертуры CDialogInfo* DialogInfo = new CDialogInfo(NULL); DialogInfo->Create(IDD_INFO,NULL); LLayer=m_length_wave; DLayer=m_apertura; CSpectrumFrameLayers *m_image; CSpectrumFrameLayers *m_spectr; int i, j, k, Flag = 0; double a, u, v, fi, ph; int ImageSize=m_iDem_fasa; double step = 222./ImageSize; struct Complex z1, z2; char str[300]; // массив изображения BYTE *Image_R =new BYTE[ImageSize*ImageSize]; // спектр конечной реализации struct Complex *R=new struct Complex[ImageSize*ImageSize]; // массив ЧХ struct Complex *W=new struct Complex[ImageSize*ImageSize]; // временный комплексный массив struct Complex *TempComp=new struct Complex[ImageSize*ImageSize]; for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { R[i*ImageSize+j].re=1; R[i*ImageSize+j].re=0; Image_R[i*ImageSize+j] = 1; } } //вывод коментария sprintf(str,"Погодтовка частотной характеристики"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка частотной характеристики"); DialogInfo->UpdateData(FALSE); //подготовка частотной характеристики a = (M_PI*m_length_wave*m_distance_layer*(-1))/(m_apertura*m_apertura); for(i=0; i<ImageSize; i++) { if (i<(int)ImageSize/2) u = i*i; else u = (ImageSize-i)*(ImageSize-i); for(j=0; j<ImageSize; j++) { if(j<(int)ImageSize/2) v = j*j; else v = (ImageSize-j)*(ImageSize-j); fi = a*(u+v); cexp(fi, W[i*ImageSize+j]); } } //------------------------------------------------------------------------ // Начало реализации "слоевого" метода //------------------------------------------------------------------------ //PntLayer количество слоев for(k=0; k<PntLayer; k++) { sprintf(str,"Идет расчет слоя #%d из %d",k+1,PntLayer); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Идет расчет слоя #%d из %d",k+1,PntLayer); DialogInfo->UpdateData(FALSE); //DifPhaseModul глубина фазовой модуляции m_fasa->ReModeling(m_iDem_fasa,m_type_fasa,m_cd_fasa,0); m_ampl->ReModeling(m_iDem_ampl,m_type_ampl,m_cd_ampl,0); ph = 2.*M_PI*DifPhaseModul/(double)ImageSize; for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { fi = (m_fasa->m_bArroy[i*ImageSize+j])*ph; z1.re =(float)(m_ampl->m_bArroy[i*ImageSize+j]*cos(fi)/(float)ImageSize); z1.im = (float)(m_ampl->m_bArroy[i*ImageSize+j]*sin(fi)/(float)ImageSize); z2 = R[i*ImageSize+j]; cmul(z1, z2, R[i*ImageSize+j]); TempComp[i*ImageSize+j] = R[i*ImageSize+j]; } } //преобразование фурье 1-ое Fft_forward(TempComp); // Умножение на частотную характеристику свободного пространства if (k != PntLayer-1) { for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { cmul(TempComp[i*ImageSize+j], W[i*ImageSize+j], z1); TempComp[i*ImageSize+j] = z1; } } } else { for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { z2 = TempComp[i*ImageSize+j]; cmul(TempComp[i*ImageSize+j], W[i*ImageSize+j], z1); TempComp[i*ImageSize+j] = z1; W[i*ImageSize+j] = z2; } } sprintf(str,"Спектр изображения:"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка cпектра изображения."); DialogInfo->UpdateData(FALSE); m_spectr = new CSpectrumFrameLayers(m_iDem_ampl,TempComp); m_spectr->m_apertura=m_apertura; m_spectr->m_length_wave=m_length_wave; m_spectr->GetOptimumCoefficient(); m_spectr->m_fPos_Const*=100000; m_spectr->ScaleView(); m_spectr->m_type_spectr=SPECTR; m_spectr->m_type_plant=PAM; sprintf(str,"Спектр изображения [%dx%d]",m_iDem_ampl,m_iDem_ampl); if (!m_spectr->Create(NULL,_TEXT(str),0, rectDefault, NULL)) return; m_spectr->MoveWindow(120,120,10000,10000); } // Обратное преобразование Фурье Fft_back(TempComp); } sprintf(str,"Изображение:"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка изображения."); DialogInfo->UpdateData(FALSE); m_image = new CSpectrumFrameLayers(m_iDem_ampl,TempComp); m_image->Kvadrant=0; m_image->m_fPos_Const=0.00000000001; m_image->ScaleView(); m_image->m_type_spectr=IMAGE; sprintf(str,"Изображение [%dx%d]",m_iDem_ampl,m_iDem_ampl); if (!m_image->Create(NULL,_TEXT(str),0, rectDefault, NULL)) return; DialogInfo->DestroyWindow(); m_image->MoveWindow(80,80,10000,10000); m_spectr->BringWindowToTop(); delete[] W; delete[] R; delete[] TempComp; }