毕设(正文) 联系客服

发布时间 : 星期一 文章毕设(正文)更新完毕开始阅读006b98aa7fd5360cbb1adba0

南昌航空大学学士学位论文

附录

程序:

模块连接

function varargout = bishe(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @bishe_OpeningFcn, ... 'gui_OutputFcn', @bishe_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before bishe is made visible.

function bishe_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes bishe wait for user response (see UIRESUME) % uiwait(handles.figure1);

30

南昌航空大学学士学位论文

% --- Outputs from this function are returned to the command line. function varargout = bishe_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

读取信号

[filename,filepath]=uigetfile('C:\\Users\\Administrator\\Desktop\\ECG1.txt'); filename=[filepath,filename];

[t,b]=textread(filename,'%f%f','headerlines',2); input=b(1:1000); rate=b(100);

axes(handles.axes2); plot(b)

滤波处理

[filename,filepath]=uigetfile('C:\\Users\\Administrator\\Desktop\\ECG1.txt'); filename=[filepath,filename];

[t,b]=textread(filename,'%f%f','headerlines',2); n=3600;

m=(fft(b,n)); fs=800;%采样频率

f=fs/n*(0:n-1);%定位坐标

wp=[0.9 50]/400; %通带数字频率转换成模拟频率

ws=[0.3 100]/400; %通带截至数字频率转换成模拟频率 rp=3; %通带最大衰减 rs=10; %阻带最小衰减

[N,wc]=buttord(wp,ws,rp,rs,'s'); %确定最小阶数N和频率参数Wc [Bz,Az]=butter(N,wc);%得巴特沃斯归一化原型 [H,w]=freqz(Bz,Az); %生成频率响应参数

f1=w/pi*fs/2; %采样频率转换成模拟采样频率 y=filter(Bz,Az,b);%使用filter函数对信号进行滤波 N=50; %定义窗函数的长度 wc=0.3;

window=blackman(N);%根据N的值产生一个布拉克曼窗window

hn=fir1(N-1,wc,window);%可以指定窗函数向量 window。如果缺省 window参数,则 fir1默认为 hamming窗。

y1=filter(hn,1,y);%使用filter函数对信号进行滤波 % 滤波器滤波后图形

31

南昌航空大学学士学位论文

axes(handles.axes1); plot(t,y1); a=y1(20:500); rate=y1(100);

axes(handles.axes4); plot(a);

局部放大

[filename,filepath]=uigetfile('C:\\Users\\Administrator\\Desktop\\ECG1.txt');

filename=[filepath,filename];

[t,b]=textread(filename,'%f%f','headerlines',2);

a=b(20:500); rate=b(100);

axes(handles.axes3); plot(a);

RQS波复检及心率计算

[filename,filepath]=uigetfile('C:\\Users\\Administrator\\Desktop\\ECG1.txt');

filename=[filepath,filename];

[t,b]=textread(filename,'%f%f','headerlines',2);

input=b(1:1000); rate=b(100); sig=input;

lensig=length(sig);

wtsig1=cwt(sig,6,'mexh'); lenwtsig1=length(wtsig1); wtsig1(1:20)=0;

wtsig1(lenwtsig1-20:lenwtsig1)=0; y=wtsig1;

yabs=abs(y);

sigtemp=y;

siglen=length(y); sigmax=[];

for i=1:siglen-2

32

南昌航空大学学士学位论文

if (y(i+1)>y(i)&y(i+1)>y(i+2))

sigmax=[sigmax;abs(sigtemp(i+1)),i+1]; end; end;

%打印原信号及变换信号

%取阈值,阈值为相对幅值的差的60%

thrtemp=sort(sigmax); thrlen=length(sigmax); thr=0;

for i=(thrlen-7):thrlen thr=thr+thrtemp(i); end;

thrmax=thr/8; %最大幅度平均值,8个最大幅值点的平均值

zerotemp=sort(y); zerovalue=0; for i=1:100

zerovalue=zerovalue+zerotemp(i); end;

zerovalue=zerovalue/100; %最小幅度平均值,对消幅度,100个最小幅值点的平均值

thr=(thrmax-zerovalue)*0.3; %最大、最小幅度的差值的30%为判别R波的阈值

%定位R波 rvalue=[]; for i=1:thrlen

if sigmax(i,1)>thr

rvalue=[rvalue;sigmax(i,2)]; end; end;

rvalue_1=rvalue;

%排除误检,如果相邻两个极大值间距小于0.4,则去掉幅度较小的一个

lenvalue=length(rvalue); for k=1:lenvalue

for i=2:lenvalue;

33

南昌航空大学学士学位论文

if (rvalue(i)-rvalue(i-1))<100

if yabs(rvalue(i))>yabs(rvalue(i-1)) rvalue(i-1)=0; else

rvalue(i)=0; end; end; end;

%排除误检,如果相邻两个极大值间距大于1.2,则复检 rvalue=sort(rvalue); id = find(rvalue==0) ; rvalue(id,:)=[]; N4=length(rvalue); for j=1:20 for i=2:N4

if (rvalue(i)-rvalue(i-1)) > 300 for jj= rvalue(i-1): rvalue(i)-1 if sigmax(jj,1) > sigmax(jj+1,1) B=sigmax(jj,2); else B=sigmax(jj+1,2); end end

c1=rvalue(1:i-1);c2=rvalue(i:N3); rvalue=[c1;B;c2]; end end end

r1=find(rvalue~=0); rvalue=rvalue(r1);

lenvalue=length(rvalue); end

%打印纠正及校准前后的R波信号 axes(handles.axes2);

plot(1:lensig,wtsig1,rvalue_1,wtsig1(rvalue_1),'r.'); axes(handles.axes1);

plot(1:lensig,sig,rvalue,sig(rvalue),'r.'); lenr=length(rvalue);

v=60/4*1000*(lenr-1)/(rvalue(lenr)-rvalue(1)) m=floor(v);

set(handles.text5,'string',m);

34