2. 滤波效果
Matlab的滤波程序:
在Matlab中,可直接调用函数filtfilt来实现信号的零相移滤波,程序如下:
load baseline.txt; %读取放在baseline.txt的心电数据
data = baseline;
result =filtfilt(b,a,data);
figure(2);
subplot(211);
plot(data);
subplot(212);
plot(result);
Matlab中IIR零相移滤波效果
2)在CCS中读入带有基线漂移的心电信号文件,作为为研究对象;
3)将设计的滤波器用CCS实现,观察滤波功能,比较滤波前后的频谱。
经过反复试验,将ccs中滤波器系数调整为:
b=[0.991, -2.971, 2.971, -0.991]
a=[ 1, -2.9846, 2.9693, -0.98474]
所以ccs 中iir.c程序为:
#include"math.h"
#define IIRNUMBER 4
#define SAMPLEF 360 //采样频率
float IIR();
若图片无法显示请联系QQ752018766,本论文免费,转发请注明源于www.youerw.com
int read_signals(int *input);
main()
{
nIn=0; nOut=0;
fInput=fOutput=0;
while ( 1 )
{
read_signals(fIn); //设置断点1
for(i = 0;i < 3600;i++) //设置断点2
{
fInput=fIn[i];
fIn[nIn]=fInput;
nIn++; nIn%=3600;
fOutput=IIR(i);
fOut[nOut]=fOutput;
nOut++; // break point
if ( nOut>=3600 )
{
nOut=0;
}
}
}
}
float IIR(int j)
{
switch(j)
{
case 0: fOut[j] = 9.92340;break;
case 1: fOut[j] = 9.77078;break;
case 2: fOut[j] = 9.61971;break;
case 3: fOut[j] = 9.47060;break;
default:fOut[j]=2.9846*fOut[j-1]-2.9693*fOut[j-2]+0.9847*fOut[j-3]+0.99*fIn[j]-2.97*fIn[j-1]+2.97*fIn[j-2]-0.99*fIn[j-3];break;
}
return(fOut[j]);
}
// 读取输入信号
int read_signals(int *fIn)
{
// 在此读取采集数据信号放到输入缓冲区input[]
return(1);
}
.cmd文件为:
-w
-stack 500
-sysstack 500
-l rts55x.lib
MEMORY
{
DARAM: o=0x100, l=0x7f00
VECT : o=0x8000, l=0x100