一、四种线性相位FIR滤波器的振幅响应

1、自编函数

[Hr,w,a,L]=hr_type1(h)(P256)  % h偶对称,N为奇数,h(n)=h(N-1-n)
[Hr,w,a,L]=hr_type2(h) (P257) % h偶对称,N为偶数,h(n)=h(N-1-n)
[Hr,w,a,L]=hr_type3(h) (P257) % h奇对称,N为奇数,h(n)=-h(N-1-n)
[Hr,w,a,L]=hr_type4(h) (P257) % h奇对称,N为偶数,h(n)=-h(N-1-n)

2、一个demo

clear all;close all;clc
addpath(genpath(pwd)); % 添加当前文件夹下所有路径 %%
% 题1. 线性相位 FIR 滤波器的特性:
%% (2)已知滤波器的系统函数如下所示,用以上已编好的函数,确定滤波器的振
% 幅响应Hr(w)以及零点位置:
h1_n = [-4,1,-1,-2,5,6,5,-2,-1,1,-4]; % 偶对称,N=11
h2_n = [-4,1,-1,-2,5,6,6,5,-2,-1,1,-4]; % 偶对称,N=12
h3_n = [-4,1,-1,-2,5,0,-5,2,1,-1,4]; % 奇对称,N=11
h4_n = [ -4,1,-1,-2,5,6,-6,-5,2,1,-1,4]; % 奇对称,N=12 new_figure('线性相位FIR滤波器');
subplot(2,2,1);
[Hr,w]=hr_type1(h1_n);
plot(w/pi, abs(Hr));
title('第一类线性相位滤波器');
xlabel('w/pi'); subplot(2,2,2);
[Hr,w]=hr_type2(h2_n);
plot(w/pi, abs(Hr));
title('第二类线性相位滤波器');
xlabel('w/pi'); subplot(2,2,3);
[Hr,w]=hr_type3(h3_n);
plot(w/pi, abs(Hr));
title('第三类线性相位滤波器');
xlabel('w/pi'); subplot(2,2,4);
[Hr,w]=hr_type4(h4_n);
plot(w/pi, abs(Hr));
title('第四类线性相位滤波器');
xlabel('w/pi');

 

二、窗函数法

1、窗函数设计参考指标

2、窗函数设计方法一:

(1)根据实际阻带衰减指标,来确定所使用的窗函数。Matlab提供了几个函数来实现这些窗函数。

   W=boxcar(N);            % 矩形窗         -21dB
W=triang(N); % 三角窗 -25dB
W=hanning(N); % 汉宁窗 -44dB
W=hamming(N); % 海明窗 -53dB
W=blackman(N); % 布莱克曼窗 -74dB
W=kaiser(N,beta); % 凯泽窗 -80dB

(2)根据过渡带来计算出N值。

例: 通带截止频率wp, 阻带截止频率ws,已知为汉宁窗:N=3.1*2*pi/(ws-wp);

 

(3)求出理想的hd(n)。可使用ideal_lp(P185)来实现理想低通滤波器的冲激响应。

例:由ideal_lp来实现理想带阻滤波器的冲激响应。

hd=ideal_lp(wc1,N)+ideal_lp(pi,N)-ideal_lp(wc2,N);

 

(4)求得所设计的FIR滤波器的单位抽样响应:

h=hd.*w

 

(5)一个demo:

clear all;
wp=0.2*pi;
Rp=0.25;
ws=0.3*pi;
As=50; wd = ws-wp;
N = ceil(6.6*pi/wd);
wn = (wp+ws)/2; %
hd = ideal_lp(wn,N+1);
w_ham=(hamming(N+1))';
h = hd.*w_ham;
figure(2)
freqz(h,1,512)

 

 

3、窗函数设计方法二:

(1)根据实际阻带衰减指标,来确定所使用的窗函数。

(2)根据过渡带来计算出N值。

(3)利用Matlab所提供的函数fir1,来实现fir滤波器。

h=fir1(N,wn,’ftype’,windows(N+1))

›对于高通滤波器和带阻滤波器,N必须为偶数,N+1为奇数

›‘ftype’指的是:’low’,’bandpass’,’high’,’stop’

›设计的滤波器为N阶

(4)一个demo

%example6.2.3
clear all;
wp=0.2*pi;
Rp=0.25;
ws=0.3*pi;
As=50; wd = ws-wp;
N = ceil(6.6*pi/wd);
wn = (wp+ws)/2;
b=fir1(N,wn/pi,hamming(N+1));
figure(1)
freqz(b,1,512)

 

三、频率抽样法:

1、根据给定的N值和过渡点来求得Hd(k) 。

2、利用DFT反变换求的所需的h(n)。

h=real(ifft(H,N));

 

