3.4显示模块的设计
采用波形图显示滤波前后的波形及其频谱。
开始采用的是波形图表,因为波形图表会保留来源于此前更新的历史数据,因此图形越来越密,不易观察。
频谱
只采用傅里叶变换显示了幅度谱。
四总体及调试
由于滤波器对信号的分析要求循环进行,而整个过程都希望是认为控制的,因此框图程序里采用了一个While循环结构。
所设计的滤波器可以进行IIR和FIR两种滤波方式,并且要实现滤波器的选择,因此采用了一个实现滤波器的选择,选用了滤波器及滤波方式的枚举。
为了验证所设计滤波器的滤波效果,将混有噪声的正弦信号经IIR滤波器滤波,IIR滤波器选择BUTTERWORTH带通滤波方式,滤波器的参数设置为:
fl=0.125Hz,fh=0.45Hz,采样频率fs=1s。
滤波后噪声得到了有效抑制,滤波效果良好。
以IIR数字滤波器中的几种模拟滤波器原型而言,Butterworth型IIR滤波器具有单调下降的幅频特性;Chebyshev型幅频特性在通带或者在阻带有波动,可以提高选择性;而Ellipse其选择性相对前三种是最好的。
譬如
(1)对于公式sin(w*t)+sin(2*w*t)
1.加窗FIR窗:
矩形低通波形图如下:
加窗FIR窗:
矩形高通波形图如下:
其中高通、低通、带通、带阻可以自由选择。
2.IIR椭圆滤波器阶数4低通波形如下:
IIR贝塞尔滤波器阶数4低通波形如下:
在IIR中可以选择多种滤波器功能,如切比雪夫、巴特沃斯等。
(2)对于公式sin(w*t)+rand(10)
1.FIR滤波器矩形窗低通
2.IIR椭圆滤波器阶数4低通波形如下:
后面板的程序图
五设计心得
通过这次实验,在调试的过程中我巩固了学过了的滤波器知识,进一步学会了部分数组,簇,傅里叶变换的用法,同时锻炼了实验设计的思维。
在某些问题上,与同学进行某些讨论,更加使得自己对于实验设计的认识加深。
比如:
对于噪声的问题上,很多同学利用噪声发生器来提供噪声。
但噪声的随机性比较大,不利于波形的观察与对比。
于是在最后我们组果断的省去了这个,而是利用公式提供一个具体的噪声,不仅便于观察,而且对于高通、低通的分析比较清晰。
对于波形的刻度归一化问题上,我们组经过调式,发现它与缩放因子有关,只要适当的倍数增加就可以使得,刻度相同。
光理论性的东西是很肤浅的,实践才是最好的验证。
设计任务书
(二)
【设计题目】
红外语音介绍机设计
【设计目的】
1.锻炼综合运用知识的能力。
通过查阅资料,能独立进行电子小系统的设计。
2.进一步锻炼电子技术的综合设计能力,并对单片机技术有一个更加全面的了解。
【设计指标与要求】
利用SPCE061A或者51单片机设计一个红外语音介绍机。
当顾客停留在介绍机前时,介绍机自动用语音对某个物品能进行详细介绍。
介绍语音能在10秒以上,并且可以随时更改重录,录入的语音可以永久保存在芯片中,不会因为断电原因而丢失。
要求:
1.使用红外传感器元件;
2.使用SPCE061A或者51单片机;
3.电路简单实用。
【作品提交要求】
1.写出详细设计方案和设计电路图;
2.写出系统调试测试报告;
3.写出设计总结。
1、概述
1.1设计背景和意义
随着社会的发展,科技的进步,越来越多的电子产品智能化,这给我们生活和工作带来了很大的方便。
智能化的电子产品在商业中的应用也很广泛,最常见的是各大商店的自动语音介绍机,它不仅给各大店主带来了方便,还减轻了人力资源的利用,所以在科技化的今天我们对红外语音介绍机的设计也变得有必要,这也可以增强我们学生的动手能力
1.2设计目的
1.、锻炼综合运用知识的能力。
通过查阅资料,能独立进行电子小系统的设计。
2.、进一步锻炼电子技术的综合设计能力,并对单片机技术有一个更加全面的了解。
1.3设计指标与要求
利用SPCE061A或者51单片机设计一个红外语音介绍机。
当顾客停留在介绍机前时,介绍机自动用语音对某个物品能进行详细介绍。
介绍语音能在10秒以上,并且可以随时更改重录,录入的语音可以永久保存在芯片中,不会因为断电原因而丢失。
要求:
1、使用红外传感器元件;
2、使用SPCE061A或者51单片机;
3、电路简单实用。
2、设计方案及模块介绍
2.1整体思路
当顾客所辐射的红外线在热释电红外传感器的探测元上感应停留三秒以上时,热释电红外传感器将输出电压信号,然后经信号放大电路放大后送入红外传感信号处理器,经处理后向单片机输出高电平。
由单片机控制语音芯片放音介绍商品。
介绍语音在10秒以上。
系统主要由红外采集模块,信号处理模块,录音模块、录音存储模块、语音介绍模块、电源模块组成。
2.2模块介绍
2.2.1红外采集模块:
红外检测电路的功能是由热释电红外探头P288来实现。
它将数据采集、A/D转换、比较判断等功能集成于一体。
2.2.2信号处理模块:
由于热释电红外传感器输出的探测信号电压十分微弱(通常仅有1mV左右),而且是一个变化的信号,同时菲涅尔透镜的作用又使输出信号电压呈脉冲形式(脉冲电压的频率由被测物体的移动速度决定,通常为0.1~10Hz左右),所以应对热释电红外传感器输出的电压信号进行放大。
放大后的信号在送入单片机处理控制之前,采用专用红外传感信号处理器BIS001进行预处理,以供单片机使用。
2.2.3录音模块:
系统采用脱机工作模式下的语音录放系统。
语音录放通过SPCE061A开发板上的设置按键实现。
同时,系统可以实现USB的基本功能:
通过USB设备将存储芯片中的语音文件上传到PC机中,通过软件将语音文件转换成WAV文件,并在PC机中播放出来;也可以通过USB设备将PC机中的语音文件下载到存储器模组中,通过按键选择播放。
基于单片机的语音录入和播放系统组成如图1所示。
系统机构中语音录音部分是把语音声波信号经过话筒和放大器转换成具有一定幅度的模拟电信号,再转换成计算机能够存贮、处理的数字量信号。
系统语音播放是将存储器中存储的语音数据顺序取出,通过MCU进行D/A转换输出,经过电容滤波后,恢复原始语音波形,通过驱动扬声器放音。
系统中对于语音信号的离散处理是将模拟(连续)的声音波形数字元化(离散化),便于数字计算机进行处理。
而数字音频的处理主要包括采样和量化两个部分。
由于系统采用自带A/D、D/A电路
单片机SPCE061A实现模拟信号与数字信号之间的相互转换,所以开发的主要工作放在语音录入和播放系统程序设计、单片机与存储器模组连接和功能实现以及单片机与USB模组的连接和功能实现。
3.硬件部分
3.1电路图(如下)
BIS0001红外传感器信号处理器的原理框图。
外界元件由使用者根据需要选择。
由图可见BISS0001是由运算放大器、电压比较器和状态控制器、延迟时间定时器、封锁时间定时器及参考电压源等构成的数模混合专用集成电路。
可广泛应用于多种传感器和延时控制器。
各引脚的定义和功能如下:
⏹VDD—工作电源正端。
范围为3~5V。
⏹Vss—工作电源负端。
一般接0V。
⏹IB—运算放大器偏置电流设置端。
经RB接VSS端,RB取值为1M左右。
⏹1IN-—第一级运放放大器的反相输入端。
⏹1IN+—第一级运放放大器的同相输入端。
⏹1OUT—第一级运算放大器的输出端。
⏹2IN-—第二级运算放大器的反相输出端。
⏹2OUT—第二级运算放大器的输出端。
⏹Vc—触发禁止端。
当Vc<VR时禁止触发;当VC>VR时允许触发。
VR≈0.2VDD。
⏹VRF—参考电压及复位输入端。
一般接VDD。
接“0”时可使定时器复位。
可重复触发和不可重复触发控制端。
当A=“1”时,允许重复触发,当A=“0”时,不可重复触发。
Vo—控制信号输出端。
由Vs上跳边沿触发使Vo从低电平跳变到高电平时为有效触发。
在输出延时间Tx之外和无Vs上跳变时Vo为低电平状态。
RR1RC1—输出延迟时间Tx的调节端。
Tx≈49152R1C1。
RR2RC2—触发封销时间Ti的调节端。
Tx≈24R2C2。
BISS0001芯片的2脚接输出,调试面包板上的电路,当人走近在红外感应范围内是2脚输出为高电平,当人离开时2脚变为低电平
3.2单片机连接
将喇叭电池和SPCE061A单片机连接好,利用下载线将程序下载到单片机内部,然后开始录音,K1开始录音,K3停止录音,K2播放录音,录音做好后将单片机和面包板上的电路连接起来,BISS0001芯片的2号脚输出接到单片机b1,调试整个电路。
4软件部分
C程序:
软件部分参考单片机光盘程序在加一个延时程序
//======================================================
//Theinformationcontainedhereinistheexclusivepropertyof
//SunnnorthTechnologyCo.Andshallnotbedistributed,reproduced,
//ordisclosedinwholeinpartwithoutpriorwrittenpermission.
//(C)COPYRIGHT2003SUNNORTHTECHNOLOGYCO.
//ALLRIGHTSRESERVED
//Theentirenoticeabovemustbereproducedonallauthorizedcopies.
//========================================================
//============================================================
//工程名称:
61_Record
//功能描述:
61板程序示例--简易复读机
//使用61板上的三个按键控制录放音,约可录制20秒的声音
//Key1-录音
//Key2-播放录音
//Key3-停止录/放音
//涉及的库:
CMacro1016.lib
//SacmV26e.lib
//组成文件:
main.c
//Flash.asm,hardware.asm,ISR.asm,Key.asm,sram.asm
//Flash.h,DVR.h,Key.h,SPCE061A.h,DVR.inc,Key.inc,SPCE061A.inc
//硬件连接:
61板自带的三个按键已经连接在IOA0~IOA2上
//维护记录:
2006-8-30v1.0
//===============================================
//======================================================
//文件名称:
main.c
//功能描述:
主程序以及录音、放音子程序
//维护记录:
2006-08-30v1.0
//======================================================
#include"spce061a.h"
#include"Flash.h"
#include"DVR.h"
#include"Key.h"
#defineSTART_ADDR0xA000//定义录音起始地址
#defineEND_ADDR0xFBFF//定义录音结束地址
#defineP_IOB_Data(volatileunsignedint*)0x7005//定义P_IOB_Data指针,使其指向0x7005的地址单元
#defineP_IOB_Buffer(volatileunsignedint*)0x7006//定义P_IOB_Buffer指针,使其指向0x7006的地址单元
#defineP_IOB_Dir(volatileunsignedint*)0x7007//定义P_IOB_Dir指针,使其指向0x7007的地址单元
#defineP_IOB_Attrib(volatileunsignedint*)0x7008//定义P_IOB_Attrib指针,使其指向0x7008的地址单元
//=============================================================
//语法格式:
voidPlayRecord(void);
//实现功能:
播放录音
//参数:
无
//返回值:
无
//=============================================================
voidPlayRecord()
{
unsignedlongAddr,EndAddr;
unsignedintRet;
SACM_DVR_Initial(0);//初始化放音
SACM_DVR_InitQueue();//初始化解码队列
SACM_DVR_InitDecoder(3);//初始化解码算法,声音由DAC1和DAC2输出
Addr=START_ADDR+1;
EndAddr=Flash_ReadWord(START_ADDR);//从录音首地址中读出录音结束地址
while
(1)
{
*P_Watchdog_Clear=0x01;//清看门狗
while(SACM_DVR_TestQueue()!
=1)//如果解码队列未满
{
Ret=Flash_ReadWord(Addr);//取录音数据
SACM_DVR_FillQueue(Ret);//填充入解码队列
Addr++;
if(Addr>EndAddr)break;
}
if((SACM_DVR_Status()&0x01)==0||Key_Get()==KEY_3)//如果播放完毕或Key3键按下则停止
{
SACM_DVR_Stop();//停止播放
break;
}
else
SACM_DVR_Decoder();//数据解码
}
}
//=============================================================
//语法格式:
voidRecord(void);
//实现功能:
录制声音
//参数:
无
//返回值:
无
//=============================================================
voidRecord(void)
{
unsignedintAddr;
unsignedintRet;
for(Addr=START_ADDR;Addr<=END_ADDR;Addr+=0x0100)
{
Flash_Erase(Addr);//擦除录音所需Flash空间
*P_Watchdog_Clear=0x01;
}
SACM_DVR_Initial(0);//初始化录放音
SACM_DVR_InitQueue();//初始化编码队列
SACM_DVR_InitEncoder