📄 check.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "dsp.h"
/*---------------------------------------------------------------------------*
* 门限判决函数 check1
门限1:DTMF信号强度门限
* 要求:行、列频率能量最大值之和占据8个频点总能量的百分比是否大于ENERGY_THRESHOLD
*(默认0.9)。不是则认为不是DTMF信号 *
*---------------------------------------------------------------------------*/
int check1(double a[],int x,int y)
{
#define THRESHOLD_SUM 0.9
int i;
double max_sum=0;
double total_sum=0;
for(i=0;i<8;i++)
{
total_sum+=a[i];
}
max_sum=a[x]+a[y];
if (max_sum/total_sum<=THRESHOLD_SUM)
{
// printf("check1 unqualified data\n");
return Unqualified;
}
return Qqualified;
}
/*---------------------------------------------------------------------------*
* 门限判决函数 check2
门限2:行、列峰值门限
* 要求:行、列能量最大值/行列能量次大值> PEAK_VALUE_THRESHOLD(默认14.2)。
* 不是则认为不是DTMF信号,本函数为了简便,判断了所有其他三个值而没有寻找次大值* *
*---------------------------------------------------------------------------*/
int check2(double a[],int x,int y)
{
#define THRESHOLD_ROW 14.2
#define THRESHOLD_LINE 14.2
int i;
//行门限判决
for(i=0;i<4;i++)
if((x!=i)&&(a[x]/a[i])<THRESHOLD_ROW)
{//printf("check2 unqualified data\n");
return Unqualified;
}
//列门限判决
for(;i<8;i++)
if((y!=i)&&(a[y]/a[i])<THRESHOLD_LINE)
{//printf("check2 unqualified data\n");
return Unqualified;
}
return Qqualified;
}
/*---------------------------------------------------------------------------*
* 门限判决函数 compare
门限3:稳定信号门限
实际的DTMF信号应持续超过一定长度的时间。
所以应在连续检测到两次或两次以上同一信号时再认为信号存在
* *
*---------------------------------------------------------------------------*/
int compare(int a,int b,int x,int y)
{
if ((a==x)&&(b==y))
return 0;
else return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -