⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signalprocess.cpp

📁 利用intel dsplib 库函数进行特定2FSK信号(需传导频)解调
💻 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 + -