基于DSP的数字滤波器的设计 2Word文档下载推荐.docx
《基于DSP的数字滤波器的设计 2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于DSP的数字滤波器的设计 2Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
A/D转换采样噪声降噪滤波
ECGfilter
Withthegradual
improvementofpeople'
s
livingconditions
inourcountry,cardiovascular
disease
hasbecomeoneofthemajor
diseasesthreateninghuman
healthandlife,
and
hasbecomea
routinemethodof
ECGin
diagnosingthisdisease.
Healthis
thefoundationforpeople'
sall-rounddevelopment,
butalsoanecessarycondition
forsocialdevelopment.
Cardiovascular
diseasesarethemain
life.
Therefore,
thediagnosisandtreatmentofcardiovascular
hasbeen
valued
allmedicalcircle,accurateECG
signalextraction,
provide
effective
auxiliary
analysis
fordoctors
is
animportantandmeaningfultask.Withtherapiddevelopmentof
electronic
technologytoday,
medicalelectronmonitoring
systemhasbeen
graduallyappliedin
clinicaldiagnosis.
ECGmonitoris
indispensablein
modern
clinicalmedicineauxiliaryinstrument,
the
longtimemonitoring
implementation
forcardiovascularpatients
andcriticalpatientsuninterrupted,
provideanimportantbasisfor
diseasediagnosis,
analysis,treatmentandresearch.
Designanddevelopmentof
dataacquisition,
dataconversionmodule
ofECGsignal
basedon
thecharacteristicsofECGsignal.Designof
acircuitfor
ECG
signalacquisition,
thentheA/D
conversion,
thefrequencyofECGsamplingrequirementstoachieve.
dataacquisitionsystem
isanecessary
channel
ECGsignalsfrom
thehumanbody
intothecomputer,
willdirectlyaffectthe
subsequent
signal
processing.
Becauseoftheinfluenceof
theECGsignalwillbe
disturbedbyelectromagneticinterferenceandcircuit
noise,
so
howtoeffectively
restrainallkindsofinterference
andnoise,improve
signalintegrity,
istheemphasisanddifficultyof
theECG
dataacquisitionsystem.
The
noisereduction
ofECGsignals
inavarietyofways,
thisarticlemainlyfromthe
filter
paper
toseparatenoisefrom
signal.
Keywords:
A/Dconversionsamplingnoisenoisereductionfiltering
第1章课程设计的目的和要求
随着科学技术的发展,现代对信号的要求越来越高。
而作为当代大学生,并且所学专业为生物医学工程,我们不能仅局限于理论知识的学习,还要掌握信号的提取,读取,转化,滤波以及信号的分析。
所以此次我们选择未经处理的心电信号,让我们基于MATLAB和DSP对心电信号进行读取和滤波,并对滤波之后的信号进行分析,增强我们对信号的了解以及实际动手能力。
并且要通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。
通过使用汇编语言编写具有完整功能的图形处理程序或信息系统,使学生加深对所学知识的理解,进一步巩固汇编语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的汇编语言程序,从而具备解决综合性实际问题的能力。
第2章系统功能介绍及总体设计方案
2.1系统功能介绍
一个实际的应用系统中,总存在各种干扰。
数字滤波器在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号处理中都有广泛的应用,数字滤波器也是使用最为广泛的信号处理算法之一。
心电信号中工频干扰比较严重,所以我们设计一个滤波器滤除工频干扰。
在本设计中,我们选择老师给的第一个网站下载http:
//www.physionet.org/physiobank/database/mitdb/,下载的为213号心电数据,利用MATLAB读取数据、转化格式并且求解滤波器系数,然后利用CCS进行滤波。
设计一个FIR低通滤波器,其参数为:
滤波器名称:
FIR低通滤波器
采样频率:
Fs=360HZ
通带/阻带截止频率:
55Hz~65Hz
通带最大衰减:
0.5dB
阻带最少衰减:
50dB
滤波器级数:
N=160
滤波器系数:
由MATLAB编程求得。
2.2总体设计方案流程图
图1总体设计方案
第3章主要内容和步骤
3.1滤波器原理
对于一个FIR滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:
其中
是FIR的滤波器的阶数,
为延时结,
为端口信号函数。
最基本的FIR滤波器可用下式表示:
输入采样序列,
是滤波器系数,
是滤波器的阶数
表示滤波器的输出序列,也可以用卷积来表示输出序列
与
、
的关系,如下:
3.2操作步骤
1、从MIT-BIH网站中获取经过AD转换后的数据,将其以txt文档的形式保存(此时是双通道数据),用MATLAB程序将其读取出来,并选择其中一组通道的3000个数据。
2、将获得的的数据用MATLAB程序转换成DSP能读取的dat格式文件
3、用MATLAB编程得到滤波器系数
4、在CCS中用TMS320C54x来进行编程实现滤波功能
第4章实验过程
4.1.实验步骤:
1.数据下载:
我们选择老师给的第一个网站下载http:
//www.physionet.org/physiobank/database/mitdb/,下载的为213号心电数据(经ADC转换后的数据)。
2.数据转化:
用MATLAB编程读取心电数据并将心电数据转化为DSP能识别的dat格式:
通过查资料,我们知道了DSP能识别的dat格式,根据我们的滤波程序,要想对心电信号进行滤波,必须将txt数据转化为DSP能识别的dat格式。
我们应用MATLAB对其进行转化。
首先转化通道一的数据,利用M=M(:
1)取通道一的数据,则可以将通道一的txt数据转化为dat格式的数据。
txt数据:
dat格式数据:
通道一信号波形
通道二信号波形
3.系数计算:
A.选用低通滤波器:
采样频率为360HZ,截止频率100HZ,阶数160
用MATLAB编程求出滤波器的系数
B.选用带阻滤波器:
采样频率360HZ,阶数160,通带/阻带截止频率:
55Hz~65Hz
用MATLAB编程求出滤波器的系数
4滤波检测:
(选用DSP)
(1).首先创建新的工程,并将我们写好的asm及cmd文件添加到工程,导入rts.lib文件;
(2).对加入的文件进行编译,无错,生成out文件,在file中选择loadprogram,并打开这个out文件,在asm文件中设置断点;
(3).选择File->
Data->
Load…打开之前Matlab生成的input.dat文件;
(4).打开View->
Graph->
Time/Frequency,修改参数
(5).运行程序,查看图形;
5.滤波结果:
信号1低通滤波及频谱
信号1带阻滤波及频谱
6.可行性论证:
在确定我们要做工频干扰滤波后,我们将主要精力放在查找滤波程序上,通过查找资料,我们找到了设计滤波器并能进行低通滤波以及带阻滤波的程序(在DSP上运行),通过王敏的阅读和思考,她确定我们可以运用这段程序,只需将滤波器的系数予以修改,并且将心电数据转化为DSP可以识别的dat格式即可。
所以我们利用MATLAB求出了我们所需的滤波器系数,并且将心电数据转化为了DSP可以识别的dat格式。
最后,以DSP为平台,实现滤波。
我们认为这样一步步转化是可行的。
第五章结论与体会
1.从这个实验中最先是实验数据的问题,我们开始的思路是
但在其中的一步中出现问题,我们在网上下载的是三种格式的数据(.hea,.dat,.art),在我们用程序转换之后得到的数据是最原始的的电压值,数值非常小,而且是double类型的数据,这在转换成DSP所需dat格式文件时非常不方便,因为这种格式要求为头文件+数据的形式,其中头文件信息包含五个部分:
magicnumbei(固定为1651),数据存取格式,数据存放的起始地址,页码以及数据长度。
其中数据格式可以取1-4,分别代表十六进制,整数,长整数,浮点数。
此时获得的数据非常小,而且是double类型的数据,转换成以上类型是都会存在误差,是的输入波形发生变化,这会影响到比较输入和滤波输出后图像的比较。
而改用经AD转换后的数据很方便的采用整数格式,因此我们采用的头文件格式为:
1651201000fff。
2.在这次实验中我们学会了求滤波系数的两种方法:
一是用MATLABGUI中的SPTOOL设计滤波器系数,二是用MATLAB编程来得到滤波器系数,在实验中我们采用的是第二种方法,直接采用编程得到的特定格式数据的系数文件,在粘贴在汇编语言相应的coffe系数取。
3.在ccs软件中实现滤波功能是我们遇到的两个问题:
一是DSP中TMS320C54x汇编语言的不熟悉,二是DSP芯片的存储器的结构不了解,这导致我们在编写asm文件和cmd文件时出现了很多问题,在不断的查资料和纠错过程中我们对这两个方面的知识掌握的更全面。
4.我们的动手能力真的很差,并且遇到问题不会自己思考,所以我们不仅要掌握知识,加强动手能力,就读于理工科,更要学会思考,思考哪里出错了,思考这里为什么不行,不要依赖于同学或者老师。
附件:
源程序清单
1.利用MATLAB读取心电数据并转化为DSP能识别的dat格式:
clearall;
temp=importdata('
D:
\matlab\work\213.txt'
);
%读取网上下载的213号心电数据
a=temp.data;
%从temp这个结构体中得到数据
ecg=a(1:
3000,2);
%得到通道1中的3000个数据
fid=fopen('
213ecg.dat'
'
w'
%打开文件,'
是将此文件定义为可写的,fid是此文件的整数标示
fprintf(fid,'
1651201000fff\n'
%输出文件头,文件头必须是dsp所能识别的,就如此句程序所设定的
0x%x\n'
ecg);
%输出ecg数组,并写到与fid标示符相同的文件
fclose(fid);
%关闭fid标示符的文件。
2.滤波系数求解程序:
n=160;
fsample=360;
fp=100;
fs=65;
mode=1;
w=hamming(n+1);
wp=fp/(fsample/2);
ws=fs/(fsample/2);
ifmode==1h=fir1(n,wp,'
low'
w);
end
ifmode==2h=fir1(n,[wp,ws],'
stop'
m=0:
n;
figure
(1)
subplot(2,1,1);
plot(m,w);
grid;
axis([0n01.1*max(w)]);
subplot(2,1,2);
plot(m,h);
axis([0n1.1*min(h)1.18*max(h)]);
figure
(2)
freqz(h)
subplot(2,1,2)
h=[h,0];
b=round(h*(2^15-1));
firlwindow.txt'
fori=1:
32;
fprintf(fid,'
\r\t%s\t'
.word'
forj=(i-1)*32+1:
(i-1)*32+31
%6.0f'
b(j));
end
b((i-1)*32+32));
3.DSP实现滤波:
fir1window.asm
.mmregs
in_buffer.usect"
in_buf"
160
input.usect"
in_dat"
3000
output.usect"
out_dat"
.globalstart
.defstart
.def_c_int00
.copy"
213.h"
.text
_c_int00bstart
start:
SSBXFRCT
STM#3000,BK
STM#in_buffer,AR3
STM#input,AR2
MVDD*AR2+,*AR3
STM#output,AR5
STM#in_buffer+159,AR1
FIR:
RPTZA,#159
MACD*AR1-,coeff,A
STHA,*AR5+%
MVDD*AR2,*AR3
MAR*AR2+%
BFIR
nop
.end
fir1window.cmd:
fir1window.obj
-mfir1window.map
-ofir1window.out
MEMORY
{
PAGE0:
eprom:
org=02000h,len=1000h
PAGE1:
spram:
org=0100h,len=2fffh
dpram:
org=3200h,len=0fffh
}
SECTIONS
.data:
>
epromPAGE0
.text:
in_dat:
spramPAGE1
in_buf:
out_dat:
dpramPAGE1