#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
FILE *stream;
int lpfilt( int datum ,int init);
int hpfilt( int datum, int init );
int fdatum(int datum, int init);
int deriv2( int datum, int init ) ;
int mvwint(int datum, int init);
#define DERIV_LENGTH 2
void main( void )
{
int datum;
int result1[5000], result2[5000],result3[5000],result4[5000];
int sdata[5000];
float f1 = 0, f0 = 0, f2 = 0 ;
int numclosed = 0;
//* Open for read (will fail if file "data" does not exist) *//
if( (stream = fopen( "103.txt", "r" )) == NULL )
{printf( "The file 'data' was not opened\n" );
exit(0);
}
else
{ printf( "The file 'data' was opened\n" );
}
for (int i=0; i<5000; i++)
{
fscanf( stream, "%f %f %f", &f0,&f1,&f2 );
f1 = f1*1000;
sdata[i] = int(f1);
printf( "%d\n", sdata[i]);
}
printf("The number of data readed is %d\n", i);
fclose( stream );
lpfilt(0,1);
for (i=0;i<5000;i++)
{
datum=sdata[i];
result1[i] = lpfilt(datum,0);
}
stream = fopen( "result1.txt", "w+" );
if( stream == NULL )
{
printf( "The file fscanf.txt1 was not opened\n" );
//exit(0);
}
else
{ for (i=0;i<5000;i++)
fprintf( stream, "%d\n", result1[i] );
}
hpfilt(0,1);
for (i=0;i<5000;i++)
{
datum=result1[i];
result2[i] = hpfilt(datum,0);
}
stream = fopen( "result2.txt", "w+" );
if( stream == NULL )
printf( "The file result2.txt was not opened\n" );
else
{
for (i=0;i<5000;i++)
fprintf( stream, "%d\n", result2[i] );
}
/* All other files are closed: */
numclosed =fcloseall( );
printf( "Number of files closed by fcloseall: %u\n", numclosed );
return;
////////////////////////////////////////////////////////////
//}
///////////////////////////////////////////////////////////
deriv2(0,1);
for (i=0;i<5000;i++)
{
datum=result2[i];
result3[i] = deriv2(datum,0);
result3[i]=abs(result3[i]);
}
stream = fopen( "e:/data/result3.txt", "w+" );
if( stream == NULL )
{
printf( "The file fscanf.txt1 was not opened\n" );
//exit(0);
}
else
{ for (i=0;i<5000;i++)
fprintf( stream, "%d\n", result3[i] );
}
mvwint(0,1);
for (i=0;i<5000;i++)
{
datum=result3[i];
result4[i] = mvwint(datum,0);
}
stream = fopen( "e:/data/result4.txt", "w+" );
if( stream == NULL )
printf( "The file result4.txt was not opened\n" );
else
{
for (i=0;i<5000;i++)
fprintf( stream, "%d\n", result4[i] );
}
/* All other files are closed: */
numclosed =fcloseall( );
printf( "Number of files closed by fcloseall: %u\n", numclosed );
return;
}
int lpfilt( int datum ,int init)
{
const int LPBUFFER_LGTH = 12;
static long y1 = 0, y2 = 0 ;
static int data[LPBUFFER_LGTH], ptr = 0 ;
long y0 ;
int output, halfPtr ;
if(init)
{
for(ptr = 0; ptr < LPBUFFER_LGTH; ++ptr)
data[ptr] = 0 ;
y1 = y2 = 0 ;
ptr = 0 ;
}
halfPtr = ptr-(LPBUFFER_LGTH/2) ; // Use halfPtr to index
if(halfPtr < 0) // to x[n-6].
halfPtr += LPBUFFER_LGTH ;
y0 = (y1 << 1) - y2 + datum - (data[halfPtr] << 1) + data[ptr] ;
y2 = y1;
y1 = y0;
output = y0 / ((LPBUFFER_LGTH*LPBUFFER_LGTH)/4);
data[ptr] = datum ; // Stick most recent sample into
if(++ptr == LPBUFFER_LGTH) // the circular buffer and update
ptr = 0 ; // the buffer pointer.
return(output) ;
}
int hpfilt( int datum, int init )
{
static long y=0 ;
const int HPBUFFER_LGTH = 32;
static int data[HPBUFFER_LGTH], ptr = 0 ;
int z, halfPtr ;
if(init)
{
for(ptr = 0; ptr < HPBUFFER_LGTH; ++ptr)
data[ptr] = 0 ;
ptr = 0 ;
y = 0 ;
}
y += datum - data[ptr];
halfPtr = ptr-(HPBUFFER_LGTH/2) ;
if(halfPtr < 0)
halfPtr += HPBUFFER_LGTH ;
z = data[halfPtr] - (y / HPBUFFER_LGTH);
data[ptr] = datum ;
if(++ptr == HPBUFFER_LGTH)
ptr = 0 ;
return( z );
}
int deriv2(int x, int init)
{
static int derBuff[DERIV_LENGTH], derI = 0 ;
int y ;
if(init != 0)
{
for(derI = 0; derI < DERIV_LENGTH; ++derI)
derBuff[derI] = 0 ;
derI = 0 ;
return(0) ;
}
y = x - derBuff[derI] ;
derBuff[derI] = x ;
if(++derI == DERIV_LENGTH)
derI = 0 ;
return(y) ;
}
int mvwint(int datum, int init)
{
const int WINDOW_WIDTH=16;
static long sum = 0 ;
static int data[WINDOW_WIDTH], ptr = 0 ;
int output;
if(init)
{
for(ptr = 0; ptr < WINDOW_WIDTH ; ++ptr)
data[ptr] = 0 ;
sum = 0 ;
ptr = 0 ;
}
sum += datum ;
sum -= data[ptr] ;
data[ptr] = datum ;
if(++ptr == WINDOW_WIDTH)
ptr = 0 ;
if((sum / WINDOW_WIDTH) > 32000)
output = 32000 ;
else
output = sum / WINDOW_WIDTH ;
return(output) ;
};
复件 test1.rar_心电_心电 滤波_心电信号_心电信号 特征提取
版权申诉
2 浏览量
2022-09-22
16:30:09
上传
评论
收藏 2KB RAR 举报
JaniceLu
- 粉丝: 78
- 资源: 1万+
最新资源
- C# OpenCvSharp Demo - 最大内接圆.rar
- 基于python和Matlab的爬虫+情感分析+时间序列+长图自动分割项目合集(高分项目).zip
- ME2308-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 使用Java实现的基于最小生成树的旅行商问题.zip
- ME2308D-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 数据并行C++(Data Parallel C++) 英文版
- MongoDB数据库操作和面试专题及答案.zip
- C#实现通用USB摄像头的读取,拍照,视频录制等功能
- 基于Python实现的多目标旅行商问题算法优化.zip
- LN2312LT1G-VB一款SOT23封装N-Channel场效应MOS管
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