C 实现BPSK信号的调制解调过程课题设计报告DOC 下载本文

{ if(*(base_data+i)!=*(demod_data+i)) num_of_err++; } } else { for (i=0;i

return num_of_err/(1.0*num_of_base); }

(三) 输入输出模块

◆数据输入模块

void CCommSys0713Dlg::OnBnClickedStart() {

// TODO: 在此添加控件通知处理程序代码

//调制解调 CBPSK bpsk; int i;

CString s1,s2,s3,s4; UpdateData(true);

s1 = m_value11.GetString(); s2 = m_value12.GetString(); s3 = m_value13.GetString(); s4 = m_value14.GetString(); int a1 = _tstoi(s1); int a2 = _tstoi(s2); int a3 = _tstoi(s3); int a4 = _tstoi(s4);

i = bpsk.BPSK_ModDemod(a1, a2, a3, a4);

MessageBox(\仿真完成\温馨提示\

//OnOK(); }

◆数据读取模块

float* CTools::getDataf(CString sFilename,long length) {

float* fpointer;

CFile inf(sFilename,CFile::modeRead);

if (!inf)

return NULL;

if (length<=0)//判断长度正确与否 return NULL;

fpointer=(float *) malloc(length*sizeof(float));

if (!fpointer)

return NULL;

inf.Read(fpointer,length*sizeof(float));

inf.Close();

return fpointer; }

◆数据输出模块

void CTools::putData(float *outdata, CString out_put_filename, {

if (!outdata) { return; }

CFile outf(out_put_filename, CFile::modeCreate|CFile::modeWrite); if (!outf) { return; }

outf.Write(outdata, length*sizeof(float));

long length) outf.Close(); }

◆绘图模块:

OnPaint();

void ModeData::OnPaint() {

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

int i;

int* iModData;//基带数据

long nPointlength = 0;//绘制点长度

CTools tTool;//工具类

/************************** 读取文件长度 ******************/

CFile inf(FILE_BASE_DATAPUT, CFile::modeRead);

nPointlength=inf.GetLength()/sizeof(float);//获取文件长度

inf.Close();

if (nPointlength > 1000) { nPointlength =1000; }

/**********************************************************/

//读取文件数据

iModData=tTool.getData(FILE_BASE_DATAPUT,nPointlength);

//求出最大值

float fmaxModData = 0;

for (i = 1; i < nPointlength ; i++ ) { if (fmaxModData < *(iModData+i)) fmaxModData = *(iModData+i); } //

// for (i = 1; i < nPointlength ; i++ )

// { // // *(iModData+i) = *(iModData+i)-500; // } //

//CClientDC dc(this); CRect rect; int m_Low=0;

int m_High=nPointlength;

if(m_High>10000)m_High=10000; // int m_Low1=-1; // int m_High1=1;

int m_High1=fmaxModData; int m_Low1=-m_High1;

CString str;

int m_left,m_top,m_right,m_bottom;

int m_Interval=(m_High - m_Low)/10;

//int m_Interval1=(m_High1 - m_Low1)/10; int m_Interval1=(m_High1 - m_Low1)/2;//修改 if (m_Interval < 1) m_Interval = 1; if (m_Interval1 < 1) m_Interval1 = 1;

GetClientRect(&rect); dc.Rectangle(&rect); /*m_left = rect.Width()/8; m_top = rect.top+10; m_right = rect.right-50;

m_bottom = rect.bottom-30;*/ m_left = rect.Width()/8; m_top = rect.top+20; m_right = rect.right-50;//

m_bottom = rect.bottom/2;//修改

int m_IntervalPan = (m_right - m_left)/10;

if (m_IntervalPan < 1 ) m_IntervalPan =1;

int m_IntervalPan1 = ( m_bottom-m_top)/2;

if (m_IntervalPan < 1 ) m_IntervalPan1 =1;

//绘制数据,使用蓝色画笔 CPen myPen;

myPen.CreatePen(PS_SOLID,0,RGB(0,0,255)); dc.SelectObject(&myPen);

dc.MoveTo(m_left+m_IntervalPan/

m_Interval,m_bottom-iModData[1]*m_IntervalPan1/m_Interval1);//起点

for(i=2;i

m_Interval,m_bottom-iModData[i]*m_IntervalPan1/m_Interval1);

}

myPen.DeleteObject(); free(iModData);

//将画笔颜色改为黑色

myPen.CreatePen(PS_SOLID,0,RGB(0,0,0)); dc.SelectObject(&myPen);

//绘制坐标轴

/*dc.MoveTo(m_left,m_top); dc.LineTo(m_left,m_bottom);

dc.LineTo(m_right+20,m_bottom); dc.MoveTo(m_left,m_bottom);

dc.LineTo(m_left,m_bottom+150);*/

//dc.MoveTo(m_left,m_top+70); //dc.LineTo(m_left,m_bottom);

//dc.LineTo(m_right+40,m_bottom);

dc.MoveTo(m_left,m_top+20); dc.LineTo(m_left,m_bottom);

dc.LineTo(m_right+20,m_bottom); dc.MoveTo(m_left,m_bottom); dc.LineTo(m_left,m_bottom+100);

//绘制X轴

for(i=1;i<=10;i++) {