clear all;
N=40;
T1=0.5925;
T2=0.1099; alpha=(N-1)/2;
l=0:N-1;
wl=(2*pi/N)*l; hrs=[zeros(1,5),T2,T1,ones(1,7),T1,T2,zeros(1,9),T2,T1,ones(1,7),T1,T2,zeros(1,4)];
k1 = 0:floor((N/2-1));
k2 = floor(N/2)+1:N-1;
angh = [-alpha*(2*pi)/N*k1,0,alpha*(2*pi)/N*(N-k2)];
H=hrs.*exp(j*angh);
h=real(ifft(H,N)); figure()
freqz(h,1,512)
[db,mag,pha,grd,w]=freqz_m(h,1);
[hr,ww,a,L]=hr_type2(h); figure()
subplot(2,2,1),stem(wl(1:21)/pi,hrs(1:21)),title('H(k)')
subplot(2,2,2),stem(l,h),title('冲激响应')
subplot(2,2,3),plot(ww/pi,hr);grid;title('幅度响应')
subplot(2,2,4),plot(w/pi,db),axis([0,1,-80,10]),grid,title('幅频响应(db)')

数字信号处理实验(六)——FIR滤波器的设计的更多相关文章

  1. 数字信号处理实验(四)——数字滤波器结构

    一.滤波器结构 1.IIR滤波器 (1)系统函数   (2)差分方程   (3)级联形式:   (4)并联形式   2.FIR滤波器 (1)系统函数   (2)差分方程   (3)级联形式:   (4 ...

  2. 数字信号处理实验(五)——IIR滤波器的设计

    一.使用自编函数设计IIR滤波器 1.冲激响应法 (1)注给出的数字滤波器指标先化成模拟指标 (2)设计出模拟滤波器: (3)使用冲激响应法转化成数字滤波器 (4)一个demo clear all; ...

  3. 数字信号处理实验(一)——DTFT

    1.MATLAB自编绘图函数 function [] = signal_write(X,w,flag) % X:数据 % w:频率向量 magX=abs(X);angX=angle(X); realX ...

  4. 数字信号处理实验(零)—— 一维声音信号处理和二维图像处理

    一.在matlab下声音信号的I/O 1.读wav文件函数 •y = wavread('filename') •[y,Fs,bits] = wavread('filename') •[...] = w ...

  5. 转载论文关于fir滤波器的fpga实现

    摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文 ...

  6. IIR滤波器和FIR滤波器的区别与联系zz

      -------------------------------------------------------------------------------------------------- ...

  7. 《数字信号处理》课程实验2 – FIR数字滤波器设计

    一.FIR数字滤波器设计原理  本实验采用窗函数法设计FIR数字低通滤波器.我们希望设计的滤波器系统函数如下: \(H_{d}\left( e^{jw} \right) = \left\{ \begi ...

  8. 转载--关于FPGA设计数字信号处理电路的心得

    FPGA使用的越来越广泛,除了可用于设计控制电路以为,数字信号处理电路更是FPGA的强项和难点.个人可以说才刚刚入门FPGA设计,也做过一些数字信号处理方面的电路设计,记录下个人心得体会. (一)善用 ...

  9. FIR滤波器设计

    FIR滤波器的优越性: 相位对应为严格的线性,不存在延迟失真,仅仅有固定的时间延迟: 因为不存在稳定性问题,设计相对简单: 仅仅包括实数算法,不涉及复数算法,不须要递推运算,长度为M,阶数为M-1,计 ...

随机推荐

  1. redis pub/sub 实战: 微信语音识别

    2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...

  2. 关于TortoiseSVN的一些知识

    TortoiseSVN的一切命令都是相对于它自己来说的 1.Import,导入,指的是导入SVN的代码库,即Repository. 2.Export,导出,指的是将代码从Repository中导出到你 ...

  3. Mingw32 for ffmpeg

    2016.02.27之后, ffmpeg 官方不在支持 XP 系统,需要下载源码自己编译. 整了好几天搭建了 MinGW32 for XP 安装了 ffmpeg 所需的几乎所有的库文件. 除了 lib ...

  4. 【leetcode】Reorder List (middle)

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  5. [Android Pro] linux下查看一个文件的属性(ls,lsattr,file,stat)

    reference to : http://blog.chinaunix.net/uid-28458801-id-4615294.html 查看文件属性有多种方法,且这些方法中偏向不同,具体如下: 1 ...

  6. 413. Arithmetic Slices

    /**************************Sorry. We do not have enough accepted submissions.*********************** ...

  7. alias命令(使用命令别名)

    通过alias命令可以给一些命令定义别名,如,将长的难记住的命令起一个容易记住的别名,提高工作效率 alias -p 查看已有的别名列表 命名别名格式: alias 新命令名='原命令名 -参数/选项 ...

  8. php基础面试题1

    问题1:谈谈你对的PHP的基本认识. 回答:PHP是Hypertext Preprocessor(超文本预处理器)的简称,是一种用来开发动态网站的服务器端脚本语言. 问题2:什么是MVC? 回答:MV ...

  9. JavaScript基础——使用运算符

    JavaScript运算符允许你改变一个变量的值.你已经熟悉了用于赋值给变量的=运算符.JavaScript提供了几种不同的运算符,它们可以划分为两大类:算数运算符和赋值运算符. 1.算数运算符 你可 ...

  10. 早上3:30左右起来发现时候电脑在一致叫唤就是一个usb的接口可能是鼠标

    然后看了下也没有网络了,早上起来就打了一个电话给网管,就开通了.是没有及时开通.