① 数字信号处理器的知识简介
DSP的算法有多种。绝大多数的DSP处理器使用定点算法,数字表示为整数或-1.0到+1.0之间的小数形式。有些处理器采用浮点算法,数据表示成尾数加指数的形式:尾数×2指数。
浮点算法是一种较复杂的常规算法,利用浮点数据可以实现大的数据动态范围(这个动态范围可以用最大和最小数的比值来表示)。浮点DSP在应用中,设计工程师不用关心动态范围和精度一类的问题。浮点DSP比定点DSP更容易编程,但是成本和功耗高。
由于成本和功耗的原因,一般批量产品选用定点DSP。编程和算法设计人员通过分析或仿真来确定所需要的动态范围和精度。如果要求易于开发,而且动态范围很宽、精度很高,可以考虑采用浮点DSP。
也可以在采用定点DSP的条件下由软件实现浮点计算,但是这样的软件程序会占用大量处理器时间,因而很少使用。有效的办法是“块浮点”,利用该方法将具有相同指数,而尾数不同的一组数据作为数据块进行处理。“块浮点”处理通常用软件来实现。 所有浮点DSP的字宽为32位,而定点DSP的字宽一般为16位,也有24位和20位的DSP,如摩托罗拉的DSP563XX系列和Zoran公司的ZR3800X系列。由于字宽与DSP的外部尺寸、管脚数量以及需要的存储器的大小等有很大的关系,所以字宽的长短直接影响到器件的成本。字宽越宽则尺寸越大,管脚越多,存储器要求也越大,成本相应地增大。在满足设计要求的条件下,要尽量选用小字宽的DSP以减小成本。
在关于定点和浮点的选择时,可以权衡字宽和开发复杂度之间的关系。例如,通过将指令组合连用,一个16位字宽的DSP器件也可以实现32位字宽双精度算法(当然双精度算法比单精度算法慢得多)。如果单精度能满足绝大多数的计算要求,而仅少量代码需要双精度,这种方法也可行,但如果大多数的计算要求精度很高,则需要选用较大字宽的处理器。
请注意,绝大多数DSP器件的指令字和数据字的宽度一样,也有一些不一样,如ADI(模拟器件公司)的ADSP-21XX系列的数据字为16位而指令字为24位。 处理器是否符合设计要求,关键在于是否满足速度要求。测试处理器的速度有很多方法,最基本的是测量处理器的指令周期,即处理器执行最快指令所需要的时间。指令周期的倒数除以一百万,再乘以每个周期执行的指令数,结果即为处理器的最高速率,单位为每秒百万条指令MIPS。
但是指令执行时间并不能表明处理器的真正性能,不同的处理器在单个指令完成的任务量不一样,单纯地比较指令执行时间并不能公正地区别性能的差异。现在一些新的DSP采用超长指令字(VLIW)架构,在这种架构中,单个周期时间内可以实现多条指令,而每个指令所实现的任务比传统DSP少,因此相对VLIW和通用DSP器件而言,比较MIPS的大小时会产生误导作用。
即使在传统DSP之间比较MIPS大小也具有一定的片面性。例如,某些处理器允许在单个指令中同时对几位一起进行移位,而有些DSP的一个指令只能对单个数据位移位;有些DSP可以进行与正在执行的ALU指令无关的数据的并行处理(在执行指令的同时加载操作数),而另外有些DSP只能支持与正在执行的ALU指令有关的数据并行处理;有些新的DSP允许在单个指令内定义两个MAC。因此仅仅进行MIPS比较并不能准确得出处理器的性能。
解决上述问题的方法之一是采用一个基本的操作(而不是指令)作为标准来比较处理器的性能。常用到的是MAC操作,但是MAC操作时间不能提供比较DSP性能差异的足够信息,在绝大多数DSP中,MAC操作仅在单个指令周期内实现,其MAC时间等于指令周期时间,如上所述,某些DSP在单个MAC周期内处理的任务比其它DSP多。MAC时间并不能反映诸如循环操作等的性能,而这种操作在所有的应用中都会用到。
最通用的办法是定义一套标准例程,比较在不同DSP上的执行速度。这种例程可能是一个算法的“核心”功能,如FIR或IIR滤波器等,也可以是整个或部分应用程序(如语音编码器)。图1为使用BDTI公司的工具测试的几款DSP器件性能。
在比较DSP处理器的速度时要注意其所标榜的MOPS(百万次操作每秒)和MFLOPS(百万次浮点操作每秒)参数,因为不同的厂商对“操作”的理解不一样,指标的意义也不一样。例如,某些处理器能同时进行浮点乘法操作和浮点加法操作,因而标榜其产品的MFLOPS为MIPS的两倍。
其次,在比较处理器时钟速率时,DSP的输入时钟可能与其指令速率一样,也可能是指令速率的两倍到四倍,不同的处理器可能不一样。另外,许多DSP具有时钟倍频器或锁相环,可以使用外部低频时钟产生片上所需的高频时钟信号。 语音处理:语音编码、语音合成、语音识别、语音增强、语音邮件、语音储存等。
图像/图形:二维和三维图形处理、图像压缩与传输、图像识别、动画、机器人视觉、多媒体、电子地图、图像增强等。
军事;保密通信、雷达处理、声呐处理、导航、全球定位、跳频电台、搜索和反搜索等。
仪器仪表:频谱分析、函数发生、数据采集、地震处理等。
自动控制:控制、深空作业、自动驾驶、机器人控制、磁盘控制等。
医疗:助听、超声设备、诊断工具、病人监护、心电图等。
家用电器:数字音响、数字电视、可视电话、音乐合成、音调控制、玩具与游戏等。
生物医学信号处理举例:
CT:计算机X射线断层摄影装置。(其中发明头颅CT英国EMI公司的豪斯菲尔德获诺贝尔奖。)
CAT:计算机X射线空间重建装置。出现全身扫描,心脏活动立体图形,脑肿瘤异物,人体躯干图像重建。
心电图分析。 DSP的性能受其对存储器子系统的管理能力的影响。如前所述,MAC和其它一些信号处理功能是DSP器件信号处理的基本能力,快速MAC执行能力要求在每个指令周期从存储器读取一个指令字和两个数据字。有多种方法实现这种读取,包括多接口存储器(允许在每个指令周期内对存储器多次访问)、分离指令和数据存储器(“哈佛”结构及其派生类)以及指令缓存(允许从缓存读取指令而不是存储器,从而将存储器空闲出来用作数据读取)。图2和图3显示了哈佛存储器结构与很多微控制器采用的“冯·诺曼”结构的差别。
另外要注意所支持的存储器空间的大小。许多定点DSP的主要目标市场是嵌入式应用系统,在这种应用中存储器一般较小,所以这种DSP器件具有小到中等片上存储器(4K到64K字左右),备有窄的外部数据总线。另外,绝大多数定点DSP的地址总线小于或等于16位,因而可外接的存储器空间受到限制。
一些浮点DSP的片上存储器很小,甚至没有,但外部数据总线宽。例如TI公司的TMS320C30只有6K片上存储器,外部总线为24位,13位外部地址总线。而ADI的ADSP2-21060具有4Mb的片上存储器,可以多种方式划分为程序存储器和数据存储器。
选择DSP时,需要根据具体应用对存储空间大小以及对外部总线的要求来选择。 DSP处理器和诸如英特尔、奔腾或Power
PC的通用处理器(GPPs)有很大的区别,这些区别产生于DSPs的结构和指令是专门针对信号处理而设计和开发的,它具有以下特点。
·硬件乘法累加操作(MACs)
为了有效完成诸如信号滤波的乘法累加运算,处理器必需进行有效的乘法操作。GPPs起初并不是为繁重的乘法操作设计的,把DSPs同早期的GPPs区别开来的第一个重大技术改进就是添加了能够进行单周期乘法操作的专门硬件和明确的MAC指令。
·哈佛结构
传统的GPPs使用冯.诺曼存储结构,在这种结构中,有一个存储空间通过两条总线(一条地址总线和一条数据总线)连接到处理器内核,这种结构不能满足MAC必须在一个指令周期中对存储器进行四次访门的要求。DSPs一般使用哈佛结构,在哈佛结构中,有两个存储空间:程序存储空间和数据存储空间。处理器内核通过两套总线与这些存储空间相连,允许对存储器同时进行两访问,这种安排使处理器的带宽加倍。在哈佛结构中,有时通过增加第二个数据存储空间和总线来实现更大的存储带宽。现代高性能GPPs通常具有两个片上超高速缓冲存储器一个存放数据,一个存放指令。从理论的角度上讲,这种双重片上高速缓存与总线连接等同于哈佛结构,但是,GPPs使用控制逻辑来确定哪些数据和指令字驻留在片上高速缓存里,这个过程通常不为程序设计者所见,而在DSPs里,程序设计者能明确的控制哪些数据和指令被存储在片上的存储单元或缓存中。
·零消耗循环控制
DSP算法的共同特征:大部分处理时间花在执行包含在相对小循环内的少量指令上。因此,大部分DSP处理器具有零消耗循环控制的专门硬件。零消耗循环是指处理器不用花时间测试循环计数器的值就能执行一组指令的循环,硬件完成循环跳转和循环计数器的衰减。有些DSPs还通过一条指令的超高速缓存实现高速的单指令循环。
·特殊寻址模式
DSPs经常包含有专门的地址产生器,它能产生信号处理算法需要的特殊寻址,如循环寻址和位翻转寻址。循环寻址对应于流水FIR滤波算法,位翻转寻址对应于FFT算法。
·执行时间的可预测性
大多数DSP应用都具有硬性实时要求,在每种情况下所有处理工作都必须在指定时间内完成。这种实时限制要求程序设计者确定每个样本究竟需要多少时间或者在最坏情况下至少用去多少时间。DSPs执行程序的进程对程序员来说是透明的,因此很容易预测处理每项工作的执行时间。但是,对于高性能GPPs来说,由于大量超高速数据和程序缓存的使用,动态分配程序,因此执行时间的预测变得复杂和困难。
·具有丰富的外设
DSPs具有DMA、串口、Link口、定时器等外设。
② 虚拟数字信号处理分析仪设计
你开玩笑的吧?这是一个大项目了
③ 设计一个数字信号发生器
电子设计大赛赛题,都结束了,测试专家告诉我最好用FPGA。
④ 数字信号课程设计
Matlab在数字信号处理课程设计中的应用
作者:李永全 来源:现代电子技术
摘 要:分析了数字信号处理课程的重要性及特点,为了帮助学生理解与掌握课程中的基本概念、基本原理、基本分析方法,提出了用Matlab进行数字信号处理课程设计的思路,并阐述了课程设计的具体方法、步骤和内容。
关键词:数字信号处理;课程设计;Matlab;频谱分析
1 《数字信号处理》课程的特点
《数字信号处理》课程是一门理论和技术发展十分迅速、应用非常广泛的前沿性学科,他的理论性和实践性都很强,他的特点是:
(1)要求的数学知识多,包括高等代数、数值分析、概率统计、随机过程等。
(2)要求掌握的基础知识强,网络理论、信号与系统是本课程的理论基础。
(3)与其他学科密切相关,即与通信理论、计算机、微电子技术不可分,又是人工智能、模式识别、神经网络等新兴学科的理论基础之一。
学生在学习这门课程时,普遍感到数字信号处理的概念抽象,对其中的分析方法与基本理论不能很好地理解与掌握。因此,如何帮助学生理解与掌握课程中的基本概念、基本原理、基本分析方法以及综合应用所学知识解决实际问题的能力,是本课程教学中所要解决的关键问题。为了配合《数字信号处理》专业基础课的理论教学,我们在电子信息工程专业教学计划中安排了二周的《数字信号处理》课程设计,他是针对《数字信号处理》的基础理论和算法进行实践环节的一个综合训练,以便学习巩固所学的知识,加强理论和实际结合的能力,培养学生的综合设计能力与实际工作能力。
Matlab语言是一种广泛应用于工程计算及数值分析 领域的新型高级语言,Matlab功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。特别是Matlab还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。因此,选择用Matlab进行课程设计。
2 基于Matlab的课程设计
为了巩固所学的数字信号处理理论知识,使学生对信号的采集、处理、传输、显示和存储等有一个系统的掌握和理解,精心地安排了课程设计的内容:录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。下面对各步骤加以具体说明。
2.1 语音信号的采集
要求学生利用Windows下的录音机,录制一段自己的话音,时间在1 s内。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,学生很快理解了采样频率、采样位数等概念。
2.2 语音信号的频谱分析
要求学生首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深学生对频谱特性的理解。其程序如下:
2.3 设计数字滤波器和画出其频率响应
给出各滤波器的性能指标:
(1)低通滤波器性能指标 fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通滤波器性能指标 fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)带通滤波器性能指标 fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As=100 dB,Ap=1 dB。
要求学生用窗函数法和双线性变换法设计上面要求的3种滤波器。在Matlab中,可以利用函数fir1设计FIR滤波器,可以利用函数butte, cheby1和ellip设计IIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。程序如下:
2.4 用滤波器对信号进行滤波
要求学生用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
2.5 比较滤波前后语音信号的波形及频谱
要求学生在一个窗口同时画出滤波前后的波形及频 谱。其程序如下:
2.6 回放语音信号
在Matlab中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。
2.7 设计系统界面
为了使编制的程序操作方便,要求有能力的学生,设计处理系统的用户界面。在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。
3 结语
笔者在电信97,98,99,00四届学生中,采用Matlab进行数字信号处理课程设计,实践证明,使学生加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并能很好地理解与掌握数字信号处理中的基本概念、基本原理、基本分析方法。在课程设计中,让学生录制自己的声音,设计滤波器对声音进行处理,大大激发了同学们的学习兴趣,使学生很快地掌握编程方法和解决实际问题的技巧,取得了良好的教学效果。
参考文献
〔1〕程佩青.数字信号处理教程〔M〕.北京:清华大学出版社,2002.
〔2〕刘敏,魏玲.Matlab通信仿真与应用〔M〕.北京:国防工业出版社,2001.
⑤ 如何用分立式数字电路设计数字信号发生器
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。函数信号发生器的实现方法通常有以下几种:
(1)用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
(2)可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发生器IC产生。早期的函数信号发生器IC,如L8038、BA205、XR2207/2209等,它们的功能较少,精度不高,频率上限只有300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。
(3)利用单片集成芯片的函数发生器:能产生多种波形,达到较高的频率,且易于调试。鉴于此,美国马克西姆公司开发了新一代函数信号发生器ICMAX038,它克服了(2)中芯片的缺点,可以达到更高的技术指标,是上述芯片望尘莫及的。MAX038频率高、精度好,因此它被称为高频精密函数信号发生器IC。在锁相环、压控振荡器、频率合成器、脉宽调制器等电路的设计上,MAX038都是优选的器件。
(4)利用专用直接数字合成DDS芯片的函数发生器:能产生任意波形并达到很高的频率。但成本较高。
设计指标:1.输出为方波和三角波两种波形,用开关切换输出;
2.均为双极性;
3.输出阻抗均为50Ω;
4.输出为方波时,输出电压峰值为0~5V可调,输出信号频率为200Hz~2kHz可调;
5.输出为三角波时,输出电压峰值为0~5V可调,输出信号频率为200Hz~2kHz可调
本项目都切实用到了所学知识,数控电源部分采用数电中的DAC0808数模转换电路以及计数器74LS193构成。信号发生部分全部应用模电知识制作,采用性能优良的集成信号发生芯片ICL8038结合运放电路制成。频率测试部分,用555构成秒脉冲,通过40110来实现计数译码显示。此次制作真正达到了学以至用,理论联系实际的目的。符合理工科学生学习的要求。
当然本次实验参阅了除课程以外的大量参考书籍,通过多种方案论证,最终确立的此课题。由于时间紧,项目大,虽然在规定的时间完成任务,经过多次的修改,但仍然存在不足之处,望专家组批评指正。
⑥ 数字信号处理课程设计
这个问题我来回答哈
采集系统说明:
麦克风输入方式MiclnMATLAB函数
MATLAB中提供了强大的数据采集工具箱(DAQ-Data Acquisition Toolbox),可满足控制声卡进行数据采集的要求:
wavrecord(n,fs,ch,dtype) %记录声音
waveplay(y,fs) %发送向量信号
wavread(file) %读取wave文件
sound(y,fs) %向扬声器送出音频信号
滤波函数说明:
采用Kaiser window FIR:
Sampling Frequency: 8192
Type:Lowpass
Fc:956.6
Beta:5
分帧函数说明:
语音处理工具箱:VOICEBOX Speech Processing Toolboxv5中提供了该函数:
function f=enframe(x,win,inc)
端点检测函数说明:
zcr = sum(signs.*diffs, 2); %计算过零率
amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);
%计算短时能量
【参考书目】
1.《现代语音处理技术及应用》
2.《现代语音技术基础与应用》
3.《语音信号处理》
4.《语音信号处理[专著]》
5.《Visual C++开发工具程序员参考手册》
6. 《信号处理滤波器设计--基于MATLAB和Mathematic》
7. 《数字信号处理及其MATLAB实现》
8. 《MATLAB数字信号详解》
原程序:
【附源程序】
1.界面:
clear
global hpop hlist
clf reset
H=axes('unit','normalized','position',[0,0,1,1],'visible','off');
set(gcf,'currentaxes',H);
str='\fontname{隶书}';
h_fig=get(H,'parent');
set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.6]);
hlist=uicontrol(h_fig,'style','list','unit','normalized',...
'position',[0.7,0.6,0.2,0.2],...
'string','录音|滤波|分帧|端点检测|录音回放','MAX',2);
hpush=uicontrol(h_fig,'style','push','unit','normalized',...
'position',[0.76,0.32,0.1,0.06],'string',{'运行'},'callback',...
'yuyin');
分帧:
function f=enframe(x,win,inc)
nx=length(x);
nwin=length(win);
if (nwin == 1)
len = win;
else
len = nwin;
end
if (nargin < 3)
inc = len;
end
nf = fix((nx-len+inc)/inc);
f=zeros(nf,len);
indf= inc*(0:(nf-1)).';
inds = (1:len);
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));
if (nwin > 1)
w = win(:)';
f = f .* w(ones(nf,1),:);
end
global hlist
B=get(hlist,'value');
switch B
case 1
fs = 11025;
x = wavrecord(5*fs);
subplot('position',[0.001,0.03,1,0.8]),plot(x);...
title('原图');
axis square;axis off
case 2
I=imread('bonemarr.tif');
J=imadjust(I,[0 1],[1 0],1.3);
subplot('position',[0.05,0.6,0.3,0.3]),subplot('position',[0.05,0.6,0.3,0.3]),imshow(I);...
title('原图');
axis square;axis off
subplot('position',[0.38,0.6,0.3,0.3]),imshow(J),title('调整后');
case 3
f=enframe(x,10);
subplot('position',[0.05,0.6,0.3,0.3]),subplot('position',[0.05,0.6,0.3,0.3]),plot(x);...
title('原图');
axis square;axis off
subplot('position',[0.38,0.6,0.3,0.3]),plot(f),title('分帧后');
case 4
[x1,x2] = vad(x)
case 5
wavplay(x);
end
2.检测程序:
www.starlunwen.com
www.starlunwen.com
⑦ 用matlab进行时频信号分析器设计
wp=0.2*pi;ws=0.3*pi;%你没有给出指标,可以自己改
Fs=20000;T=1/Fs;%采样频率可以自己定
OmegaP=(2/T)*tan(wp/2);
OmegaS=(2/T)*tan(ws/2);
rp=1;rs=15;
ripple=10^(-rp/20);attn=10^(-rs/20);
[n,wn]=buttord(OmegaP,OmegaS,rp,rs,'s');
[z,p,k]=Buttap(n);
[b,a]=zp2tf(z,p,k);
[bt,at]=lp2lp(b,a,wn);
[b,a]=bilinear(bt,at,Fs);
[db,mag,pha,grd,w]=freqz_m(b,a);
%
%下面绘出各条曲线
subplot(2,2,1);plot(w/pi,mag);title('幅频特性');
xlabel('w(/pi)');ylabel('|H(jw)|');
axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 1]);
set(gca,'YTickMode','manual','YTick',[0 attn ripple 1]);grid
subplot(2,2,2);plot(w/pi,db);title('幅频特性(db)');
xlabel('w(/pi)');ylabel('dB');
axis([0,1,-30,5]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 1]);
set(gca,'YTickMode','manual','YTick',[-60 -as -rp 0]);grid
subplot(2,2,3);plot(w/pi,pha/pi);title('相频特性');
xlabel('w(/pi)');ylabel('pha(/pi)');
axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 1]);grid
subplot(2,2,4);plot(w/pi,grd);title('群延时');
xlabel('w(/pi)');ylabel('Sample');
axis([0,1,0,15]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 1]);grid
%b,a是滤波器的系数,系统函数根据b和a写出。
%若程序运行有问题可以Hi我
⑧ 请用方框图描述一个你熟悉的实用数字信号处理器系统,并做简要的分析;
matlab里有Demo
⑨ 数字信号课程设计(要源程序)
7.
clc;clear all;
[x1,Fs,bits]=wavread('2.wav');
%sound(y,Fs,bits);
figure(1);
plot(x1); %做原始语音信号的时域图形
title('原始语音信号');
xlabel('time n');ylabel('yinliang n');
figure(2);
y1=fft(x1); %做length(x1)点的FFT
y1=fftshift(y1);%平移,是频率中心为0
derta_Fs = Fs/length(x1);%设置频谱的间隔,分辨率
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(y1));%画出原始语音信号的频谱图
title('原始语音信号的频谱');grid on;
fs=50000;
fc1=1100;
wc1=2*pi*fc1/fs;
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
Window=boxcar(N1+1); %长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(3);
freqz(b1,1,512);
title('低通滤波器的频率响应');
x1_low = filter(b1,1,x1);%对信号进行低通滤波
figure(4);
plot(x1_low);title('信号经过低通滤波器(时域)');
figure(5);
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_low))));
title('信号经过低通滤波器(频域)');
fc2=4900;
wc2=2*pi*fc2/fs;
wp2=2*pi*4800/fs;ws2=2*pi*5000/fs;
N2=ceil(4*pi/(ws2-wp2));
Window=boxcar(N2+1);
b2=fir1(N2,wc2/pi,Window);
figure(6);
freqz(b2,1,512);%数字滤波器频率响应
title('高通滤波器的频率响应');
x1_high = filter(b2,1,x1);%对信号进行高通滤波
figure(7);plot(x1_high);title('信号经过高通滤波器(时域)');
figure(8);plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_high))));
title('信号经过高通滤波器(频域)');
f1=1100;f2=3100; %带通滤波器的通带范围
w1=2*pi*f1/fs; %0.1567=0.0499pi
w2=2*pi*f2/fs; %0.4417=0.1407pi
w=[w1,w2];
N3=ceil(4*pi/(2*pi*200/fs));
b3=fir1(N3,w/pi,'high');%带通滤波器
figure(9);
freqz(b3,1,512);%数字滤波器频率响应
title('高通滤波器的频率响应');
x1_daitong = filter(b3,1,x1);%对信号进行高通滤波
figure(10);plot(x1_daitong);title('信号经过高通滤波器(时域)');
figure(11);
plot([-Fs/2:derta_Fs: Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong))));
title('信号经过带通滤波器(频域)');
sound(x1_low,Fs);
sound(x1_high,Fs);
sound(x1_daitong,Fs);