数字信号实验 窗函数设计滤波器
exp3 FIR滤波器数字信号处理实验
姓名: 马运聪 学号:SA11023903邮箱: macc@实验三 FIR 滤波器一、实验要求1. 掌握窗函数法设计FIR 滤波器的原理和方法,绘制幅频和相位曲线,观察用几种常用窗函数设计的FIR 数字滤波器技术指标;2. 掌握FIR 滤波器的线性相位特性;3. 了解各种窗函数对滤波特性的影响。
二、实验原理(1)用窗函数设计FIR 滤波器的基本方法在时域用一个窗函数截取理想的)(n h d 得到)(n h ,以有限长序列)(n h 近似逼近理想的)(n h d ;在频域用理想的)(ωj d e H 在单位圆上等角度取样得到h(k),根据h(k)得到H(z)将逼近理想的Hd(z)。
设理想滤波器)(ωj d e H 的单位脉冲响应为)(n h d 。
以低通线性相位FIR 数字滤波器为例。
⎰∑--∞-∞===ππωωωωωπd e e H n h e n h e H jn j d d jn n dj d )(21)()()()(n h d 一般是无限长的、非因果的,不能直接作为FIR 滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断)()()(n w n h n h d =,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR 滤波器的单位脉冲响应。
按照线性相位滤波器的要求,h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即⎩⎨⎧-==2/)1()()()(N a n w n h n h d 用矩形窗设计的FIR 低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,(现象称为吉布斯(Gibbs )效应)。
为了改善滤波器的性能,需使窗函数谱满足:主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带;第一副瓣面积相对主瓣面积尽可能小,即能量尽可能集中在主瓣,外泄少,使设计出来的滤波器的肩峰和余振小逼近于理想滤波器。
但是这两个条件是相互矛盾的,实际应用中,折衷处理,兼顾各项指标。
fir滤波器设计实验报告
fir滤波器设计实验报告fir滤波器设计实验报告引言:滤波器是数字信号处理中常用的工具,它能够对信号进行去噪、频率分析和频率选择等处理。
其中,FIR(Finite Impulse Response)滤波器是一种常见的数字滤波器,具有线性相位和稳定性等优点。
本实验旨在设计一个FIR滤波器,并通过实际测试验证其性能。
一、实验目的本实验的目的是通过设计一个FIR滤波器,掌握FIR滤波器的设计方法和性能评估。
具体包括以下几个方面:1. 了解FIR滤波器的基本原理和特点;2. 学习FIR滤波器的设计方法,如窗函数法、最小二乘法等;3. 掌握MATLAB等工具的使用,实现FIR滤波器的设计和性能评估;4. 通过实际测试,验证所设计FIR滤波器的性能。
二、实验原理FIR滤波器是一种非递归滤波器,其输出仅依赖于当前和过去的输入样本。
其基本原理是将输入信号与一组滤波器系数进行卷积运算,得到输出信号。
FIR滤波器的频率响应由滤波器系数决定,通过调整滤波器系数的值,可以实现不同的滤波效果。
在本实验中,我们采用窗函数法设计FIR滤波器。
窗函数法是一种常见的FIR滤波器设计方法,其基本思想是通过对滤波器的频率响应进行窗函数加权,从而实现对信号频率的选择。
常用的窗函数有矩形窗、汉宁窗、布莱克曼窗等。
三、实验过程1. 确定滤波器的要求:根据实际需求,确定滤波器的截止频率、通带衰减和阻带衰减等参数。
2. 选择窗函数:根据滤波器的要求,选择合适的窗函数。
常用的窗函数有矩形窗、汉宁窗、布莱克曼窗等,不同窗函数有不同的性能特点。
3. 计算滤波器系数:根据所选窗函数的特性,计算滤波器的系数。
这一步可以使用MATLAB等工具进行计算,也可以手动计算。
4. 实现滤波器:使用MATLAB等工具,将计算得到的滤波器系数应用于滤波器的实现。
可以使用差分方程、卷积等方法实现滤波器。
5. 评估滤波器性能:通过输入不同的信号,观察滤波器的输出,并评估其性能。
fir滤波器窗函数设计法
fir滤波器窗函数设计法
FIR (Finite Impulse Response)滤波器的窗函数设计法是一种经典的数字滤波器设计方法。
它通过选择一个合适的窗函数来对滤波器的频率响应进行加权,从而实现对信号的滤波。
窗函数设计法的基本步骤如下:
1. 确定滤波器的设计规格:包括截止频率、通带和阻带的幅频响应要求等。
2. 根据设计规格,计算出滤波器的理想频率响应:可以使用理想滤波器的频率响应作为目标。
3. 选择一个合适的窗函数:常用的窗函数有矩形窗、汉宁窗、汉明窗等。
选择窗函数的关键是考虑到主瓣宽度和副瓣衰减的平衡。
4. 将选择的窗函数应用于理想频率响应上,得到加权后的频率响应。
5. 对加权后的频率响应进行反变换,得到滤波器的时域响应。
6. 根据需要,对时域响应进行截断或零增益处理,以满足设计规格。
7. 最后,根据计算得到的滤波器系数,可以通过巴特沃斯频率抽样公式将其转换为巴特沃斯直接型或传输函数型,以便在数字系统中实现滤波。
需要注意的是,FIR滤波器的窗函数设计法是一种近似方法,设计的滤波器无法完全符合理想要求。
设计过程中需要权衡主瓣宽度和副瓣衰减等因素,以及选择合适的截断或零增益处理方式,以获得满
足实际需求的滤波器性能。
数字信号实验(4) 用窗函数设计FIR滤波器
实验四用窗函数设计FIR滤波器一、实验目的1.熟悉FIR滤波器设计的基本方法。
2.掌握用窗函数设计FIR数字滤波器的原理及方法,熟悉相应的计算机高级语言编程。
3.熟悉线性相位FIR滤波器的幅频特性和相位特性。
4.了解各种不同窗函数对滤波器性能的响应。
二、实验原理与方法(一)FIR滤波器的设计目前FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。
本实验中的窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求不高的时候是比较灵活方便的。
它是从时域出发,用一个窗函数截取理想的得到h(n),以有限长序列h(n)近似理想的;如果从频域出发,用理想的在单位圆上等角度取样得到H(k),根据h(k)得到H(z)将逼近理想的,这就是频率取样法。
(二)窗函数设计法同其它的数字滤波器的设计方法一样,用窗函数设计滤波器也是首先要对滤波器提出性能指标。
一般是给定一个理想的频率响应,使所设计的FIR滤波器的频率响应去逼近所要求的理想的滤波器的相应。
窗函数法设计的任务在于寻找一个可实现(有限长单位脉冲响应)的传递函数。
去逼近。
我们知道,一个理想的频率响应的傅理叶变换所得到的理想单位脉冲响应往往是一个无限长序列。
对经过适当的加权、截断处理才得到一个所需要的有限长脉冲响应序列。
对应不同的加权、截断,就有不同的窗函数。
所要寻找的滤波器脉冲响应就等于理想脉冲响应和窗函数的乘积。
即,由此可见,窗函数的性质就决定了滤波器的品质。
以下是几种常用的窗函数:1.矩形窗:2.Hanning窗:3.Hamming窗:4.Blackman窗:5.Kaiser窗:窗函数法设计线性相位FIR滤波器可以按如下步骤进行:1.确定数字滤波器的性能要求。
确定各临界频率{}和滤波器单位脉冲响应长度N。
2.根据性能要求和N值,合理地选择单位脉冲响应h(n)有奇偶对称性,从而确定理想频率响应的幅频特性和相位特性。
实验六用窗函数法设计FIR滤波器分析解析
实验六用窗函数法设计FIR滤波器分析解析一、引言数字滤波器是数字信号处理中的重要组成部分。
滤波器可以用于去除噪声、调整频率响应以及提取感兴趣的信号。
有许多方法可以设计数字滤波器,包括窗函数法、频域法和优化法等。
本实验将重点介绍窗函数法设计FIR滤波器的原理和过程。
二、窗函数法设计FIR滤波器窗函数法是设计FIR滤波器的一种常用方法。
其基本原理是将滤波器的频率响应与理想滤波器的频率响应进行乘积。
理想滤波器的频率响应通常为矩形函数,而窗函数则用于提取有限长度的理想滤波器的频率响应。
窗函数的选择在FIR滤波器的设计中起着重要的作用。
常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。
对于每种窗函数,都有不同的特性和性能指标,如主瓣宽度、副瓣抑制比等。
根据不同的应用需求,可以选择合适的窗函数。
窗函数法设计FIR滤波器的具体步骤如下:1.确定滤波器的阶数N。
阶数N决定了滤波器的复杂度,一般情况下,阶数越低,滤波器的简单度越高,但频率响应的近似程度也会降低。
2.确定滤波器的截止频率。
根据应用需求,确定滤波器的截止频率,并选择合适的窗函数。
3.根据窗函数长度和截止频率计算理想滤波器的频率响应。
根据所选窗函数的特性,计算理想滤波器的频率响应。
4.根据理想滤波器的频率响应和窗函数的频率响应,得到所需的FIR滤波器的频率响应。
将理想滤波器的频率响应与窗函数的频率响应进行乘积,即可得到所需滤波器的频率响应。
5.对所得到的频率响应进行逆傅里叶变换,得到时域的滤波器系数。
6.实现滤波器。
利用所得到的滤波器系数,可以通过卷积运算实现滤波器。
三、实验结果与分析本实验以Matlab软件为平台,利用窗函数法设计了一个低通滤波器。
滤波器的阶数为16,截止频率为500Hz,采样频率为1000Hz,选择了汉宁窗。
根据上述步骤,计算得到了所需的滤波器的频率响应和时域的滤波器系数。
利用这些系数,通过卷积运算,实现了滤波器。
为了验证滤波器的性能,将滤波器应用于输入信号,观察输出信号的变化。
数字滤波器设计实验报告
数字滤波器设计实验报告刘古城65100609一、实验目的研究数字滤波器的设计思想,理解数字频域,模拟频域的关系,掌握数字系统处理模拟信号的方法。
FIR数字滤波器设计:掌握窗函数设计FIR数字滤波器的方法,理解FIR的意义:线性相位。
二、实验原理1、FIR的特点(1)系统的单位冲击响应在有限个n值处不为零。
(2)对于稳定系统,系统函数在| z |>0处收敛,极点全部在z=0处。
(3)结构上主要是非递归结构,没有输出到输入的反馈,但在个别结构中(如频率抽样结构)也包含反馈的递归部分‘2、FIR滤波器的优点(1)即具有严格的线性相位,又具有任意的幅度’(2)FIR滤波器的抽样响应是有限长的,因而滤波器的性能稳定。
(3)只要经过一定的延时,任何非因果的有限长序列都能变成有限长的因果的序列,因而能用因果系统来实现。
(4)FIR滤波器单位冲击响应是有限长的,因而可以进行快速傅立叶变换,提高运算效率。
3、用窗函数设计FIR数字滤波器对函数加窗处理,实际是用一个有限长函数来逼近原函数。
常用的窗函数有矩形窗、三角窗,汉宁窗、海明窗、布莱克曼窗、凯撒窗等。
三、实验要求1、设计FIR数字低通滤波器,要求在不同窗口长度(N=15,33)下,分别求出h(n),画出相应的幅频特性和相频特性曲线,观察3dB带宽和20dB带宽,总结窗口长度N对滤波特性的影响。
2、对三个拟合三角函数进行滤波处理。
3、对含噪心电信号函数进行滤波处理。
四、实验内容1、不同窗函数长度对于滤波特性的影响fs=100,N=32;n=0:N-1;t=n/fs;f0=n*fs/N;y=exp(-2*t);z=fft(y);m=abs(z);w1=blackman(N);z1=w1'.*y;x1=fft(z1),mo1=abs(x1);subplot(1,2,1);plot(f0,m/fs);subplot(1,2,2);plot(f0,mo1/fs)运行结果改变N值,令N=14,得到结果2、对三个拟合三角函数进行滤波clear;fs=2000;t=(1:1000)/fs;x=10*cos(2*pi*30*t)+cos(2*pi*150*t)+5*cos(2*pi*600*t); L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);figure(1);subplot(2,1,1);plot(t,x);grid on;title('滤波前信号x');xlabel('时间/s');% 原始信号subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱grid on;title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_1=10*cos(2*pi*30*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量mags=[1,0];% 低通fcuts=[60,100];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_1=filter(hh1,1,x);% 滤波x_1(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_1);N=2^(nextpow2(L));Hw_1=fft(x_1,N);figure(2);subplot(2,1,1);plot(t(1:L),x_1);grid on;title('x_1=10*cos(2*pi*30*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱grid on;title('滤波后信号x_1频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_2=cos(2*pi*150*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量mags=[0,1,0];% 带通fcuts=[80,120,180,220];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_2=filter(hh2,1,x);% 滤波x_2(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_2);N=2^(nextpow2(L));Hw_2=fft(x_2,N);figure(3);subplot(2,1,1);plot(t(1:L),x_2);grid on;title('x_2=cos(2*pi*150*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_2));% 查看信号频谱grid on;title('滤波后信号x_2频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_3=5*cos(2*pi*600*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)];% 计算偏移量mags=[0,1];% 高通fcuts=[500,550];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_3=filter(hh2,1,x);% 滤波x_3(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_3);N=2^(nextpow2(L));Hw_3=fft(x_3,N);figure(4);subplot(2,1,1);plot(t(1:L),x_3);grid on;title('x_3=5*cos(2*pi*600*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_3));% 查看信号频谱grid on;title('滤波后信号x_3频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');运行结果3、对含噪心电信号函数进行滤波处理。
窗函数设计fir滤波器的原理
窗函数设计fir滤波器的原理
FIR滤波器是数字信号处理中常用的一种滤波器,其特点是具有线性相位和稳定性。
在FIR滤波器中,窗函数是一种常用的设计方法,它可以用来控制滤波器的频率响应和滤波器的截止频率等参数。
窗函数的设计原理是基于信号的截断和补零,即将信号限制在一个有限的时间段内,并在信号的两端补零,使得信号在有限时间内变得平滑。
这样做的目的是为了避免信号在频域上出现不必要的波动,从而影响滤波器的性能。
在FIR滤波器中,窗函数的设计可以分为两个步骤:首先选择一个合适的窗函数,然后将该窗函数与理想滤波器的频率响应相乘,得到实际滤波器的频率响应。
常用的窗函数包括矩形窗、汉明窗、汉宁窗、布莱克曼窗等。
其中,矩形窗是最简单的窗函数,其频率响应为常数,但其截止频率较高,不适合用于滤波器的设计。
汉明窗和汉宁窗的频率响应较为平滑,但其截止频率较低,适合用于低通滤波器的设计。
布莱克曼窗的频率响应最为平滑,但其计算较为复杂,适合用于高精度的滤波器设计。
在选择窗函数后,需要将其与理想滤波器的频率响应相乘,得到实际
滤波器的频率响应。
理想滤波器的频率响应可以通过傅里叶变换得到,其截止频率和通带宽度可以根据滤波器的设计要求进行调整。
将窗函
数与理想滤波器的频率响应相乘后,得到的实际滤波器的频率响应可
以通过傅里叶反变换得到时域响应,从而得到滤波器的系数。
总之,窗函数是一种常用的FIR滤波器设计方法,其原理是通过信号
的截断和补零来控制滤波器的频率响应和截止频率等参数。
在设计过
程中,需要选择合适的窗函数,并将其与理想滤波器的频率响应相乘,得到实际滤波器的频率响应,从而得到滤波器的系数。
数字信号处理讲义第7章滤波器的设计方法
第7章滤波器的设计方法教学目的1.掌握由连续时间滤波器设计离散时间IIR滤波器的方法,包括冲激响应不变法,双线性变换法等;2.了解常用的窗函数,掌握低通IIR滤波器的频率变换法、用窗函数法设计FIR滤波器的方法;3.掌握FIR滤波器的逼近原理与设计方法。
教学重点与难点重点:本章是本课程的重中之重,滤波器的设计是核心内容之一。
1.连续时间滤波器设计离散时间IIR滤波器的方法,包括冲激响应不变法,双线性变换法等;2.常用的窗函数,掌握低通IIR滤波器的频率变换法、用窗函数法设计FIR滤波器的方法;3.掌握FIR滤波器的逼近原理与设计方法。
难点:1.冲激响应不变法,双线性变换法2.用窗函数法设计FIR滤波器FIR滤波器的逼近原理与设计方法基本概念7.0.1 选频滤波器的分类数字滤波器是数字信号处理的重要基础。
在对信号的过滤、检测与参数的估计等处理中, 数字滤波器是使用最广泛的线性系统。
数字滤波器是对数字信号实现滤波的线性时不变系统。
它将输入的数字序列通过特定运算转变为输出的数字序列。
因此,数字滤波器本质上是一台完成特定运算的数字计算机。
我们已经知道,一个输入序列x(n),通过一个单位脉冲响应为h(n)的线性时不变系统后,其输出响应y(n)为∑∞-)(y))()()(n(nn=m*=xmhnhx将上式两边经过傅里叶变换,可得式中,Y (e j ω)、X (e j ω)分别为输出序列和输入序列的频谱函数, H (ejω)是系统的频率响应函数。
可以看出,输入序列的频谱X (e j ω)经过滤波后,变为X (e j ω)H (e j ω)。
如果|H (e j ω)|的值在某些频率上是比较小的,则输入信号中的这些频率分量在输出信号中将被抑制掉。
因此,只要按照输入信号频谱的特点和处理信号的目的,适当选择H (ej ω),使得滤波后的X (e j ω)H (e j ω)符合人们的要求,这就是数字滤波器的滤波原理。
和模拟滤波器一样,线性数字滤波器按照频率响应的通带特性可划分为低通、高通、带通和带阻几种形式。
FIR数字滤波器设计(窗函数法)C语言实现
FIR数字滤波器设计(窗函数法)C语⾔实现背景介绍:理想滤波器在物理上是不可实现的,其单位脉冲响应是⽆限长、⾮因果的。
窗函数法,就是从时域出发,⽤有限长、因果的单位脉冲响应h(n)去逼近理想滤波器的⽆限长、⾮因果的单位脉冲响应的⽅法。
窗函数法⼜叫傅⾥叶级数法。
更多背景资料,请看数字信号处理(李永全),P175。
⽅法简介:设N-1阶FIR数字滤波器的单位冲击响应为h(n),则传递函数H(z)为:窗函数法的设计步骤如下:1.根据给定的理想频率响应Hd(e^jw),利⽤傅⾥叶反变换,求出单位冲击响应hd(n):2.将hd(n)乘以窗函数w(n),得到所要求的FIR滤波器系数h(n):3.求卷积:使⽤说明⼦函数语句:void firwin(int n, int band, int wn, int fs, double h[], double kaiser=0.0, double fln=0.0, double fhn=0.0);形参说明n:滤波器的阶数band:滤波器的类型,取值1-4,分别为低通、带通、带阻、⾼通滤波器wn:窗函数的类型,取值1-7,分别对应矩形窗、图基窗、三⾓窗、汉宁窗、海明窗、布拉克曼窗和凯塞窗fs:采样频率h:存放滤波器的系数kaiser:beta值fln:带通下边界频率fhn:带通上边界频率源代码void firwin(int n, int band, int wn, int fs, double h[], double kaiser, double fln, double fhn){int i;int n2;int mid;double s;double pi;double wc1;double wc2;double beta;double delay;beta = kaiser;pi = 4.0 * atan(1.0); //pi=PI;if ((n % 2) == 0)/*如果阶数n是偶数*/{n2 = (n / 2) - 1;/**/mid = 1;//}else{n2 = n / 2;//n是奇数,则窗⼝长度为偶数mid = 0;}delay = n / 2.0;wc1 = 2 * pi * fln;wc2 = 2 * pi * fhn;switch (band){case 1:{for (i=0; i<=n2; ++i){s = i - delay;h[i] = (sin(wc1 * s / fs) / (pi * s)) * window(wn, n+1, i, beta);//低通,窗⼝长度=阶数+1,故为n+1h[n - i] = h[i];}if (mid == 1){h[n / 2] = wc1 / pi;//n为偶数时,修正中间值系数}break;}case 2:{for (i=0; i<=n2; i++){s = i - delay;h[i] = (sin(wc2 * s / fs) - sin(wc1 * s / fs)) / (pi * s);//带通h[i] = h[i] * window(wn, n+1, i, beta);h[n-i] = h[i];}if (mid == 1){h[n / 2] = (wc2 - wc1) / pi;}break;}case 3:{for (i=0; i<=n2; ++i){s = i - delay;h[i] = (sin(wc1 * s / fs) + sin(pi * s) - sin(wc2 * s / fs)) / (pi * s);//带阻 h[i] = h[i] * window(wn, n+1, i, beta);h[n - i] = h[i];}if (mid == 1){h[n / 2] = (wc1 + pi - wc2) / pi;}break;}case 4:{for (i=0; i<=n2; i++){s = i - delay;h[i] = (sin(pi * s) - sin(wc1 * s / fs)) / (pi * s);//⾼通h[i] = h[i] * window(wn, n+1, i, beta);h[n-i] = h[i];}if (mid == 1){h[n / 2] = 1.0 - wc1 / pi;}break;}}}//n:窗⼝长度 type:选择窗函数的类型 beta:⽣成凯塞窗的系数static double window(int type, int n, int i, double beta){int k;double pi;double w;pi = 4.0 * atan(1.0); //pi=PI;w = 1.0;switch (type){case 1:{w = 1.0; //矩形窗break;}case 2:{k = (n - 2) / 10;if (i <= k){w = 0.5 * (1.0 - cos(i * pi / (k + 1))); //图基窗}if (i > n-k-2){w = 0.5 * (1.0 - cos((n - i - 1) * pi / (k + 1)));}break;}case 3:{w = 1.0 - fabs(1.0 - 2 * i / (n - 1.0));//三⾓窗break;}case 4:{w = 0.5 * (1.0 - cos( 2 * i * pi / (n - 1)));//汉宁窗break;}case 5:{w = 0.54 - 0.46 * cos(2 * i * pi / (n - 1));//海明窗break;}case 6:{w = 0.42 - 0.5 * cos(2 * i * pi / (n - 1)) + 0.08 * cos(4 * i * pi / (n - 1));//布莱克曼窗 break;}case 7:{w = kaiser(i, n, beta);//凯塞窗break;}}return(w);}static double kaiser(int i, int n, double beta){double a;double w;double a2;double b1;double b2;double beta1;b1 = bessel0(beta);a = 2.0 * i / (double)(n - 1) - 1.0;a2 = a * a;beta1 = beta * sqrt(1.0 - a2);b2 = bessel0(beta1);w = b2 / b1;return(w);}static double bessel0(double x){int i;double d;double y;double d2;double sum;y = x / 2.0;d = 1.0;sum = 1.0;for (i=1; i<=25; i++){d = d * y / i;d2 = d * d;sum = sum + d2;if (d2 < sum*(1.0e-8)){break;}}return(sum);}得到系数之后,与输⼊信号求卷积即可!。
dsp实验报告 fir实验
dsp实验报告 fir实验
DSP实验报告 FIR实验
一、实验目的
本实验旨在通过设计一种FIR滤波器,加深对数字信号处理中FIR滤波器的理解,并掌握FIR滤波器的设计方法和实现过程。
二、实验原理
FIR滤波器是一种常见的数字滤波器,其特点是无需考虑系统的稳定性问题,且具有线性相位特性。
FIR滤波器的传递函数为:
H(z) = b0 + b1z^(-1) + b2z^(-2) + ... + bMz^(-M)
其中,b0、b1、b2...bM为滤波器的系数。
FIR滤波器的设计主要包括窗函数法、频率采样法和最优化法等。
三、实验步骤
1. 确定滤波器的通带截止频率和阻带截止频率;
2. 根据通带截止频率和阻带截止频率选择合适的窗函数;
3. 计算窗函数的系数;
4. 将窗函数的系数作为FIR滤波器的系数;
5. 利用MATLAB或其他数学软件进行FIR滤波器的模拟实现;
6. 对设计的FIR滤波器进行性能评估,包括幅频特性、相频特性、群延迟等。
四、实验结果
经过实验设计和模拟实现,得到了满足要求的FIR滤波器。
通过对滤波器的性
能评估,得到了其幅频特性、相频特性和群延迟等性能指标。
实验结果表明,
设计的FIR滤波器具有良好的滤波效果,能够满足通带截止频率和阻带截止频
率的要求。
五、实验总结
通过本次实验,加深了对FIR滤波器的理解,掌握了FIR滤波器的设计方法和实现过程。
同时,也了解了数字信号处理中滤波器的重要性,以及如何根据实际需求设计出满足要求的滤波器。
希望通过本次实验,能够对数字信号处理的相关知识有更深入的了解和掌握。
利用窗函数设计FIR数字滤波器
设 计 分析从 性 能表 可 以看 出 汉 宁 窗,海 明窗和 凯瑟 窗可 提供 的衰 减
大 于 4d ,但 是汉 宁 窗的 旁瓣 峰值 较 小 ,而 主瓣 宽度 和海 明窗一 样 ,可 以 0B 使 滤波 器具 有较 少 的阶数 ,所 以选择 汉 宁窗 。用汉 宁窗 函数 设计低 通F R I滤
波 器 的过程 如下 :
FE Z R Q M. M
I
y n = .( xn ) () h i ( —f )
i0 =
() 1
f n t o [ b a ,p a r ,W = r q m(,a u c i n d ,m g h ,g d ] f e z b )
%d 为相 对 振 幅 (B :mg 绝对 振 幅 :p a b d) a 为 h 为相 位 响应 ;gd 群 延 r为 时 ;W 为频 率样 本 点向量 。
关键词: F R 字滤 波器设计 ;窗函数 ;实例 分析 I数 中图分类号 :T 7 文献标 识码:A 文 章编号:1 7 -7 9 2 1 )0 1 0 4 0 N 6 1 5 7( 0 0 8 0 4 - 1
数 字信 号处理 在通信 、语音 、 图像 , 自动 控 制 、雷达 、军 事 、航 空航
d = 0 l g O (a + p ) a ( a ) ; b 2 * o l (m g e s /m x m g ) pa ag eH : h = n l ()
最后 利用 计算 机仿 真 实现 设计 的滤 波器 , 再分析 滤 波结 果来 判断 设计
是否 满足 要求 。工程 实 际中常 用 的窗 函数有 5 , 即矩形 窗 、三角 窗、汉 宁 种
1 I数 字滤 波器 的介 绍 1F R
FIR滤波器设计与实现实验报告
实验二:FIR滤波器设计与实现专业班级:12电子信息工程团队成员:顾鹏伟陆遥张春辉一、【实验目的】1 通过实验巩固FIR滤波器的认识和理解。
2 熟练掌握FIR低通滤波器的窗函数设计方法。
3 理解FIR的具体应用。
二、【实验内容】在通信、信息处理以及信号检测等应用领域广泛使用滤波器进行去噪和信号的增强。
FIR滤波器由于可实现线性相位特性以及固有的稳定特征而等到广泛应用,其典型的设计方法是窗函数设计法。
设计流程如下:(1)设定指标:截止频率fc,过渡带宽度△f,阻带衰减A。
(2)求理想低通滤波器(LPF)的时域响应hd(n)。
(3)选择窗函数w(n),确定窗长N。
(4)将hd(n)右移(N-1)/2点并加窗获取线性相位FIR滤波器的单位脉冲响应h(n)。
(5)求FIR的频域响应H(e ),分析是否满足指标。
如不满足,转(3)重新选择,否则继续。
(6)求FIR的系统函数H(z)。
(7)依据差分方程由软件实现FIR滤波器或依据系统函数由硬件实现。
实验要求采用哈明窗(Hamming)设计一个FIR低通滤波器并由软件实现。
哈明窗函数如下:w(n)=0.54-0.46cos(),0≤n≤N-1;设采样频率为fs=10kHz。
实验中,窗长度N和截止频率fc应该都能调节。
具体实验内容如下:(1)设计FIR低通滤波器(FIR_LPF)(书面进行)。
(2)依据差分方程编程实现FIR低通滤波器。
(3)输入信号x(n)=3.0sin(0.16πn )+cos(0.8πn )到fc=2000Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。
(4)输入信号x(n)=1.5sin(0.2πn )-cos(0.4πn )+1.2sin(0.9πn)到fc=1100Hz,N=65的FIR_LPF,求输出信号y(n),理论计算并画出0≤f≤fs范围输入信号x(n)和输出信号y(n)的幅度谱,标出峰值频率,观察滤波器的实际输出结果,分析其正确性。
用窗函数法设计FIR滤波器
1.用窗函数法设计一线性相位FIR低通滤波器,要求通带截止频率 ,
(1)选择一个合适的窗函数(如hamming窗),取单位冲击响应h(n)的长度N=15,观察所设计滤波器的幅频特性,分析是否满足设计要求;
(2)取N=45,重复上述设计,观察幅频和相频特性的变化,分析长度N变化的影响;
(3)保持N=45不变,改变窗函数(如hamming窗变为blackman窗),观察并记录窗函数对滤波器幅频特性的影响。
xlabel('n');ylabel('h(n)');
title('hamming窗设计的h(n)'2);
hw=fft(hn,512);
w=2*[0:511]/512;
plot(w,20*log10(abs(hw)));
xlabel('w/pi');ylabel('Magnitude(dB)');
(4)由 ,得出单位脉冲响应 ;
(5)对 作离散时间傅立叶变换,得到 。
2.在MATLAB中,可以用b=fir1(N,Wn,’ftype’,taper)等函数辅助设计FIR数字滤波器。N代表滤波器阶数;Wn代表滤波器的截止频率(归一化频率),当设计带通和带阻滤波器时,Wn为双元素相量;ftype代表滤波器类型,如’high’高通,’stop’带阻等;taper为窗函数,默认为海明窗,窗函数实现需要用窗函数blackman,hamming,hanningchebwin,kaiser产生。
用窗函数法设计FIR滤波器是在时域进行的,先用傅里叶变换求出理想滤波器单位抽样相应hd(n),然后加时间窗w(n)对其进行截断,以求得FIR 滤波器的单位抽样响应h(n)。
窗函数设计滤波器
******************实践教学*******************XXXX大学计算机与通信学院2014年春季学期《信号处理》课程设计题目:窗函数法设计FIR低通滤波器专业班级:姓名:学号:指导教师:成绩:摘要在数字信号处理中.数字滤波器十分重要并已获得广泛应用,效字滤渡器与模拟滤渡器比较,具有精度高、稳定、体积小、重量轻、灵活、不要求阻抗匹配以及实现模拟滤波器无法宴现的特殊滤波功能等优点.使数字滤波器成为信号处理领域的一十要研究课题。
本课程设计主要是对一段语音信号,加入噪声后,用汉宁窗设计出的FIR滤波器对加入噪声后的语音信号进行滤波去噪处理。
在此次课程设计中,系统操作平台为Windows 7,程序设计的操作软件MATLAB 7.0。
此课程设计首先是用音乐软件采集一段语音信号,加入噪声,然后采用汉宁窗函数法设计出FIR滤波器,再用设计出的滤波器对这段加噪后的语音信号进行滤波去噪,最后对前后时域和频域的波形图进行对比分析,从波形可以看出噪声被完全滤除,达到了语音不失真的效果。
关键字滤波器 ;汉宁窗 ;去噪III目录前言 (1)第一章设计介绍 (2)1.2 MATLAB在DSP中的运用 (2)1.3 FIR数学滤波器介绍 (2)1.4 窗函数法 (3)1.5 汉宁窗 (5)第二章基本原理 (5)2.1 汉宁窗基本原理 (6)2.2 窗函数法设计基本原理 (6)第三章设计实现框图 (8)第四章基于MATLAB的仿真程序及结果 (9)4.1 读入语音数据并画出其时域与频域图 (9)4.2 在MATLAB中对信号加入两个噪声 (9)4.3 滤波器设计基本程序: (10)参考文献: (15)附录:程序源代码 (16)致谢 (19)前言在当今数字信号处理中,滤波器十分重要并以获得广泛应用,它是去除信号中噪声的基本手段,因此,滤波运算时信号处理中的基本运算。
滤波器设计问题也是数字信号处理中的基本问题。
数字信号处理第五章 FIR滤波器、窗函数法
(5.23)
0
h(n)偶对称N为偶数时的频 率响应特性
不适用高通或带阻滤波器
2)H(w)以
为奇对称,以
偶对称
以
为奇对称,以
为偶对称
22
1. 成立条件
5.2.3 恒群延时单独成立
解线性微分方程
=
的取值条件?
0
的取值条件?
有什么特性?
(5.24)
23
离散傅立叶变换: 由相位定义: 化简得:
(5.25)
n
28
相位函数:
(5.30) 线性相位
幅度函数:
(5.31)
其中
1)H(w)在
关于
处奇对称
奇对称
2)传输函数H(z)在
处有零点
0
h(n)奇对称N为奇数时的频 率响应特性
不适用于低通、高通、带阻滤波器
29
3. h(n)奇对称N为偶数(线性相位IV型)时的频率响应
所以
456 7
0123
n
(5.36)
数字信号处理 Digital Signal Processing
第五章 FIR滤波器设计和实现
Finite Impulse Response Filter Design and Implementation
2
FIR数字滤波器
• Finite Impulse Response (FIR):有限冲激响应,非递归 滤波器,输出只与当前和有限个过去输入有关
偶对称
0 h(n)偶对称N为奇数时的 频率响应特性
20
3. h(n)偶对称N为偶数(线性相位II型)时的频率响应
分拆
0123456 7 n
变量代换及
KAISER窗设计低通滤波器
实验五 FIR滤波器设计方法
一、实验目的:
1、掌握不同窗函数的性能指标;
2、根据指标选择窗函数设计FIR滤波器。
3、掌握频率采样法设计FIR滤波器
二、实验内容:
自定滤波器的类型(低通,高通或带通)、设计指标(通带截止频率、通带波纹、阻带截止频率、阻带衰减)
1、根据指标选择合适的窗函数,用窗口设计法设计符合指标的FIR滤波器;并验证其性能是否满足预定指标。
三、实验平台: MATLAB集成系统
四、设计流程:
用Kaiser窗设计符合要求的低通滤波器;
五、程序清单:
Wp=0.2pi,Rp=0.25
Ws=0.3pi,As=50dB
1
>> wp=0.2*pi;ws=0.3*pi;As=50;tr_width=ws-wp;
>> M=ceil((As-7.95)/(2.285*tr_width)+1)+1
M =
61
参考书上例题
2、根据指标选择合适的采样点数,用频率采样法设计符合指标的FIR滤波器;并验证其性能是否满足预定指标。
参考书上例题
求出通带内的Rp和阻带内的As,或者用两行两列的子图分别将结果列出来。
3、求输入x(n)=[cos(w1n)+cos(w2n)]u(n)经过系统后的输出y(n)。其中w1位于通带内,w2位于阻带内,要求做一个两行两列的子图,第一个做x的时域波形,第二个做x的幅度谱,第三个做y的时域波形,第四个做y的幅度谱。
数字滤波器的设计及实现 实验报告
数字滤波器的设计及实现实验报告1.数字滤波器是一种用于信号处理的重要工具,通过去除或衰减信号中的噪声、干扰或无用信息,从而实现信号的滤波和提取。
本实验旨在学习数字滤波器的设计原理和实现方法,并通过实验验证其滤波效果。
2. 实验目的•理解数字滤波器的基本原理和设计方法;•掌握数字滤波器的实现步骤和工具;•利用实验进行数字滤波器的设计与仿真;•分析和评估数字滤波器的性能指标。
3. 实验器材•计算机•MATLAB或其他数学软件4. 实验流程1.理解数字滤波器的基本原理和设计方法;2.根据所需的滤波特性选择滤波器类型(低通、高通、带通、带阻);3.设计滤波器的参数,如截止频率、阶数、窗函数等;4.使用MATLAB或其他数学软件进行滤波器的设计与仿真;5.评估滤波器的性能指标,如频率响应、幅度响应、相位响应等;6.分析实验结果,数字滤波器设计与实现的经验与教训。
5. 实验内容5.1 数字滤波器原理数字滤波器是通过数字信号处理算法来实现滤波功能的滤波器。
它可以通过对信号进行采样、变换、运算等处理来实现对信号频率成分的选择性衰减或增强。
数字滤波器通常包含两种主要类型:无限脉冲响应(IIR)滤波器和有限脉冲响应(FIR)滤波器。
IIR滤波器具有时间域响应的无限长度,而FIR滤波器具有有限长度的时间域响应。
5.2 数字滤波器设计步骤•确定滤波器类型:根据滤波要求选择低通、高通、带通或带阻滤波器;•设计滤波器参数:包括截止频率、阶数、窗函数等;•进行滤波器设计:利用MATLAB等数学软件进行滤波器设计,滤波器系数;•进行滤波器仿真:通过信号输入滤波器进行仿真,评估滤波效果;•优化和调整:根据实际需要,对滤波器参数进行优化和调整,以获得更好的滤波效果。
5.3 实验结果与分析经过实验设计和仿真,我们得到了一个具有良好滤波效果的数字滤波器。
在设计过程中,我们选择了一个5阶的Butterworth低通滤波器,截止频率为1000Hz。
数字滤波器的实现方法
数字滤波器是一种在数字信号处理中广泛使用的工具,用于提取、增强或消除特定频率范围的信号。
数字滤波器的实现方法有很多种,以下是其中几种常见的方法:
IIR滤波器:IIR(无限冲激响应)滤波器是一种常用的数字滤波器,它利用反馈结构实现。
IIR滤波器由两个部分组成:一个反馈路径和一个前馈路径。
反馈路径将输出信号的一部分反馈回输入端,前馈路径则将输入信号直接传递到输出端。
通过调整反馈路径和前馈路径的系数,可以实现对特定频率范围的信号进行增强或抑制。
FIR滤波器:FIR(有限冲激响应)滤波器是一种线性相位滤波器,它通过卷积运算实现。
FIR滤波器的输出是输入信号与一组预定义的系数进行卷积的结果。
这些系数可以设计为对特定频率范围的信号进行增强或抑制。
FIR滤波器的优点是相位响应线性,且没有递归结构,因此更加稳定。
窗函数法:窗函数法是一种设计数字滤波器的方法,它通过将窗函数与输入信号进行卷积来实现滤波。
窗函数的选择会影响滤波器的频率响应特性。
常见的窗函数有汉宁窗、海明窗等。
频率采样法:频率采样法是一种通过在频域采样设计数字滤波器的方法。
这种方法通过对频域的特定点进行采样并优化,从而得到滤波器的系数。
最优逼近法:最优逼近法是一种通过最小化某种误差度量来设计数字滤波器的方法。
这种方法可以设计出具有最优性能的数字滤波器。
以上是几种常见的数字滤波器的实现方法,每种方法都有其优点和适用场景。
在实际应用中,需要根据具体需求选择合适的实现方法。
dsp实验报告-有限脉冲响应滤波器(FIR)实验
实验四.数字信号处理算法实验实验4.1 :有限脉冲响应滤波器(FIR )算法实验一.实验目的1.掌握窗函数法设计FIR 滤波器的Matlab 实现,为CCS 提供滤波系数。
2.掌握采用C 语言在VC5509开发板上实现混频信号的FIR 滤波。
二.实验设备计算机,ICETEK-VC5509-A 实验箱及电源。
三.实验原理1. 窗函数法设计FIR 滤波器(详细理论请看《数字信号处理》原理书籍) 本实验要求:设计一个低通滤波器,通带截止频率fp=10kHz ,阻带截止频率fs1=22kHz ,阻带衰减ap=75dB ,采样频率fs=50kHz,计算出滤波系数fHn,并对混频信号(高频+低频正弦波)fIn 进行滤波,得输出波形fOut 。
解:过渡带宽度=fs1-fp=12kHz ;截止频率:f1=fp+(过渡带宽度)/2=16kHz f1对应的数字频率:Ω1=2πf1/fs=0.64π(rad) -理想低通滤波器单位脉冲响应:hd[n]=sin(0.64π(n-a))/(π(n-a)) 其中a=(N-1)/2 (n=0~N-1)-根据阻带衰减要求选择布莱克曼窗,窗函数长度N 为: N=5.98fs/过渡带宽度≈25则窗函数为:w[n]=0.42-0.5cos(2πn/24)+0.08cos(4πn/24) 滤波器脉冲响应为:h[n]=hd[n]w[n] (n=0~N-1) <1>-根据上面各式计算出h[n]。
2. FIR 滤波FIR 滤波器的差分方程为:1()()N i i y n h x n i -==-∑ <2>其中,h i ----滤波器系数;x(n)---滤波器的输入;y(n)--- 滤波输出。
根据公式<1><2>,得本例对应FIR 滤波器的差分方程为: y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9] +0.11x[n-10]+0.28x[n-11]+0.64x[n-12] +0.28x[n-13]-0.11x[n-14]-0.02x[n-15]+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19] -0.002x[n-20]-0.002x[n-21]+0.001x[n-22] (n=0,1,2,...)采用线性缓冲区法(原理见备课笔记)解此差分方程,得FIR 滤波结果y(n)。
窗函数法
实验报告课程名称:数字信号处理实验题目:窗函数法设计FIR滤波器院系: XXXXXXXXXXXXXX学院班级:姓名: XXXXXXXX 学号: XXXXXXXXXX 指导教师: XXXXXX 实验时间: 201X年XX月xxxxxxxxx大学一、实验目的(1)熟悉矩形窗、汉宁窗、海明窗和布莱克曼窗。
(2) 掌握用上述窗函数法设计FIR 数字滤波器的原理和方法。
(3) 熟悉线性相位FIR 数字滤波器特性。
(4) 了解各种窗函数对滤波特性的影响。
二. 实验原理与方法如果所希望的滤波器的理想频率响应函数为Hd(e^j ω), 则其对应的单位脉冲响应为: ωπππωd e H n h j d d ⎰-=)(21)(用窗函数w(n)将hd(n)截断, 并进行加权处理, 得到:)()()(n n h n h d ω=h(n)就作为实际设计的FIR 数字滤波器的单位脉冲响应序列, 其频率响应函数H(e^j ω)为:∑-=-=10)()(N n n j j e n h e H ωω如果要求线性相位特性, 则h(n)还必须满足:)1()(n N h n h --±=根据上式中的正、 负号和长度N 的奇偶性又将线性相位FIR 滤波器分成四类。
要根据所设计的滤波特性正确选择其中一类。
例如, 要设计线性相位低通特性, 可选择h(n)=h(N-1-n)一类, 而不能选h(n)=-h(N-1-n)一类。
三、实验内容及步骤(1) 复习用窗函数法设计FIR 数字滤波器一节内容, 阅读本实验原 理, 掌握设计步骤。
(2) 编写程序。
① 编写能产生四种窗函数的子程序。
② 编写主程序。
主程序框图如图 10.6.1 所示, 仅供参考。
其 中幅度特性要求用dB 表示。
(3) 上机实验内容。
①设计低通FIR 数字滤波器时,一般以理想低通滤波特性为逼近函 数,即:⎩⎨⎧<<<=-πωωωωωωc ca j j d e e H ,0,)( 其中:21-=N α 故可以得到:)()(sin )(a n a n n h c d --=πω15=N ,33=N ,4/πω=c ,用四种窗函数设计线形相位低通滤波器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define PI 3.1415926
#define MAX 2048
#define N 51
float Hr[MAX],Hi[MAX],Hk[MAX],Hkxw[MAX],Hd[MAX],wn[MAX];
void main()
{
int i,k,m,n;
void GRAPH();
void DFT_FFT();
void HDN(),JXC(),HNC(),HMC(),BLKMC();
m=8;
n=(int)pow(2,m);/*DFT_FFT LENGTH*/
HDN(n);
printf("Please input xh:(1-Rectangle;2-Hanning;3-Hanming;4-Blackman):");
scanf("%d",&k);
switch(k)
{
case 1:JXC(n);break;
case 2:HNC(n);break;
case 3:HMC(n);break;
case 4:BLKMC(n);break;
}
for(i=0;i<n;i++)
{
Hr[i]=Hd[i]*wn[i];
Hi[i]=0.0;
}
DFT_FFT(Hr,Hi,m,n);
for(i=0;i<n;i++)
{
Hk[i]=sqrt(pow(Hr[i],2)+pow(Hi[i],2));
}
for(i=0;i<n;i++)
{
Hkxw[i]=20*log10(Hk[i]);
}
GRAPH(Hkxw,n,k);
}
void GRAPH(float xw[MAX],int nn,int kk)
{
int gdriver,mode,i;
gdriver=DETECT;
initgraph(&gdriver,&mode," ");
setbkcolor(42);
setcolor(30);
moveto(30,30);
line(30,30,619,30);
line(30,30,30,430);
for(i=0;i<nn;i++)
{
xw[i]=abs(xw[i]);
}
for(i=0;i<nn/2;i++)
{
lineto(30+i*3,30+xw[i]*3);
}
for(i=30;i<240;i+=30)
{
line(30,30+i,25,30+i);
}
for(i=96;i<=386;i+=96)
{
line(30+i,30,30+i,35);
}
outtextxy(23,23,"O");
outtextxy(20,34,"(dB)");
outtextxy(0,90,"O");
outtextxy(23,23,"-20");
outtextxy(0,150,"-40");
outtextxy(0,210,"-60");
outtextxy(130,37,"/4");
outtextxy(226,37,"/2");
outtextxy(322,37,"3/4");
outtextxy(420,37," ");
if(kk==1) outtextxy(100,400,"---RECTANGLE WINDOW---");
if(kk==2) outtextxy(100,400,"---HANNING WINDOW---");
if(kk==3) outtextxy(100,400,"---HANMING WINDOW---");
if(kk==4) outtextxy(100,400,"---BLACKMAN WINDOW---");
outtextxy(100,420,"PRESS ANY KEY TO END.");
getch();
setbkcolor(0);
setcolor(15);
closegraph();
}
void HDN(int n)
{
int i;
float a;
a=(N-1)/2;
for(i=0;i<N;i++)
{
if(i==a) Hd[i]=0.25;
else Hd[i]=sin((PI/4.0)*(i-a))/(float)(PI*(i-a));
}
for(i=N;i<n;i++)
{Hd[i]=0.0;}
}
void JXC(int n)
{
int i;
for(i=0;i<n;i++)
{
if(i<N) wn[i]=1.0;
else wn[i]=0.0;
}
}
void HNC(int n)
{
int i;
for(i=0;i<n;i++)
{
if(i<N) wn[i]=0.5*(1-cos(2*PI*i/(N-1)));
else wn[i]=0.0;
}
}
void HMC(int n)
{
int i;
for(i=0;i<n;i++)
if(i<N) wn[i]=0.54-0.46*cos(2.0*PI*i/(N-1));
else wn[i]=0.0;
}
}
void BLKMC(int n)
{
int i;
for(i=0;i<n;i++)
{
if(i<N) wn[i]=0.42-0.5*cos(2.0*PI*i/(N-1))+0.8*cos(4.0*PI*i/(N-1));
else wn[i]=0.0;
}
}
/******************DFT_FFT***********************/
void DFT_FFT(float AR[],float AI[],int m,int n)
{
int i,i1,j1,j,LH,n1,k,b;
float tr,ti,p;
LH=(n/2);
j=LH;
n1=n-2;
for(i=1;i<=n1;i++)
{
if(i<j)
{
i1=i;
j1=j;
tr=AR[i1];
ti=AI[i1];
AR[i1]=AR[j1];
AI[i1]=AI[j1];
AR[j1]=tr;
AI[j1]=ti;
}
k=LH;
while(j>=k)
{
j=j-k;
k=(int)k/2;
}
j=j+k;
for(i=1;i<=m;i++)
{
b=(int)pow(2,(i-1));
for(j=0;j<=b-1;j++)
{
p=(float)(pow(2,(m-i))*j*2.0*PI/(float)n);
for(k=j;k<=n-1;)
{
float TR,TI;
TR=AR[k+b]*cos(-p)-AI[k+b]*sin(-p);
TI=AR[k+b]*sin(-p)+AI[k+b]*cos(-p);
AR[k+b]=AR[k]-TR;
AI[k+b]=AI[k]-TI;
AR[k]=AR[k]+TR;
AI[k]=AI[k]+TI;
/*float TR,TI;
TR=AR[k]+AR[k+b]*cos(-p)-AI[k+b]*sin(-p);
TI=AI[k]+AR[k+b]*sin(-p)+AI[k+b]*cos(-p);
AR[k+b]=2*AR[k]-TR;
AI[k+b]=2*AI[k]-TI;
AR[k]=TR;
AI[k]=TI;*/
k+=b*2;
}
}
}
}。