Return TRUE; // return TRUE unless you set the focus to a control



}

Void CLaba1Dlg::OnPaint()

{

If (IsIconic())

{

CPaintDC dc(this); // device context for painting

       SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

Center icon in client rectangle

       int cxIcon = GetSystemMetrics(SM_CXICON);

       int cyIcon = GetSystemMetrics(SM_CYICON);

       CRect rect;

       GetClientRect(&rect);

       int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

Draw the icon

       dc.DrawIcon(x, y, m_hIcon);

}

Else

{

       CDialog::OnPaint();

}

}

HCURSOR CLaba1Dlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

using namespace Chart;

/*

Void CLaba1Dlg::OnBnClickedButtonSetfunc()

{

CSetFuncDlg dlg;

dlg.DoModal();

chart1.GetSeriesList()->DeleteAll();

CSeries* pSer = new CSeries(dlg.m_arrX.GetData(), dlg.m_arrY.GetData(), dlg.m_nCount);

chart1.m_grid.SetDelta(SizeF(dlg.m_fDeltaX,dlg.m_fDeltaX));

chart1.GetSeriesList()->Add(pSer);

}

Void CLaba1Dlg::OnBnClickedButtonSetnoise()

{

CNoiseDlg dlg;

dlg.DoModal();

chart2.GetSeriesList()->DeleteAll();

CSeries* pSer = new CSeries(dlg.m_arrX.GetData(), dlg.m_arrY.GetData(), theApp.count);

//chart2.m_grid.SetDelta(SizeF(dlg.m_fDeltaX,dlg.m_fDeltaX));

chart2.GetSeriesList()->Add(pSer);

}

*/

Void CLaba1Dlg::OnLbnSelchangeListFunctions()

{

if(init) MakePureSignal();

}

//-----------------------------------------------------------

Inline float uniform(float lo, float hi)

{

return rand()/(float)RAND_MAX * (hi-lo) + lo;

}

float normal(float lo, float hi, float Sigma, float MathExp = 0.0f)

{

float Sum = 0.0f, R;

for(int i = 0; i<12; i++)

       Sum+=uniform(0,1);

R = ((Sum - 6)*Sigma+MathExp);

return R;

}

//-------------------------------------------------------------

Void CLaba1Dlg::MakePureSignal()

{

CString str;

UpdateData();

m_pureSignal.RemoveAll();

m_pureSignal.SetSize(m_nCount);

int i;

Switch(m_FuncList.GetCurSel())

{

case 0://"sin(x)"

       for(i=0;i<m_nCount;i++)

       {

             m_pureSignal[i].Y = sin(m_pureSignal[i].X=i*m_fStep);

       }

       break;

case 1://"sin(x)+0.5*cos(x)"

       for(i=0;i<m_nCount;i++)

       {

             m_pureSignal[i].X = i*m_fStep;

             m_pureSignal[i].Y = sin(m_pureSignal[i].X)+0.5*cos(m_pureSignal[i].X);

       }

}

for(i=0;i<m_nCount;i++)

{

       str.Format("%d",i);

       m_PointList.InsertItem(i, str);

       str.Format("%3.3f", m_pureSignal[i].X);

       m_PointList.SetItemText(i,1, str);

       str.Format("%3.3f", m_pureSignal[i].Y);

       m_PointList.SetItemText(i,2,str);

}

chart1.GetSeriesList()->DeleteAll();

CSeries* pSer = new CSeries(m_pureSignal.GetData(), m_nCount);

//chart1.m_grid.SetDelta(SizeF(m_fStep,m_fStep));

chart1.GetSeriesList()->Add(pSer);

}

Void CLaba1Dlg::OnEnChangeEditCount()

{

if(init) MakePureSignal();

}

Void CLaba1Dlg::OnEnChangeEditStep()

{

MakePureSignal();

}

Void CLaba1Dlg::MakeNoise(void)

