📄 signalprocess.cpp
字号:
// SignalProcess.cpp: implementation of the CSignalProcess class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "VTDecode.h"
#include "SignalProcess.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSignalProcess::CSignalProcess()
{
nCount3=0;
nCount10=0;
nParthnum=0;
nControl=0;
nSync=0;
nBitadjust=0;
bSig_index=false;
bMess_index=false;
bAdjust_index=false;
bFindsync=false;
bKey=true;
dFftDataIn=new double[514];
dTempFftData=new double[514];
}
CSignalProcess::~CSignalProcess()
{
delete [514] dFftDataIn;
delete [514] dTempFftData;
}
char CSignalProcess::ByteToBits(char origin[]) //**把一个长度为8的字符数组转化为一个字符**//
{
unsigned char ch=0;
char mess;
int i;
for(i=0;i<8;i++)
{
ch|=origin[i];
if(i<7)
ch<<=1;
}
mess=ch;
return mess;
}
char CSignalProcess::Conclude(double x,double reference) //**将信号频域变换后的结果与参考频率比较,判断0\1信息**//
{
char mess;
if((x>reference-100.0)&&(x<=reference+95.0))
{
mess=1;
}
else if ((x>reference+95.0)&&(x<reference+292.0))
{
mess=0;
}
else
mess=1;
return mess;
}
char CSignalProcess::Convert(char a) //**将0-f的十六进制数字按打印的方式显示出来**//
{
char b;
if(a<10)
b=a+48;
else if(a>=10)
b=a+87;
return b;
}
BOOL CSignalProcess::FindSync(char input[]) //**寻找同步码:0010101011**//
{
int i,count=0;
char sync[]={0,0,1,0,1,0,1,0,1,1};
for(i=0;i<10;i++)
{
if(input[i]==sync[i])
count++;
}
if(count>8)
return TRUE;
else
return FALSE;
}
BOOL CSignalProcess::IndexConclude(double array[],int n) //**判断数组每个元素是否基本一致,误差小于20**//
{
int i,count=0;
double temp;
for(i=0;i<n-1;i++)
{
temp=array[i+1]-array[i];
if(abs(temp)<40.0)
count++;
}
if(count>n-4)
return TRUE;
else
return FALSE;
}
BOOL CSignalProcess::IndexConclude1(double array[],double indexfre,int n) //**判断数组每个元素是否与导频基本一致,误差小于20**//
{
int i,count=0;
double temp;
for(i=0;i<n;i++)
{
temp=array[i]-indexfre;
if(abs(temp)<40.0)
count++;
}
if(count>n-3)
return TRUE;
else
return FALSE;
}
BOOL CSignalProcess::KeyToFindSync(char key[]) //**如果数组十个元素中至少有9个为“1”,需重新寻找同步码**//
{
int i,count=0;
for(i=0;i<10;i++)
{
if(key[i]==1)
count++;
}
if(count>8)
return TRUE;
else
return FALSE;
}
double CSignalProcess::RFft_1024(double x[],double samplefre) //**对1026个double数据作1024长度的FFT变换**//
{
int i,index;
double freq,am[513]={0};
nspdRealFft(x,10,NSP_Forw);
for(i=0;i<513;i++)
{
am[i]=sqrt(x[2*i]*x[2*i]+x[2*i+1]*x[2*i+1]);
}
nspdMaxExt(am,513,&index);
freq=double(index*samplefre/1024.0);
return freq;
}
double CSignalProcess::RFft_512(double x[],double samplefre) //**对514个double数据作512长度的FFT变换**//
{
int i,index;
double freq,am[257]={0};
nspdRealFft(x,9,NSP_Forw);
for(i=0;i<257;i++)
{
am[i]=sqrt(x[2*i]*x[2*i]+x[2*i+1]*x[2*i+1]);
}
nspdMaxExt(am,257,&index);
freq=double(index*samplefre/512.0);
return freq;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -