📄 vtdecodeview.cpp
字号:
csps.szRawData[0]=0;
csps.nCount10=1;
csps.nCount8=1;
csps.bAdjust_index=true;
}
else if(((csps.dTempfre2-csps.dIndexfre)>160.0)&&((csps.dTempfre2-csps.dIndexfre)<230.0))
{
m_nBuffSet=16+m_nAdjust;
csps.szRaw[0]=0;
csps.szRawData[0]=0;
csps.szRaw[1]=0;
csps.szRawData[1]=0;
csps.nCount10=2;
csps.nCount8=2;
csps.bAdjust_index=true;
}
if(m_nAdjust==16) //若导频被破坏,则跳出循环
{
m_nBuffSet=8;
csps.szRaw[0]=0;
csps.szRawData[0]=0;
csps.nCount10=1;
csps.nCount8=1;
csps.bAdjust_index=true;
}
}
}
else
{
for(m=0;m<32;m++)
{
csps.dTemp_a[m]=csps.dTemp_b[m];
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//++++解调第三步:按每次32字顺序取数据(32抽样点中包含1比特信息),解调信号++++//
while(m_bCon)
{
if(m_bVan)
{
if(m_nCount32==31)
{
m_bVan=false;
m_bCon=false;
for(i=0;i<32-m_nBuffSet;i++)
{
temp1[i]=wavedata[m_nCount32*32+m_nBuffSet+i];
}
waveInAddBuffer (hWaveIn, (PWAVEHDR) lParam, sizeof (WAVEHDR)) ;
return ;
}
else
{
for(i=0;i<32;i++)
{
csps.snTemp[i]=wavedata[m_nCount32*32+m_nBuffSet+i];
}
}
}
if(m_nCount32==32)
{
m_bCon=false;
for(i=0;i<32-m_nBuffSet;i++)
{
temp1[i]=wavedata[31*32+m_nBuffSet+i];
}
waveInAddBuffer (hWaveIn, (PWAVEHDR) lParam, sizeof (WAVEHDR)) ;
return ;
}
else if(m_nCount32==0)
{
for(i=0;i<32-m_nBuffSet;i++)
{
csps.snTemp[i]=temp1[i];
}
for(i=0;i<m_nBuffSet;i++)
{
temp2[i]=wavedata[i];
}
csps.snTemp[32-m_nBuffSet+i]=temp2[i];
}
else
{
for(i=0;i<32;i++)
{
csps.snTemp[i]=wavedata[(m_nCount32-1)*32+m_nBuffSet+i];
}
}
m_nCount32++;
for(i=0;i<32;i++)
{
csps.dFirDataIn[i]=double(csps.snTemp[i]);
csps.dFirDataOut[i]=0;
}
if(m_bFilterInitManual)
{
if(iFilterChoose==1)
csps.Filter.BandpassFilter1(csps.dFirDataIn,csps.dFirDataOut,32);
if(iFilterChoose==2)
csps.Filter.BandpassFilter2(csps.dFirDataIn,csps.dFirDataOut,32);
}
else
csps.Filter.BandpassFilter1(csps.dFirDataIn,csps.dFirDataOut,32);
for(k=0;k<514;k++)
{
if(k<32)
csps.dFftDataIn[k]=csps.dFirDataOut[k];
else
csps.dFftDataIn[k]=0;
}
csps.dSigfre=csps.RFft_512(csps.dFftDataIn,9600.0);
if((csps.dSigfre<csps.dIndexfre-100.0)||(csps.dSigfre>csps.dIndexfre+300.0))
{
csps.nCount++; //没有2FSK信号时,计数
}
if(csps.nCount==30)
{
csps.bSig_index=false; //无信号计数达到30次,须重新找2FSK导频信号
waveInAddBuffer (hWaveIn, (PWAVEHDR) lParam, sizeof (WAVEHDR)) ;
return ;
}
csps.szRaw[csps.nCount10]=csps.Conclude(csps.dSigfre,csps.dIndexfre);
csps.szRawData[csps.nCount8]=csps.Conclude(csps.dSigfre,csps.dIndexfre);
csps.nCount8++;
csps.nCount10++;
if (csps.nCount8==8)
{
csps.nCount8=0;
csps.szMess1=csps.ByteToBits(csps.szRawData);
strMess1=CString(csps.szMess1);
m_strRawData+=strMess1;
}
if(m_strRawData.GetLength()>30*MSIZE)
{
m_File1.Write(m_strRawData,m_strRawData.GetLength());
m_File1.Close();
m_strRawData.Empty();
strcpy(m_strFileName1,"d:\\2fsk\\原始数据\\");
m_Time = CTime::GetCurrentTime();
strTemp = m_Time.Format( "%Y-%m-%d %H.%M.%S" );
strcat(m_strFileName1,strTemp);
strcat(m_strFileName1,".dat");
if( !m_File1.Open( m_strFileName1, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
GetDlgItem(IDC_SAVE_RAWDATA)->SetWindowText(m_strFileName1);
}
//译码,还原报文
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
if(csps.nCount10==10)
{
if(csps.bKey) //判断报文是否结束
{
csps.nSync=0;
csps.bFindsync=csps.FindSync(csps.szRaw);
if(!csps.bFindsync) //寻找同步码“0010101011”
{
for(i=0;i<9;i++)
csps.szRaw[i]=csps.szRaw[i+1];
csps.nCount10=9;
}
else
{
csps.nCount10=0;
csps.nControl=0;
csps.nBitadjust=0;
csps.bKey=false;
csps.szMess=13;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
csps.szMess=10;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
csps.szMess=91;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
if(csps.nParthnum==1)
csps.szMess='A';
else
csps.szMess='B';
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
}
}
else
{
if((csps.szRaw[0]==1)&&(csps.szRaw[9]==0) ) //如果出现比特移位现象,丢弃一比特信息
{
csps.nBitadjust++;
csps.bKey=csps.KeyToFindSync(csps.szRaw);
csps.bFindsync=csps.FindSync(csps.szRaw);
if(csps.nBitadjust<=2)
{
csps.nCount10=0;
if(csps.bFindsync)
{
csps.nSync++;
if(csps.nSync>1) //排除信息中单个信息字符与同步码相同的情况
{
csps.nControl=0;
}
}
else
{
for(i=0;i<8;i++)
{
csps.szMess0[i]=csps.szRaw[9-i];
}
csps.szMess=csps.ByteToBits(csps.szMess0);
if(isascii(csps.szMess))
{
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
}
}
}
else
{
csps.nCount10=9;
for(i=0;i<9;i++)
{ csps.szRaw[i]=csps.szRaw[i+1];
}
csps.nBitadjust=0;
}
}
else
{
csps.nCount10=0;
csps.bKey=csps.KeyToFindSync(csps.szRaw);
csps.bFindsync=csps.FindSync(csps.szRaw);
if(csps.bFindsync)
{
csps.nSync++;
if(csps.nSync>1) //排除信息中单个信息字符与同步码相同的情况
{
csps.nControl=0;
}
else
{
for(i=0;i<8;i++)
{
csps.szMess0[i]=csps.szRaw[8-i];
}
csps.szMess=csps.ByteToBits(csps.szMess0);
if(isascii(csps.szMess))
{
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
}
}
}
else
{
csps.nSync=0;
csps.nControl++;
//打印三个重要的控制字符
if((csps.nControl==2)||(csps.nControl==4)||(csps.nControl==7))
{
for(i=0;i<8;i++)
{
csps.szMess0[i]=csps.szRaw[8-i];
}
for(i=0;i<8;i++)
{
if(i>3)
{
csps.szContr1[i]=csps.szMess0[i-4];
csps.szContr2[i]=csps.szMess0[i];
}
else
{
csps.szContr1[i]=0;
csps.szContr2[i]=0;
}
}
csps.szCon1=csps.ByteToBits(csps.szContr1);
csps.szCon1=csps.Convert(csps.szCon1);
csps.szMess=csps.szCon1;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
csps.szCon2=csps.ByteToBits(csps.szContr2);
csps.szCon2=csps.Convert(csps.szCon2);
csps.szMess=csps.szCon2;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
if(csps.nControl==7)
{
csps.szMess=93;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
csps.szMess=32;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
csps.szMess=32;
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
}
}
//打印报文
if(csps.nControl>10)
{
for(i=0;i<8;i++)
{
csps.szMess0[i]=csps.szRaw[8-i];
}
csps.szMess=csps.ByteToBits(csps.szMess0);
if(isascii(csps.szMess))
{
strMess=CString(csps.szMess);
m_strText+=strMess;
InsertChar(strMess);
}
}
}
}
if(m_strText.GetLength()>30*MSIZE)
{
m_File.Write(m_strText,m_strText.GetLength());
m_File.Close();
m_strText.Empty();
GetDlgItem(IDC_TEXT)->SetWindowText(m_strText);
strcpy(m_strFileName,"d:\\2fsk\\");
m_Time = CTime::GetCurrentTime();
strTemp = m_Time.Format( "%Y-%m-%d %H.%M.%S" );
strcat(m_strFileName,strTemp);
strcat(m_strFileName,".txt");
if( !m_File.Open( m_strFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
GetDlgItem(IDC_SAVE_FILE)->SetWindowText(m_strFileName);
}
}
}
}
}
void CVTDecodeView::OnMM_WIM_CLOSE(UINT wParam,LONG lParam)
{
waveInUnprepareHeader (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
waveInUnprepareHeader (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
GlobalUnlock(hData1);
GlobalUnlock(hData2);
GlobalUnlock(hDataBuff);
GlobalFree(hData1);
GlobalFree(hData2);
GlobalFree(hDataBuff);
if(m_bFilterInitManual)
{
csps.Filter.Filter1Free();
csps.Filter.Filter2Free();
}
else
csps.Filter.Filter1Free();
delete pWaveHdr1;
delete pWaveHdr2;
MessageBeep(MB_ICONEXCLAMATION);
AfxMessageBox("请保存好报文!!");
return ;
//释放音响数据块
//////////////////////////////////////////////////////////////////////////////////////////////////
}
void CVTDecodeView::OnSave()
{
// TODO: Add your control notification handler code here
if(!m_strText.IsEmpty())
m_File.Write(m_strText,m_strText.GetLength());
m_File.Close();
m_strText.Empty();
GetDlgItem(IDC_TEXT)->SetWindowText(m_strText);
strcpy(m_strFileName,"d:\\2fsk\\报文\\");
m_Time = CTime::GetCurrentTime();
strTemp = m_Time.Format( "%Y-%m-%d %H.%M.%S" );
strcat(m_strFileName,strTemp);
strcat(m_strFileName,".txt");
if( !m_File.Open( m_strFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
GetDlgItem(IDC_SAVE_FILE)->SetWindowText(m_strFileName);
return;
}
void CVTDecodeView::OnDestroy()
{
CFormView::OnDestroy();
// TODO: Add your message handler code here
if(m_bStop==false)
{
waveInReset(hWaveIn);
waveInClose(hWaveIn);
}
csps.Filter.Filter0Free();
m_strRawData.Empty();
m_strText.Empty();
CFormView::OnClose();
}
void CVTDecodeView::OnUpdateStop(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// pCmdUI->Enable(m_bStop);
}
void CVTDecodeView::OnSave1()
{
// TODO: Add your control notification handler code here
if(!m_strRawData.IsEmpty())
m_File1.Write(m_strRawData,m_strRawData.GetLength());
m_File1.Close();
m_strRawData.Empty();
strcpy(m_strFileName1,"d:\\2fsk\\原始数据\\");
m_Time = CTime::GetCurrentTime();
strTemp = m_Time.Format( "%Y-%m-%d %H.%M.%S" );
strcat(m_strFileName1,strTemp);
strcat(m_strFileName1,".dat");
if( !m_File1.Open( m_strFileName1, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
GetDlgItem(IDC_SAVE_RAWDATA)->SetWindowText(m_strFileName1);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -