数字信号处理课程设计报告——数字听诊器.doc
- 文档编号:1974789
- 上传时间:2023-05-02
- 格式:DOC
- 页数:21
- 大小:1.06MB
数字信号处理课程设计报告——数字听诊器.doc
《数字信号处理课程设计报告——数字听诊器.doc》由会员分享,可在线阅读,更多相关《数字信号处理课程设计报告——数字听诊器.doc(21页珍藏版)》请在冰点文库上搜索。
1.不要删除行尾的分节符,此行不会被打印
哈尔滨工业大学(威海)课程设计报告
目录
一.课程设计任务 1
1、掌握MATLAB及其在数字信号处理中的应用 1
2、课程设计题目:
数字听诊器信号分析 1
二.课程设计原理及设计方案 2
1、滤波器设计原理 2
1.1滤波器概述 2
1.2FIR数字滤波器设计原理 2
1.3FIR数字滤波器的特性 2
1.4窗函数的介绍 4
2、设计方案 5
三.课程设计的步骤和结果 6
1、读取病人心肺声音信号并对其进行频谱分析 6
2、设计滤波器对信号进行滤波(以凯塞窗为例) 7
2.1低通滤波器 7
2.2带通滤波器 8
2.3带阻滤波器 10
3、GUI界面设计 11
3.1BUTTON1病人心肺声音信号提取 11
3.2BUTTON2退出系统 12
3.3BUTTON3运行 12
3.4文本编辑框 15
3.5GUI整体界面 15
四.课程设计总结 16
五.设计体会 17
六.参考文献 18
-19-
哈尔滨工业大学(威海)课程设计报告
一.课程设计任务
1、掌握MATLAB及其在数字信号处理中的应用
MATLAB计算软件是一套进行科学计算的高性能软件,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
Matlab语言可以很容易实现Fourier变换和数字滤器的设计,广泛应用于数字信号处理中,给我们对数字信号的研究工作带来很大方便,同时具有功能全面的GUI程序设计,使所设计的应用程序具有图形用户界面,方便用户操作。
2、课程设计题目:
数字听诊器信号分析
目前大夫主要以听诊器倾听病人的气管、肺部区域的声音,对病人的疾病进行判断;请设计一个听诊的软件,要求如下:
1)可记录病人的姓名、年龄、性别、病史、不同疾病部位等状况;
2)对病人的气管、肺部等区域的声音进行采集、分析、存储(前端听诊部分不用考虑,只考虑数据采集部分)。
3)可分析不同声音分量的大小,给出频谱图,以及主要频率的幅度,便于大夫分析和验证;
4)由于采集到的信号经常存在某些干扰信号,比如心脏的震动,请设计低通、带通、带阻滤波器对信号处理,滤波器参数在用户界面中可以进行设置,方便医生进行使用;
5)编制GUI用户界面。
二.课程设计原理及设计方案
1、滤波器设计原理
1.1滤波器概述
随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域。
数字信号处理在通信、语音、图像,自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理中,数字滤波器占有极其重要的地位。
现代数字滤波器可以用软件或设计专用的数字处理硬件两种方式来实现,用软件来实现数字滤波器优点是随着滤波器参数的改变,很容易改变滤波器的性能。
根据数字滤波器单脉冲响应的时域特性可将数字滤波器分为两种,即IIR(InfiniteImpulseResponse)无限长脉冲响应数字滤波器和FIR(FiniteImpulseResponse)有限长脉冲响应数字滤波器。
从功能上分类,可分为低通、高通、带通、带阻滤波器。
1.2FIR数字滤波器设计原理
FIR具有突出的优点:
系统总是稳定的、易于实现线性相位、允许设计多通带(或多阻带)滤波器。
但与IIR相比,在满足同样的阻带衰减的情况下需要较高的阶数。
FIR的冲激响应h(k)是有限长的M阶FIR系统函数可表示为
滤波器的输出:
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,给出的设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
在这里我们利用窗函数法设计FIR滤波器。
给定所要求的滤波器的频率响应Hd(ejw),要求设计一个FIR滤波器的频率响应H(ejw)来逼近Hd(ejw).设计是在时域进行的,首先由傅立叶变换导出无限长的序列hd(n),然后用窗函数截断hd(n),即:
h(n)=hd(n)w(n)。
1.3FIR数字滤波器的特性
FIR滤波器有以下特点:
(1)系统的单位冲激响应h(n)在有限个n值处不为零;
(2)系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统);
(3)结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
因为FIR数字滤波器的单位冲激响应是有限长的,所以它永远都是稳定的。
[3]说明了达到具有线性相位这一要求,仅需要对FIR数字滤波器的冲激响应施加一定的约束。
令,就可由得到FIR数字滤波器的频率响应:
(1-2-1)
式中是的幅频特性,是的相频特性
(1-2-2)
由于h(n)的长度N取奇数或偶数时对H(w)的特性有影响,FIR滤波器的幅频特性可以分为以下4种情况:
(1)第Ⅰ种类型:
为偶对称,且N为奇数
根据式:
可以得到滤波器的幅频函数为:
(1-2-3)
其中,。
幅度函数对呈偶对称。
(2)第Ⅱ种类型:
为偶对称,且N为偶数
根据式:
可得滤波器的幅频函数为:
(1-2-4)
其中:
。
幅度函数对于或呈偶对称。
如果数字滤波器在处不为零,如本文设计的高通滤波器和带阻滤波器则不能用这一类型。
(3)第Ⅲ种类型:
为奇对称,且N为奇数
根据式:
可得滤波器的幅频函数为:
(1-2-5)
其中。
数字滤波器在=0,,2处不为零如低通滤波器、高通滤波器、带阻滤波器,则不适合用这类滤波器来设计。
(4)第Ⅳ种类型:
为奇对称,且N为偶数
根据式:
可得滤波器的幅频函数可表示为:
(1-2-6)
其中:
。
幅度函数对于呈偶对称。
如果数字滤波器在处不为零如低通滤波器、带阻滤波器,则不适合用这类数字滤波器来设计。
1.4窗函数的介绍
设计滤波器尽量要求窗函数满足以下两项要求:
(1)窗谱主瓣尽可能地窄,以获取较陡的过渡带。
(2)尽量减少窗谱的最大旁瓣的相对幅度。
也就是能量尽量集中于主瓣,这样使尖峰和波纹减小,就可增大阻带的衰减。
但是这两项要求是不能同时满足的。
当选用主瓣宽度较窄时,虽然得到陡峭的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时,虽能得到平坦的幅度响应和较小的阻带波纹,但过渡带加宽,即主瓣会加宽。
因此,实际所选用的窗函数往往是它们的折中。
设计FIR滤波器常用的窗函数有:
矩形窗、三角窗、汉宁窗、海明窗、布拉克曼窗、凯塞窗等。
以下是几种窗函数的性能比较:
窗函数
旁瓣峰值衰减(dB)
等效凯塞尔窗()
主瓣过渡带宽()
精确过渡带宽()
最小阻带衰减(Db)
矩形窗
-13
0
4
1.8
-21
三角窗
-25
1.33
8
6.1
-25
汉宁窗
-31
3.86
8
6.2
-44
海明窗
-41
4.86
8
6.6
-53
布莱克曼窗
-57
7.04
12
11
-74
凯赛尔窗
-57
7.865
10
10
-80
2、设计方案
☆通过采集WAV文件读取不同病人心肺声音信号。
☆对声音信号进行时域、频谱及幅度谱分析,观察不同声音分量大小以及主要频率的幅度。
☆设计FIR数字滤波器对声音信号进行滤波,设计不同的窗函数进行带通、带通、带阻滤波。
☆设计GUI界面,可进行滤波器参数设置。
三.课程设计的步骤和结果
1、读取病人心肺声音信号并对其进行频谱分析
[x,B]=wavread(‘fb2.wav’);%读取病人心肺声音信号
F=B*(0:
511)/1024;
y=fft(x,1024);%频谱
fp=2*sqrt(y.*conj(y));%幅度谱
subplot(3,1,1);
plot(x);title('滤波前信号');
subplot(3,1,2);
plot(F,abs(y(1:
512)));title('滤波前信号频谱');
axis([0,1000,0,inf]);
subplot(3,1,3);
plot(fp(1:
257));
title('信号幅度谱');
2、设计滤波器对信号进行滤波(以凯塞窗为例)
2.1低通滤波器
[x,B]=wavread('fb2.wav');
Fs=2000;%采样频率
Fp1=10;%低通通带模拟截止频率
Fs1=100;%低通阻带模拟截止频率
ws1=2*Fs1/Fs;%模拟转变为数字域的截止频率
wp1=2*Fp1/Fs;
delta_w=ws1-wp1;%过渡带宽
N=ceil(10*pi/delta_w)+1;%最小阶数N
window=kaiser(N+1)';%凯塞窗
Wn=(Fp1+Fs1)/Fs;%理想LPF的截止频率
[b,a]=fir1(N,Wn,window);
[H,w]=freqz(b,1,512);
db=20*log10(abs(H));
t=(0:
200)/Fs;
subplot(3,1,1);
plot(w*Fs/(2*pi),db);title('滤波器');
Filterx=filter(b,a,x);
subplot(3,1,2);
plot(Filterx);title('滤波后信号');
F=B*(0:
511)/1024;
y=fft(Filterx,1024);
subplot(3,1,3);
plot(F,abs(y(1:
512)));title('滤波后信号频谱');
axis([0,1000,0,inf]);
如上设计采样频率为2000Hz,通带截止频率为10Hz,阻带截止频率为200Hz的低通滤波器对原声音信号进行滤波
对比滤波前后信号频谱,可观察得到该滤波器成功滤除了大于100Hz的频率,但仍与理想情况有一定差距。
2.2带通滤波器
[x,B]=wavread('fb2.wav');
Fs=2000;%采样频率
Fp1=200;%带通通带模拟截止频率
Fp2=400;
Fs1=100;%带通阻带模拟截止频率
Fs2=500;
ws1=2*Fs1/Fs;%模拟转变为数字域的截止频率
ws2=2*Fs2/Fs;
wp1=2*Fp1/Fs;
wp2=2*Fp2/Fs;
delta_w1=wp1-ws1;
delta_w2=ws2-wp2;
delta_w=min(deltaw1,deltaw2);
N=ceil(10*pi/delta_w1)+1;
window=kaiser(N+1);%凯塞窗
b=fir1(N,[wp1/piwp2/pi],window);
[H,w]=freqz(b,1,512);
db=20*log(abs(H));
t=(0:
200)/Fs;
subplot(3,1,1);
plot(w*Fs/(2*pi),db);title('滤波器');
Filterx=filter(b,1,x);
subplot(3,1,2);
plot(Filterx);title('滤波后信号');
F=B*(0:
511)/1024;
y=fft(Filterx,1024);
subplot(3,1,3);
plot(F,abs(y(1:
512)));title('滤波后信号频谱');
axis([0,1000,0,inf]);
如上设计采样频率为2000Hz,通带截止频率为200Hz、400Hz,阻带截止频率为100Hz、500Hz的带通滤波器对原声音信号进行滤波;
对比滤波前后信号频谱,可观察得到该滤波器成功滤除了除200Hz至400Hz以外的频率,但仍与理想情况有一定差距。
2.3带阻滤波器
[x,B]=wavread('fb2.wav');
Fs=2000;%采样频率
Fp1=100;%带阻通带模拟截止频率
Fp2=500;
Fs1=200;%带阻阻带模拟截止频率
Fs2=400;
ws1=2*Fs1/Fs;%模拟转变为数字域的截止频率
ws2=2*Fs2/Fs;
wp1=2*Fp1/Fs;
wp2=2*Fp2/Fs;
delta11=ws1-wp1;
delta21=wp2-ws2;
delta_w=min(delta11,delta21);%过渡带宽
N=ceil(10*pi/delta_w2)+1;N=N+rem(N,2);
window=kaiser(N+1);
b=fir1(N,[ws1/piws2/pi],'stop',window);
[H,w]=freqz(b,1,512);
db=20*log(abs(H));
t=(0:
200)/Fs;
subplot(3,1,1);
plot(w*Fs/(2*pi),db);title('滤波器');
Filterx=filter(b,1,x);
subplot(3,1,2);
plot(Filterx);title('滤波后信号');
F=B*(0:
511)/1024;
y=fft(Filterx,1024);
subplot(3,1,3);
plot(F,abs(y(1:
512)));title('滤波后信号频谱');
axis([0,1000,0,inf]);
如上设计采样频率为2000Hz,通带截止频率为100Hz、500Hz,阻带截止频率为200Hz、400Hz的带阻滤波器对原声音信号进行滤波;
对比滤波前后信号频谱,可观察得到该滤波器成功滤除了200Hz至400Hz的频率,但仍与理想情况有一定差距。
3、GUI界面设计
3.1BUTTON1病人心肺声音信号提取
[FileNamePathName]=uigetfile({'*.wav','TextFiles(*.wav)';'*.*','AllFiles(*.*)'},'ChooseaFile');
L=length(FileName);
test=FileName(1,L-3:
L);
iftest=='.wav'
str=[PathNameFileName];
set(handles.edit11,'string',str);
[x,B]=wavread(str);
else
errordlg('WrongFile','FileOpenError!
');
return;
end
F=B*(0:
511)/1024;
y=fft(x,1024);
axes(handles.axes9);
plot(F,abs(y(1:
512)));title('滤波前信号频谱');
axis([0,1000,0,inf]);
axes(handles.axes8);
plot(x);title('滤波前信号');
fp=2*sqrt(y.*conj(y));%幅度谱
axes(handles.axes10);
plot(fp(1:
257));
title('信号幅度谱');
此按键实现功能为:
(1)选择文件路径,读取文本类文档,并将路径显示在界面上。
(2)对所选择的声音信号进行时域、频谱及幅度谱分析。
3.2BUTTON2退出系统
clear;
close(gcf);
此按键实现功能为:
退出GUI界面。
3.3BUTTON3运行
此按键实现功能为:
根据用户所设定的参数,选择相应的窗函数对原声音信号进行相应的滤波,并绘制滤波后的时域谱和频谱。
globalxB;
Nn=128;
DigitalFilter_value=get(handles.DigitalFilter,'Value');
Windows_value=get(handles.Windows,'Value');
FilterType_value=get(handles.FilterType,'Value');
Order_value=get(handles.Order,'Value');
Rp_value=str2double(get(handles.Rp,'String'));
Rs_value=str2double(get(handles.Rs,'String'));
Fs_value=str2double(get(handles.Fs,'String'));
Fp1_value=str2double(get(handles.Fp1,'String'));
Fp2_value=str2double(get(handles.Fp2,'String'));
Fs1_value=str2double(get(handles.Fs1,'String'));
Fs2_value=str2double(get(handles.Fs2,'String'));
wp1=2*Fp1_value/Fs_value;wp2=2*Fp2_value/Fs_value;
ws1=2*Fs1_value/Fs_value;ws2=2*Fs2_value/Fs_value;
wp=[wp1,wp2];ws=[ws1,ws2];
delta_w=ws1-wp1;
deltaw1=wp1-ws1;
deltaw2=ws2-wp2;
delta11=ws1-wp1;
delta21=wp2-ws2;
delta_w1=min(deltaw1,deltaw2);
delta_w2=min(delta11,delta21);
if(FilterType_value==1)
[n,Wn]=buttord(wp1,ws1,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
else
if((FilterType_value==3)||(FilterType_value==2))
[n,Wn]=buttord(wp,ws,Rp_value,Rs_value);
set(handles.MinOrderDisplay,'string',num2str(n))
end
end
MinOrder_value=get(handles.MinOrder,'Value');
if(MinOrder_value==0)
n=str2double(get(handles.Order,'String'))
end
switchWindows_value%FIR中的Windows选择
case1%选择设计kaiser滤波器
switchFilterType_value%选择滤波器类型
case1%低通滤波器
N=ceil(10*pi/delta_w)+1;%最小阶数N
window=kaiser(N+1)';
Wn=(Fp1_value+Fs1_value)/Fs_value;%理想LPF的截止频率
[b,a]=fir1(N,Wn,window);
[H,w]=freqz(b,1,512);
db=20*log10(abs(H));%dbimagine
t=(0:
200)/Fs_value;
axes(handles.Magnitude);
plot(w*Fs_value/(2*pi),db);title('滤波器');
Filterx=filter(b,a,x);
axes(handles.axes11);
plot(Filterx);title('滤波后信号');
F=B*(0:
511)/1024;
y=fft(Filterx,1024);
axes(handles.axes12);
plot(F,abs(y(1:
512)));title('滤波后信号频谱');
axis([0,1000,0,inf]);
case2%带通滤波器
……
case3%带阻滤波器
……
case2%选择设计hamming滤波器
switchFilterType_value%选择滤波器类型
……
case3%选择设计hanning滤波器
switchFilterType_value%选择滤波器类型
……
case4%选择设计bartlett滤波器
switchFilterType_value%选择滤波器类型
……
end
end
3.4文本编辑框
参数输入时,在输入抽样频率Fs的前提下,判断滤波器通带临(Fp1、Fp2)、滤波器阻带临界频率(Fst1、Fst2)的归一化频率wp1、wp2、ws1、ws1是否在[0,1]之间,如不正确显示错误对话框,
Fs_value=str2double(get(handles.Fs,'String'));
Fp1_value=str2double(get(handles.Fp1,'String'));
wp1=2*Fp1_value/Fs_value;%如果不在[0,1]之间,显示输入错误对话框
if(wp1>=1)
errordlg('wp1=2*Fp1/Fs,归一化频率不在【0,1】之间,请输入正确的参数','错误信息')
end
3.5GUI整体界面
四.课程设计总结
1、GUI是实现人机交互的中介,具有强大的功能,可以完成许多复杂的程序模块。
使用它,需要具有一定的知识储备和必要的经验技巧。
并且要充分利用好MATLAB 的帮助文档,仔细研读HELP是最好的办法。
需要了解函数句柄等必要基础知识,熟悉各控件对象的基本属性和方法操作,知晓不同控件的合适使用条件及其特有的功能,并会采用不同的使用手段来实现相同功能的设计。
同时还需要详细掌握菜单和控件。
菜单很简单,就是弄清除菜单之间的关系和如何调用就可以。
控件的使用主要是用好CreateFcn和Callback属性。
CreateFcn中的语句就是在程序运行时,就立即执行脚本。
如果希望界面可控,那么最好用Callback属性。
在相应控件下,添加相应的脚本就可以实现比较复杂计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 课程设计 报告 数字 听诊器