数字信号处理课程设计
题目:虚拟电子琴设计
、
学院:电气工程
班级:
学号:
指导老师:
教师职称: 教授 讲师
电气工程学院《课程设计》任务
课程名称: “单片机原理及应用——数字信号处理”课程设计
基层教学单位:电气工程学院 指导教师:谢平 杜义昊
目录
第1章 摘要……………………………………………4
第2章 系统总体设计方案 …………………………5
2.1 参数..................................5
2.2 正弦信号的实现.......................6
2.3 设计过程..............................7
2.4 控制界面设计...........................7.
2.5 matlab编程.........................................................
第3章 实际应用 ……………………13
第7章 课设心得及总结……………………………… 14
参考文献………………………………………………14
一.摘 要
随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本论文设计一个基于单片机的简易电子琴。我们对于电子琴如何实现其功能,如声音强弱控制、节拍器、自动放音功能等等也很好奇。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用MCS51单片机为核心控制元件, 利用Matlab设计基于虚拟琴键的信号发生器设计一个电子琴。以单片机作为主控核心,,在主控模块上设有7个按键和扬声器。用matlab设计操作界面,借助串口与单片机模块联系起来,控制单片机蜂鸣器发出七个音,并对音阶各项参数进行分析。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价。特别是新型智能手机就可以运用此款功能。
二.系统总体设计方案
2.1 参数
均值:
对于一个随机变量来说,均值是一个很重要的数值特征。粗略的说,就是来描述一个群体的平均水平。其严格的数学定义非常的简单,就是一个随机变量关于概率测度的积分。这样的积分在测度轮或者实分析里是没有什么直观的解释的。而在概率论里却成为了一个群体的主要指标。在此处,均值表示肌电信号的平均水平。
标准差:
标准差(Standard Deviation) ,也称均方差(mean square error),是各数据偏离平均数的距离的平均数,它是离均差平方和平均后的方根,用σ表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的,标准差未必相同。其求解公式如下:
最大值 :D=max(data);
最小值:E=min(data);
方差:
方差是各个数据与平均数之差的平方的平均数。在概率论和数理统计中,方差(英文Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。在许多实际问题中,研究随机变量和均值之间的偏离程度有着很重要的意义。其求解公式如下:
峰峰值:
在定的时间范围内,正向与负向峰值之差。
2.2、正弦信号的实现
Matlab程序提供了常用的各种基本信号的生成函数。本设计中主要应用正弦信号,直接调用matlab提供的函数。
正弦信号的数学表达式如下(2.1)所示
(2.1)
其中:A为幅值;为频率;为相位。
在matlab中,将时间变量离散化并构成一个一维数组,如下式(2.2)所示
(2.2)
其中:为采样频率。
相应的正弦波信号的数字信号表达式如下(2.3)
2.3设计过程
第一,设计7种不同频率的信号发生器对应七种不同的音调;
第二,对这七种不同频率的信号进行时域和频域分析,计算一些参数值进行对比;
第三,使用GUI界面,设计虚拟电子琴界面,其中包括时域和频域图形显示模块,频率,幅值等参数显示模块,虚拟琴键模块等。
2.4控制界面设计
主要分成三部分:第一为波形显示区,显示相应音频信号的时域和频域波形;第二为按键区,用于虚拟琴键实际操作;第三为参数显示区,通过调用matlab中函数,计算相应的参数值,进行分析和对比。
虚拟琴键的信号发生器设计界面如下
点相应的键,会产生频域时域波形和相应的技术指标
2.5matlab编程
当GUI界面创建完成之后,点击运行即可自动生成包含各个控件回调函数在内的m文件。Matlab对于编辑文本,按钮等空间的相应都是通过自动调用相应的回调函数来实现的。回调函数即在一定的操作下自动执行的指令代码。
1 matlab对串行口编程控制主要分为四个步骤。
1)创建串口设备对象并设置其属性
2)打开串口设备对象
3)读/写串口操作
4)关闭并清除设备对象
function []=dtmf_series(Key)
ss=serial('com1'); %创建串口1设备对象ss
ss.BaudRate=2400;%波特率为2400b/s
ss.DataBits=8;%通讯数据格式为8位数据位
ss.Parity='none';%无奇偶校验位
ss.StopBits=1;%1位停止位
ss.TimeOut=60;%设置一次读或写操作最大完成时间60s
ss.DataTerminalReady='off';%数据终端准备
ss.RequestToSend='off';%请求发送
ss.FlowControl='none';%流量控制
ss.InputBufferSize=1000;%输入缓冲区
fopen(ss);%打开串口设备对象
fwrite(ss,Key);%写串口,发送握手信号key
%释放串口设备对象
fclose(ss);%关闭串口设备对象
delete(ss);%删除内存中串口设备对象
clear ss%清除工作空间中串口设备对象
end
2 根据回调函数找到琴键1的主函数位置,在对应下面编写。其他音阶函数和琴键1类似
global ss;
r=1;
dtmf_series(r);
t=0:0.0001:0.01;
A=3;
f=440;
p=0;
y=A*sin(2*pi*f*t+p);
set(gcf,'CurrentAxes',handles.axesTime);
plot(t,y)
axis([0 0.01 -5 5])
xlabel('time(s)');
ylabel('amplitude');
title('ʱÓò²¨ÐÎ');
grid on;
fs=1000;
frequency_domain(handles,y,fs);
[A,B,C,D,E,F]=index_calculation(y);
% 计算各参数值
set(handles.textMean,'string',num2str(A));%平均值
set(handles.textStd,'string',num2str(B));%标准差
set(handles.textVar,'string',num2str(C));%方差
set(handles.textMax,'string',num2str(D));%最大值
set(handles.textMin,'string',num2str(E));%最小值
set(handles.textPeak,'string',num2str(F));%峰峰值
set(handles.text23,'string',440); %频率值
3 音频信号载入(music)
function pushbutton10_Callback(hObject, eventdata, handles)
global d;
d=load('music.txt');
%时域
time_domain(handles,d);
fs=1000; %采样频率
%频域
frequency_domain(handles,d,fs);
[A,B,C,D,E,F]=index_calculation(d);
set(handles.textMean,'string',num2str(A));
set(handles.textStd,'string',num2str(B));
set(handles.textVar,'string',num2str(C));
set(handles.textMax,'string',num2str(D));
set(handles.textMin,'string',num2str(E));
set(handles.textPeak,'string',num2str(F));
%for循环语句实现音频信号自动每隔0.3s传输一个频率的音节
global i;
for i=1:42
dtmf_series(d(i,1));
pause(0.3);
end
三 实际应用
可以将此功能程序写入手机里,设计一款可以在手机弹钢琴的软件。为智能手机设计的钢琴键盘模拟器,是最简单实用的手机电子钢琴。使用真实的钢琴声音,可以使用这个应用程序,准确地学习钢琴。
四心得体会
通过本次数字信号处理的课程设计,使我对声音信号的分析及合成有了初步的了解。这次对声音信号的分析及合成主要是对信号在频域进行分析,所以使我对数字信号处理及傅里叶变换的实际应用有了深刻的理解,尤其加深了我对快速傅里叶变换的理解。在这次课程设计中,我还对hilbert变换的应用有了一定的理解,在提取信号包络时,hilbert变换是非常便捷的。
这次课程设计还用到了matlab软件,通过这次课设使我对matlab编程有了一定的理解。刚开始接触matlab,觉得无从下手,但经过这两周时间的学习,我通过查阅有关matlab的介绍文献以及和周围同学的讨论,已经能初步完成一些简单的语言编程,这使我感到非常有成就感,使我体会到了自主学习的乐趣。
最后,感谢老师和研究生学长的不倦教导与帮助。在课设过程中,我们遇到很多困难,是学长细心地知道帮助解决了难关。
参考文献
[1]信号处理原理及应用 谢平 林洪彬 王娜编著 机械工业出版社
[2] Matlab 通信仿真与应用 刘敏 魏玲编著 国防工业出版社
[3]基于Matlab7.x 的系统分析与设计 楼顺天等编著 西安电子科技大学
[4]基于声卡和MATLAB的语音信号采集和处理 陈宇锋编著 中国现代教育装备
[5]数字信号处理 孙洪等译 电子工业出版社
燕山大学专业综合训练评审意见表
第二篇:数字信号处理2
课程设计任务书
学生姓名: 专业班级:
指导教师: 工作单位:
题 目:IIR高通滤波器的设计
初始条件:
具备数字信号处理的理论知识;
具备Matlab编程能力;
熟悉高通滤波器的设计原理;
提供编程所需要的计算机一台
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、设计阻带截止频率为200Hz的IIR数字高通滤波器
2、独立编写程序实现
3、完成符合学校要求的设计说明书
时间安排:
一周,其中3天程序设计,2天程序调试
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
目 录
摘要... 1
1 设计项目要求与说明... 2
2. 设计思路... 2
2.1 思路分析... 2
2.2 理论计算... 3
3 仿真程序的设计与调试... 4
3.1 数字域指标变换成模拟域指标... 4
3.2 预畸变... 4
3.3 模拟滤波器的设计... 4
3.4 模拟滤波器变成数字滤波器... 6
3.5 理论计算数字滤波器的仿真... 7
4.调试函数总结... 9
5. 总结与体会... 10
参考文献... 11
附录一... 12
本科生课程设计成绩评定表... 15
摘要
数字滤波器是数字信号分析中最重要的组成部分之一,数字滤波与模拟滤波相比,具有精度和稳定性高、系统函数容易改变、灵活性高、不存在阻抗匹配问题、便于大规模集成、可实现多维滤波等优点。
此报告重点介绍了用双线性不变法设计IIR数字高通滤波器的基本流程,总结了模拟滤波器的性能特征。最后以双线性不变法设计了一个高通巴特沃斯IIR数字滤波器,介绍了设计步骤,然后在Matlab环境下进行了仿真与调试,实现了设计目标。
关键词:Matlab 双线性不变法 IIR数字高通滤波器
1 设计项目要求与说明
课题要求设计一个阻带截止频率为200HZ的IIR数字高通滤波器,采用双线性变换法,用巴特沃斯实现,用matlab软件对其进行仿真与调试。本设计先说明用双线性法设计IIR数字滤波器的原理,然后写出了基于matlab的软件设计流程,最后对设计进行调试,分析实验数据。
2. 设计思路
2.1 思路分析
IIR高通滤波器设计的主要方法是先设计一个低通模拟滤波器,然后转换为高通数字滤波器。在设计的全过程的各个步骤,matlab都提供相应的工具箱函数,使得IIR数字滤波器设计变得非常简单。总的来说,我的设计思路主要有以下两种:
1.从模拟低通原型出发,先经频率变换成为高通模拟滤波器;然后进行双线性变换,再由S域变换到Z域,得到高通数字滤波器。
2.先进行双线性变换,将模拟低通滤波器变换成数字低通滤波器;然后在Z域内经数字频率变换为所需类型的数字滤波器。
以上两种思路都可以,我选择了第二种思路进行设计。
另外,由于冲激响应不变法的映射z=esT 不是简单的代数映射,从而使所设计的数字滤波器的幅频响应产生失真,所以冲激响应不变法仅仅适用于基本上是限带的低通或带通滤波器;对于高通或带阻滤波器不宜采用冲激响应不变法,否则要加保护滤波器,滤掉高于折叠频率以上的频率,以避免混叠失真。所以我选择用双线性变换法。
2.2 理论计算
由所给的数字高通滤波器技术指标理论计算所需的模拟低通滤波器的参数。
设计数字高通的要求为:阻带截止频率fs=200HZ,假设阻带内最小衰减为αs,通带截止频率fp, 通带内最大衰减为αP,采样频率为FS。高通滤波器是分段常数的滤波器,双线性变换后,各个分段边缘的临界频率点会发生畸变,为了弥补这种畸变,必须先预畸变,即:
ΩP= tan( ) ΩT= tan( )
wp=2*pi*fp; wt= 2*pi*ft;
将数字滤波器的频率指标{Wk}由wk=(2/T)tan(Wk/2)转换为模拟滤波器的频率指标{wk},高通变低通,再推算所需的低通模型,
;;
;
由上式可计算出N,查表可得模拟低通滤波器的阶数,从而由下式确定模拟高通滤波器的参数。
3 仿真程序的设计与调试
3.1 数字域指标变换成模拟域指标
fp = 300 ; fs= 200;
rp = 1; rs = 20;
wp =fp*2*pi;
ws =fs*2*pi;
FS=1000;
所以:wp=1.885e+003
ws=1.256e+003
3.2 预畸变
Wp=wp/FS; Ws=ws/FS; %先归一化处理
wp2=2*tan(Wp/2)/T; %预畸变
ws2=2*tan(Ws/2)/T;
经过预畸变,可以发现频率变为:
wp2= 2.7528e+003
ws2= 1.4531e+003
3.3 模拟滤波器的设计
%设计模拟滤波器
[N,Wn] = buttord(wp2,ws2,Rp,Rs,'s') %有‘s’,表示模拟Butterworth
[z,p,k]=buttap(N); %创建Buttord低通滤波器原型
[Bap,Aap]=zp2tf(z,p,k); %由零极点转换为传递函数的形式
figure(1)
freqs(Bap,Aap); %画出频率响应
title('模拟低通的频率响应')
[Bbs,Abs]=lp2hp(Bap,Aap,Wn); %模拟低通变高通
figure(2)
freqs(Bbs,Abs);
title('模拟高通的频率响应')
程序执行后可以发现其频率响应为:
图3-1 模拟高通的频率响应
由上图分析可得:其符合高通的一般特征,与预期的效果一样。
而在此条件下,低通原型的波形如下图:
图3-2模拟低通的频率响应
在设计的过程中,涉及一个频率变换的问题,即将模拟低通原型变为高通,其函数及用法如下:
[b,a]=lp2hp(Bap,Aap,Wn);
功能:把模拟滤波器原型转换成截至频率为 Wn 的高通滤波器。
其中,Bap,Aap分别为低通传递函数的分子向量和分母向量;
b,a分别为高通传递函数的分子向量和分母向量。
3.4 模拟滤波器变成数字滤波器
用双线性变换法设计数字滤波器程序为:
[Bbz,Abz]=bilinear(Bbs,Abs,FS);
freqz(Bbz,Abz,512,FS);
程序运行的结果为:如下图:
图3-3 数字高通的频率响应
由于使用的是双线性不变法设计的,其相位为非线性。此处主要是基于要获得严格的频率响应,以及较准确地控制截止频率的位置,故画出了详细的幅频响应,如下图:
图3-4 详细的幅频响应
分析该图可知其在0.4(即200Hz)处的衰减为20dB,而在0.6(即300Hz)处的衰减极小,应小于1dB。由此可见,此设计符合要求设计的参数。在调试的过程中发现:通带衰减越小,阻带衰减越大,滤波器的性能越好,其曲线也越陡峭,选择性越好,当然所用的滤波器阶数也越高。
3.5 理论计算数字滤波器的仿真
wp=0.6*pi;
ws=0.4*pi;
OmegaP=2*1000*tan(wp/2);
OmegaS=2*1000*tan(ws/2);
lamdas=OmegaP/OmegaS;
N=0.5*log10((10.^(20/10)-1)/(10.^(1/10)-1))/log10(lamdas);
%笔算的结果为N=4.6507;故取N=5
%此处为计算高通的传递函数
Wn= 4.8890e+003
az=[0 0 0 0 1];
bz=[1 2.613 3.414,2.613,1];
[Bbs,Abs]=lp2hp(az,bz,Wn);
%用双线性不变法处理
[Bbz,Abz]=bilinear(Bbs,Abs,1000);
其运行结果为:N=5;图形如下:
图3-5 理论计算的滤波器的幅频响应
综上所述,本滤波器以5阶即实现了预期的设计目标:采样频率为1000Hz,通带临界频率fp =300Hz,通带内衰减小于1dB(αp=1);阻带临界频率fs=200Hz,阻带内衰减大于20dB,其在通带内的性能更好。
4.调试函数总结
1. 在使用巴特沃斯函数获取其阶数时发现,调用函数时思路要清,对
[N,Wn] = buttord(wp2,ws2,Rp,Rs,'s'),当有‘s’时,其表示的是模Butterworth滤波器,而缺省时是数字Butterworth滤波器。
2. freqs(Bbs,Abs)与freqz(Bbz,Abz,512,FS)刚开始时分得不是很清楚,后来发现前者是求模拟域频率响应的,而后者是求数字域频率响应的。后者的用法如下:[[h,w]=]freqz(b,a,n[,’whole’])或[h,f]=freqz(b,a,n[,’whole’],Fs)式中,b,a为数字滤波器分子和分母多项式的系数,n为复数频率的响应点数,为整数,最好为2的幂,缺省时为512;Fs为采样频率,单位Hz。如果给定该值,则f位置输出为频率Hz,’whole’表示返回的频率f或w值包含z平面整个单位圆频率矢量,即0~2; h为复频率响应;w为n点频率向量(单位rad);f为n点频率向量(Hz),函数返回值缺少时,则绘制幅频响应和相频响应图
3 [n,Wn]= buttord(Wp,Ws,Rp,Rs)
9 N6 K5 o: N6 Q' 其中Wp和Ws分别是通带和阻带的截止频率,其取值范围为0至1之间,Rp和Rs分别是通带和阻带区的波纹系数。
4 . [b,a]=butter(n,Wn,/ftype/)
其中n代表滤波器阶数,Wn代表滤波器的截止频率,这两个参数可使用buttord函数来确定。buttord函数可在给定滤波器性能的情况下,求出巴特沃斯滤波器的最小阶数n,同时给出对应的截止频率Wn。
5. 总结与体会
在课设之前,我对MATLAB软件,特别是滤波器设计中的函数基本上处于一种模糊状态。通过在学校的电子资源的期刊网上找了些论文资料,借阅图书,一点一滴的自学,以及和同学不断的交流,最后完成了这次课设,对滤波器的设计有了比较清楚的了解。
在课程设计的过程中,我学到了很多东西,比如设计滤波器的一些基本函数的用法,各种模拟滤波器的特性,设计滤波器的一些基本方法。但更为重要的是,我对于解决一个问题的思路更加清晰,找到了属于自己的方法。当然,在设计的过程中,不可能避免的遇到了很多问题,如刚开始思路比较混乱,没有明确的方向。主要是如何将理论计算的模型转换为仿真模型。因为在理论上,将低通转换成高通,一般是变换将高通频率特征转换成低通原型频率特征;而在软件设计中,是对其传递函数进行修改,即变换其z域的表达式,设计初期一直不知道如何将其联系起来。后来发现,其实变换传递函数,也就是变换频率特征,是将变换后的频率代入原低通模型,而后得到高通模型的。
总的来说,这次课程设计让我对MATLAB有了更深刻的了解,对数字滤波器的设计流程有了大致的了解,掌握了一些设计滤波器的基本方法,提高了理论用于实践的能力,掌握了更多专业相关的使用知识与技能。同时,也暴露了我很多的不足,在以后的学习中,将进一步发扬有点,克服缺点。
参考文献
[1]刘泉,阙大顺,郭志强·数字信号处理(第二版)·电子工业出版社·2009
[2] 郭仕剑·MATLAB7.X数字信号处理·人民邮电出版社·20##年
[3] 陈贵明·用MATLAB语言处理数字信号与数字图像·科学出版社·20##年
[4] 王家文·MATLAB7.0图形图像处理·国防工业出版社·20##年
[5] 苏金明·MATLAB图形图像·电子工业出版社·2005
附录一
总程序:
fp = 300 ; fs = 200;
Rp = 1; %通带最大衰减Rp=1dB
Rs = 20; %阻带最小衰减Rs=20dB
wp =fp*2*pi; %把数字域滤波器特征换成模拟滤波器
ws =fs*2*pi;
FS=1000;T=1/FS
Wp=wp/(FS); %归一化数字频率
Ws=ws/(FS);
wp2=2*tan(Wp/2)/T; %预畸变求滤波器通带临界频率
ws2=2*tan(Ws/2)/T; %预畸变求滤波器阻带临界频率
%设计模拟滤波器
[N,Wn] = buttord(wp2,ws2,Rp,Rs,'s')
[z,p,k]=buttap(N); %创建Buttord低通滤波器原型
[Bap,Aap]=zp2tf(z,p,k); %由零极点转换为传递函数的形式
figure(1)
freqs(Bap,Aap); %模拟低通滤波器的频率响应
title('模拟低通的幅度响应和相位响应')
[Bbs,Abs]=lp2hp(Bap,Aap,Wn); %模拟低通变高通
figure(2)
freqs(Bbs,Abs);
title('模拟高通的幅度响应和相位响应')
%用双线性不变法变换成数字滤波器
[Bbz,Abz]=bilinear(Bbs,Abs,FS); %双线性变换
%求其频率响应
figure(3)
freqz(Bbz,Abz,512,FS);
title('数字滤波器的频率响应')
%详细显示数字滤波器的幅频响应
[hw,w]=freqz(Bbz,Abz,512);
figure(4)
plot(w/pi,20*log10(abs(hw)));
grid
axis([0,1,-200,10])
title(' Butterworth Type Highpass Digital Filter')
xlabel('w/pi');
ylabel('幅度(dB)');
%下面将笔算的结果仿真
wp=0.6*pi;
ws=0.4*pi;
OmegaP=2*1000*tan(wp/2);
OmegaS=2*1000*tan(ws/2);
lamdas=OmegaP/OmegaS;
N=0.5*log10((10.^(20/10)-1)/(10.^(1/10)-1))/log10(lamdas);
%笔算的结果为N=4.6507;故取N=5
%此处为计算高通的传递函数
Wn= 4.8890e+003
az=[0 0 0 0 1];
bz=[1 2.613 3.414,2.613,1];
[Bbs,Abs]=lp2hp(az,bz,Wn)
%用双线性不变法处理í
[Bbz,Abz]=bilinear(Bbs,Abs,1000);
%画图
[hw,w]=freqz(Bbz,Abz,512);
figure(5)
plot(w/pi,20*log10(abs(hw)));
grid
axis([0,1,-200,10])
set(gca,'XTickMode','manual','XTick',[0,Ws/(pi),Wp/(pi),1]);grid
set(gca,'YTickMode','manual','YTick',[-200,-Rs,-Rp,10]);grid
title(' 理论计算的滤波器的幅频响应')
xlabel('w/pi');
ylabel('幅度(dB)');
本科生课程设计成绩评定表
指导教师签字:
年 月 日