{

int i;

UpdateData();

m_Noise.RemoveAll();

m_Noise.SetSize(m_nCount);

Switch(GetCheckedRadioButton(IDC_RADIO_NORMAL, IDC_RADIO_UNIFORM))

{

case IDC_RADIO_UNIFORM:

       for(i=0;i<m_nCount;i++)

       {

             m_Noise[i].X = m_fStep*i;

             m_Noise[i].Y = uniform(m_fLow, m_fHigh);

       }

       break;

case IDC_RADIO_NORMAL:

       for(i=0;i<m_nCount;i++)

       {

             m_Noise[i].X = m_fStep*i;

             float r;

       /* do

             {

                   r = normal(m_fLow, m_fHigh, m_fDev);

             } while(r>m_fHigh||r<m_fLow);*/

             r = normal(m_fLow, m_fHigh, m_fDev);

             if(r>m_fHigh) r = m_fHigh;

             else if(r<m_fLow) r = m_fLow;

             else ;

             m_Noise[i].Y = r;

       }

       break;

default: return;

}

chart2.GetSeriesList()->DeleteAll();

CSeries* pSer = new CSeries(m_Noise.GetData(), m_nCount);

chart2.GetSeriesList()->Add(pSer);

}

Void CLaba1Dlg::OnBnClickedRadioNormal()

{

MakeNoise();

}

Void CLaba1Dlg::OnBnClickedRadioUniform()

{

MakeNoise();

}

Void CLaba1Dlg::OnBnClickedButtonMesh()

{

m_jammedSignal.RemoveAll();

m_jammedSignal.SetSize(m_nCount);

for(int i=0;i<m_nCount;i++)

{

       m_jammedSignal[i].X = m_pureSignal[i].X;

       m_jammedSignal[i].Y = m_pureSignal[i].Y + m_Noise[i].Y;

}

     

CSeries* pSer = new CSeries(m_jammedSignal.GetData(), m_nCount);

pSer->SetColor(Gdiplus::Color::Red);

chart1.GetSeriesList()->Add(pSer);

not_filtered = true;

}

Void CLaba1Dlg::OnBnClickedButtonFilter()

{

k=0;

GetDlgItem(IDC_BUTTON_FILTER)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);

OnTimer(1);

SetTimer(1, 500, NULL);

}

Void CLaba1Dlg::OnBnClickedButtonStop()

{

KillTimer(1);

GetDlgItem(IDC_BUTTON_FILTER)->EnableWindow(TRUE);

GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);

float S=0.f;

for(int i=0;i<m_nCount;i++)

       S+=(m_Signal[i].Y - m_pureSignal[i].Y)*(m_Signal[i].Y - m_pureSignal[i].Y);

CString str;

str.Format("Отклонение: %f",S);

AfxMessageBox(str);

}

Void CLaba1Dlg::Filter()

{

If(not_filtered)

{

       m_Signal.RemoveAll();

       m_Signal.SetSize(m_nCount);

       //m_Signal.Append(m_jammedSignal);

       not_filtered=false;

}

for(int i=1;i<m_nCount;i++)

{

       m_Signal[i].X = m_fStep*i;

       m_Signal[i].Y = (m_jammedSignal[i-1].Y + m_jammedSignal[i].Y)/2;

}

m_jammedSignal.Copy(m_Signal);

for(int i=m_nCount-1;i>0;i--)

{

       m_Signal[i].X = m_fStep*i;

       m_Signal[i].Y = (m_jammedSignal[i-1].Y + m_jammedSignal[i].Y)/2;

}

m_jammedSignal.Copy(m_Signal);

/*

m_jammedSignal.Add(PointF(m_nCount*m_fStep, 0));

m_jammedSignal.Add(PointF((m_nCount+1)*m_fStep, 0));

for(int i=0;i<m_nCount;i++)

{

       m_Signal[i].X = m_fStep*i;

       m_Signal[i].Y = (m_jammedSignal[i].Y + m_jammedSignal[i+1].Y + m_jammedSignal[i+2].Y)/3;

}

m_jammedSignal.Copy(m_Signal);

*/

chart1.GetSeriesList()->DeleteAll();

CSeries* pSer = new CSeries(m_Signal.GetData(), m_nCount);

pSer->SetColor(Gdiplus::Color::Green);

chart1.GetSeriesList()->Add(pSer);

pSer = new CSeries(m_pureSignal.GetData(), m_nCount);

pSer->SetColor(Gdiplus::Color::Black);

chart1.GetSeriesList()->Add(pSer);

}


Дата добавления: 2018-08-06; просмотров: 171; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!