Biomedical Signal processing matlab 信号处理函数

Slides:



Advertisements
Similar presentations
Final Review Chapter 1 Discrete-time signal and system 1. 模拟信号数字化过程的原理框图 使用 ADC 变换器对连续信号进行采样的过程 使用 ADC 变换器对连续信号进行采样的过程 x(t) Analog.
Advertisements

第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
MATLAB入门及其信号处理应用 1 概述 2 基本数值运算 3 基本语句 4 MATLAB函数 5 MATLAB在信号处理中的应用举例.
第三章 函数逼近 — 最佳平方逼近.
第四章 数字滤波器基础 本章要点 数字滤波器 Z变换 数字滤波器的组成 数字滤波器的类型 差分方程的传递函数 Z平面的零-极点分布图
卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计
第2章 时域离散信号和系统的频域分析 教学内容包括: 序列的傅立叶变换定义及性质 Z变换的定义与收敛域 利用z变换分析信号和系统的频域特性.
第一章 绪论.
数字信号处理 (Digital Signal Processing)
6.6 常用模拟低通滤波器特性 首先将要设计的数字滤波器的指标,转变成模拟低通原型滤波器的指标后,设计“模拟低通原型”滤波器。 模拟滤波器
数字信号处理 (Digital Signal Processing)
第七章 傅利葉轉換 7.1 前言 傅利葉轉換是影像處理中重要的基礎,不但可以做到用其他方式無法得到的結果,也比其他方式來得有效率。
第二章 导数与微分 第二节 函数的微分法 一、导数的四则运算 二、复合函数的微分法.
第7章 离散信号的频域分析 离散Fourier级数 离散Fourier变换 第3章 连续信号的频域分析 连续Fourier级数
Signals and Systems Lecture 28
第4章 MATLAB在信号处理中的应用 4.1 信号及其表示 4.2 信号的基本运算 4.3 信号的能量和功率 4.4 线性时不变系统
第5章 §5.3 定积分的积分法 换元积分法 不定积分 分部积分法 换元积分法 定积分 分部积分法.
第2章 Z变换 Z变换的定义与收敛域 Z反变换 系统的稳定性和H(z) 系统函数.
INFINITE IMPULSE RESPONSE FILTER
第6章 有限脉冲响应数字滤波器的设计 IIR的设计 Specifications Desired IIR 脉冲响应不变法 阶跃响应不变法
Matlab 中IIR数字滤波器设计相关函数
数字信号处理 (Digital Signal Processing)
滤波器设计matlab相关函数.
第五章 数字滤波器设计 Filtering Beijing Institute of Technology 数字信号处理.
第 三章 无限长单位脉冲响应(IIR)滤波器 的设计方法(共10学时 )
6.5 数字高通、带通和带阻滤波器的设计.
第8章 MATLAB程序设计语言 在信号处理中的应用 8.1 概述 8.2 基本数值运算 8.3 基本语句 8.4 MATLAB函数
现代电子技术实验 4.11 RC带通滤波器的设计与测试.
第二章 离散傅里叶变换 及其快速算法(8学时 )
元素替换法 ——行列式按行(列)展开(推论)
熟悉傅里叶变换的性质 熟悉常见信号的傅里叶变换 了解傅里叶变换的MATLAB实现方法. 熟悉傅里叶变换的性质 熟悉常见信号的傅里叶变换 了解傅里叶变换的MATLAB实现方法.
Matlab基础介绍 Matlab 简介 Matlab 的安装与启动 Matlab 编程基础 Matlab 在数字信号处理课程中的应用.
实验四 滤波器传输函数的零点和极点 对滤波特性的影响
实验三 数字滤波器设计 ( Filter Design)
第三章 z变换及离散系统的频域分析 课程名称:数字信号处理 任课教师:张培珍 授课班级:信计
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第六章学习目标 理解数字滤波器的基本概念 掌握Butterworth、Chebyshev低通滤波器的特点 掌握脉冲响应不变法
实验六 积分器、微分器.
归纳:频谱分析和滤波器设计 一。MATLAB表述的信号和系统.
Digtlal Signal Processing —— Using MATLAB
实验一: 信号、 系统及系统响应 1、实验目的 1 熟悉连续信号经理想采样前后的频谱变化关系, 加深对时域采样定理的理解。
第四章习题.
数字信号处理基础 第7章 FIR数字滤波器的理论和设计
2 下载《标准实验报告》 1 3 下载 实验题目 4 提交 实验报告 切记:请按时上传作业!到时将自动关机! 07:32:44.
晶体管及其小信号放大 -单管共射电路的频率特性.
概 率 统 计 主讲教师 叶宏 山东大学数学院.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
晶体管及其小信号放大 -单管共射电路的频率特性.
熟悉傅里叶变换的性质 熟悉常见信号的傅里叶变换 了解傅里叶变换的MATLAB实现方法. 熟悉傅里叶变换的性质 熟悉常见信号的傅里叶变换 了解傅里叶变换的MATLAB实现方法.
第4章 Excel电子表格制作软件 4.4 函数(一).
2019/5/2 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 08:20:28.
实验一 熟悉MATLAB环境 常用离散时间信号的仿真.
2019/5/4 实验三 离散傅立叶变换的性质及应用 06:11:49.
第16讲 相似矩阵与方阵的对角化 主要内容: 1.相似矩阵 2. 方阵的对角化.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
2019/5/11 实验四 FIR滤波器的特性及应用 05:31:12.
2019/5/11 实验三 线性相位FIR滤波器的特性 05:31:30.
第7讲 有源滤波器 基本概念与定义 一阶有源滤波器 二阶有源滤波器.
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
学习任务三 偏导数 结合一元函数的导数学习二元函数的偏导数是非常有用的. 要求了解二元函数的偏导数的定义, 掌握二元函数偏导数的计算.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
第一部分:概率 产生随机样本:对分布采样 均匀分布 其他分布 伪随机数 很多统计软件包中都有此工具 如在Matlab中:rand
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
§2 方阵的特征值与特征向量.
第七章 FIR数字滤波器的设计方法 IIR数字滤波器: FIR数字滤波器: 可以利用模拟滤波器设计 但相位非线性
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
第6章 IIR数字滤波器的设计 全通系统 最小相位系统 模拟低通滤波器设计 脉冲响应不变法 双线性变换法 模拟域频率变换.
数字信号处理 (Digital Signal Processing)
Presentation transcript:

Biomedical Signal processing matlab 信号处理函数 Zhongguo Liu Biomedical Engineering School of Control Science and Engineering, Shandong University 2019/1/1 1 Zhongguo Liu_Biomedical Engineering_Shandong Univ.

关于MATLAB MATLAB是美国MathWorks公司开发的一种功能极其强大的高技术计算语言和内容极其丰富的软件库。它以矩阵和向量的运算以及运算结果的可视化为基础,把广泛应用于各个学科领域的数值分析、矩阵计算、函数生成、信号、图形及图象处理、建模与仿真等诸多强大功能集成在一个便于用户使用的交互式环境之中,为使用者提供了一个高效的编程工具及丰富的算法资源。

MATLAB与信号处理直接有关的工具箱 ( Toolbox) Signal Processing (信号处理工具箱) Wavelet (小波工具箱) Image Processing(图象处理工具箱) Higher-Order Spectral Analysis (高阶谱分析工具箱)

与信号处理间接有关的工具箱: Control System (控制系统) Communication (通信) System Identification (系统辨识) Statistics (统计) Neural Network (神经网络)

例: z=peaks; surf(z);

如何改变 的方差为P 与第二章内容有关的MATLAB文件 ? 1. rand.m 用来产生均值为0.5、幅度在 0~1之间均匀分布的伪白噪声: u=rand(N,1) (rand(N)生成N阶矩阵) 方差: 方差函数var(u) 标准差函数std(u) 如何改变 的方差为P ? 即如何确定a使au的方差为P? 将au代替u带入上面方差公式可得

与第二章内容有关的MATLAB文件 1. rand.m 用来产生均值为0.5、幅度在 0~1之间均匀分布的伪白噪声: u=rand(N,1) (rand(N)生成N阶矩阵) randn.m 用来产生均值为零、方差为1 服从高斯(正态)分布的白噪声信号 u=randn(1, N) x=randn(1000,1) y=randn(1000,1) h=std(y)

3.sinc :用来产生 “sinc” 函数: sinc函数定义为: t=-4:0.1:4; x4=sinc(t); %产生抽样函数 plot(t,x4)

4. conv.m 用来实现两个离散序列的线性卷积。其调用格式是:y=conv(x,h). 若x(n)和y(n)的长度分别为M和N, 则返回值是长度为M+N-1的序列。 例 x(n)=[3 4 5]; h(n)=[2 6 7 8],求其线性卷积。 MATLAB语句如下: x=[3 4 5]; h=[2 6 7 8]; y=conv(x,h) 结果 y=6 26 55 82 67 40 x=[3 4 5]; y=xcorr(x,h) y=24 53 86 65 38 10 -0 两序列的相关运算 MATLAB实现:y=xcorr(x1,x2)。

5.xcorr: 其互相关和自相关。格式是:(1)rxy=xcorr(x,y):求x,y的互相关; (2)rx=xcorr(x,M,’flag’):求x的自相关,M:rx的单边长度,总长度为2M+1;‘flag’是定标标志,若 flag=biased, 则表示是“有偏”估计,需将rx(m)都除以N,若flag=unbiased,则表示是“无偏”估计,需将rx(m)都除以(N-abs(m));若’flag’缺省,则rx不定标。M和‘flag’同样适用于求互相关。

第三章 Z变换 F=ztrans( f ) 对f(n)进行Z变换,其结果为F(z) . 在MATLAB语言中有专门对信号进行正反Z变换的函数ztrans( ) 和itrans( )。其调用格式分别如下: F=ztrans( f )      对f(n)进行Z变换,其结果为F(z) F=ztrans(f,w)   对f(n)进行Z变换,其结果为F(w) F=ztrans(f,k,w)    对f(k)进行Z变换,其结果为F(w) f=itrans ( F )    对F(z)进行Z反变换,其结果为f(n) f=itrans(F,k)   对F(z)进行Z反变换,其结果为f(k) f=itrans(F,w,k)  对F(w)进行Z反变换,其结果为f(k) 注意: 在调用函数ztran( )及iztran( )之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量

Z变换 例①.求数列 fn=e-n的Z变换及其逆变换。命令如下: syms n z fn=exp(-n); Fz=ztrans(fn,n,z) %求fn的Z变换 f=iztrans(Fz,z,n) %求Fz的逆Z变换 Fz= z/(z - 1/exp(1)) f = (1/exp(1))^n 例② .用MATLAB求出离散序列f=0.5k的Z变换MATLAB程序如下: syms k z f=0.5^k;          %定义离散信号 Fz=ztrans(f)       %对离散信号进行Z变换 运行结果如下: Fz = 2*z/(2*z-1)

Z变换 例③ .已知一离散信号的Z变换式为 , 求出它所对应的离散信号f(k). MATLAB程序如下: syms k z Fz=2*z/(2*z-1);       %定义Z变换表达式 fk=iztrans(Fz,k)        %求反Z变换 运行结果如下:fk = (1/2)^k 阶跃序列符号 例④: 求序列的Z变换. syms k hk=sym('kroneckerDelta(k, 1) + kroneckerDelta(k, 2)+ kroneckerDelta(k, 3)') Hz=ztrans(hk) Hz=simplify(Hz) 运行结果如下:Fz= (z^2 + z + 1)/z^3

符号变换 Fourier变换及其反变换 Fw=fourier(ft,t,w) 求“时域”函数ft的Fourier变换 ft=ifourier(Fw,w,t) 求“频域”函数Fw的Fourier 反变换 Laplace变换及其反变换 Fs=laplace(ft,t,s) 求“时域”函数ft的Laplace变换 ft=ilaplace(Fs,s,t) 求“频域”函数Fs的Laplace

【例 】求 的Fourier变换。 (1)求Fourier变换 syms t w ut=heaviside(t); UT=fourier(ut) UT = pi*dirac(w)-i/w (2)求Fourier反变换 Ut=ifourier(UT,w,t) Ut =heaviside(t)

【例2.5-4】求 的Laplace变换。 syms t s; syms a b positive; %不限定则无结果 Dt=dirac(t-a); Ut=heaviside(t-b); Mt=[Dt,Ut;exp(-a*t)*sin(b*t),t^2*exp(-t)]; MS=laplace(Mt,t,s) MS = [ exp(-s*a), exp(-s*b)/s] [ 1/b/((s+a)^2/b^2+1), 2/(s+1)^3]

与系统响应、逆Z变换 相关的matlab 函数 1.filter.m 本文件用来求离散系统的输出y(n) 。 若系统的h(n)已知,由y(n)=x(n)*h(n),用conv.m文件可求出y(n) 。 y=conv (x, h) filter文件是在A(z)、B(z)已知,但不知道h(n)的情况下求y(n)的。 调用格式是: y=filter(b, a, x) x, y, a 和 b都是向量。

与逆Z变换 相关的matlab 函数 x=[1,2,3,4]; y=[3,4,6] 1.filter.m x=[1,2,3,4]; y=[3,4,6] z_conv= conv(x,y) % x , y 为输入和单位脉冲响应时输出 z_conv_= conv(y, x) % x , y为输入和单位脉冲响应时输出 z_filter=filter(y,1,x) % x为输入, y为FIR单位脉冲响应时输出 z_filter_=filter(x,1,y) % y为输入, x为FIR单位脉冲响应时输出 z_conv = 3 10 23 36 34 24  z_conv_=3 10 23 36 34 24 z_filter = 3 10 23 36 z_filter_= 3 10 23 可见,conv(x,y)总是等于conv(y,x)。而filter(x,1,y)却不一定等于filter(y,1,x),但是它们总是conv(x,y)截短的结果,截短的长度等于length(filter的第三个参数)

与逆Z变换 相关的matlab 函数 2.impz.m 在 A(z)、B(z)已知情况下, 求系统的单 位抽样响应 h(n)。调用格式是: h = impz(b, a, N) 或 [h,t]=impz(b,a,N) N是所需的的长度。前者绘图时n从1开始, 而后者从0开始。

3. residuez.m 将X(z) 的有理分式分解成简单有理分式的和,因此可用来求逆Z变换。调用格式: [r,p,k]= residuez(b,a) 假如知道了向量r, p和k,利用residuez.m还可反过来求出多项式A(z)、B(z)。格式是 [b,a]= residuez(r,p,k)。

[H,w]=freqz(b,a,N,'whole',Fs) 4.频率响应函数:freqz.m 已知A(z)、B(z), 求系统的频率响应。基本的调用格式是: [H,w]=freqz(b,a,N,'whole',Fs) N是频率轴的分点数,建议N为2的整次幂;w是返回频率轴座标向量,绘图用;Fs是抽样频率,若Fs=1,频率轴给出归一化频率;’whole’指定计算的频率范围是从0~FS,缺省时是从0~FS/2. 幅频响应:Hr=abs(H); Hphase=angle(H); Hphase=unwrap(Hphase);

5.filtfilt.m 本文件实现零相位滤波。其调用格式是:y=filtfilt(B, A, x) 。式中B是 的分子多项式,A是分母多项式,x是待滤波信号,y是滤波后的信号。 clear; N=32; n=-N/2:N+N/2; w=0.1*pi; x=cos(w*n)+cos(2*w*n); subplot(311);stem(n,x,'.');grid on; xlabel('n'); b=[0.06745 0.1349 0.06745]; a=[1 -1.143 0.4128]; y=filtfilt(b,a,x); % 用给定系统(b,a)对信号 x 作零相位滤波; y1=filter(b,a,x); % 用给定系统(b,a)对信号 x 作低通滤波; subplot(312);stem(n,y,'.');grid on; xlabel('n'); subplot(313);stem(n,y1,'.');grid on; xlabel('n');

5.filtfilt.m 本文件实现零相位滤波。其调用格式是:y=filtfilt(B, A, x) 。式中B是 的分子多项式,A是分母多项式,x是待滤波信号,y是滤波后的信号。 clear; N=32; n=-N/2:N+N/2; w=0.1*pi; x=cos(w*n)+cos(2*w*n); subplot(311);stem(n,x,'.');grid on; xlabel('n'); b=[0.06745 0.1349 0.06745]; a=[1 -1.143 0.4128]; y=filtfilt(b,a,x); % 用给定系统(b,a)对信号 x 作零相位滤波; y1=filter(b,a,x); % 用给定系统(b,a)对信号 x 作低通滤波; subplot(312);stem(n,y,'.');grid on; xlabel('n'); subplot(313);stem(n,y1,'.');grid on; xlabel('n'); 23

6.grpdelay.m 求系统的群延迟。调用格式 [gd w]=grpdelay(B, A, N) , 或 [gd F]=grpdelay(B, A, N, FS) 式中B和A仍是 的分子、分母多项式,gd是群延迟,w、F是频率分点,二者的维数均为N;FS为抽样频率,单位为Hz。

7.deconv.m :实现系统的反卷积,其调用格式: [q,r]=deconv(y,x); 也用来实现多项式除法。 clear all; k=0:1:7; x=k+1; h=ones(1,4); y=conv(h,x); % y = x * h; [q,r]=deconv(y,x); % 由 y,x 作反卷积,求出 h; [q1,r1]=deconv(y,h); % 由 y,h 作反卷积,求出 x; subplot(321);stem(h,'.b');ylabel(' h(n)'); subplot(322);stem(x,'.b');ylabel(' x(n)'); subplot(323);stem(y,'.b');ylabel(' y(n)'); subplot(325);stem(q,'.r');ylabel(' q(n)'); subplot(326);stem(q1,'.r');ylabel(' q1(n)'); clear all; % 实现多项式除法q=(4*x^3+1)/(2*x+1) y=[4 0 0 1]; x=[2 1]; [q,r]=deconv(y,x); → q=[2 -1 0.5], r=[0 0 0 0.5]

(1) tf2zpk.m, 调用[z,p,k]=tf2zpk(b,a) 适用于z-1的升幂排列 与极-零点有关的MATLAB函数 下面几个文件用于转移函数与极-零点之 间的相互转换及极-零点的排序: (1) tf2zpk.m, 调用[z,p,k]=tf2zpk(b,a) 适用于z-1的升幂排列 tf2zp.m, 调用[z,p,k]=tf2zp(b,a) 适用于z的降幂排列 (2) zp2tf.m, 调用 [b,a]=zp2tf (z,p,k) (3)roots.m, 调用 Z1=roots(b) (4) poly.m, 调用b =poly (Z1)

显示离散系统的极零图函数:zplane.m 本文件可用来显示离散系统的极-零图。其调用格式是: zplane(z,p), 或 zplane(b,a), 前者是在已知系统零点的列向量z和极点的列向量p的情况下画出极-零图,后者是在仅已知A(z)、B(z) 的情况下画出极-零图。

例1: 系统 解: 求极零点并绘极零分布图,部分画出幅频及相频响应: 转移函数: z=2; 2 p=0; 0 b=[1 -4 4]; K=1 a=[1]; [z,p,k]=tf2zpk(b,a) zplane(b,a) zplane(z,p) [r,p,k]= residuez(b,a) [b,a]= residuez(r,p,k) r =[]; p=[]; k=[1 -4 4];

系统 例1: 解: 画出幅频响应及相频响应: 转移函数: b=[1 -4 4]; a=[1]; [H,w]=freqz(b,a,128,'whole',1) Hr=abs(H); Hphase=angle(H); Hphaseu=unwrap(Hphase); subplot(311),plot(Hr) subplot(312),plot(Hphase) subplot(313),plot(Hphaseu)

画出幅频响应及相频响应: 例2: Hphase1=unwrap(Hphase); 解: 相位的卷绕 (wrapping) 解卷绕

例: 给定系统 ? 解: 求:极-零图 单位抽样响应 频率响应 部分分式展开 stem(t,h,'.');grid on; b=[.1836 .7344 1.1016 .7374 .1836]/100 a =[1 -3.0544 3.8291 -2.2925 .55075] zplane(b,a); ? [h,t]=impz(b,a,40); stem(t,h,'.');grid on; Hphase=unwrap(Hphase); [r,p,k]= residuez(b,a) [b,a]= residuez(r,p,k)

zplane(b,a); 极-零图

[h,t]=impz(b,a,40); stem(t,h,'.');grid on; 单位抽样响应

频率响应 Hr=abs(H); subplot(311), plot(Hr) subplot(312), plot(Hphase) plot(Hphaseu) Hphaseu=unwrap(Hphase); 频率响应

与信号流图有关的MATLAB函数 下面几个文件用于转移函数、极-零点与二阶子系统sos(Second-Order Section)级联之间的相互转换: (1) tf2sos.m, 调用[sos,G]=tf2sos(b,a) (2) sos2tf.m, 调用 [b,a]=sos2tf (sos,G) (3) sos2zp.m, 调用[z,p,k]= sos2zp (sos,G) (4) zp2sos.m, 调用 [sos,G]=zp2sos (z,p,k) sos是一L×6的矩阵,每行元素如下排列:

与第七章内容有关的MATLAB文件 1.buttord.m 确定 LP DF、或 LP AF的阶次; (1) [N, Wn] = buttord(Wp, Ws, Rp, Rs); (2)[N, Wn] = buttord(Wp, Ws, Rp, Rs,‘s’): (1)对应数字滤波器。其中 Wp, Ws分别是通带和阻带的截止频率,其值在 0~1 之间,1对应抽样频率的一半(归一化频率)。对低通和高通,Wp, Ws都是标量,对带通和带阻,Wp, Ws是1×2的向量。Rp, Rs 分别是通带和阻带的衰减(dB)。N是求出的相应低通滤波器的阶次,Wn是求出的3dB频率,它和Wp稍有不同。 (2)对应模拟滤波器,各变量含意和(1)相同,但Wp, Ws及Wn的单位为弧度/秒,它们实际上是频率。

2.buttap.m 设计模拟低通(Butt)原型滤波器。 [z, p, k]=buttap(N): N是欲设计的低通原型滤波器的阶次,z, p, k是设计出的极点、零点及增益。 buttap.m sets Ωc to 1 for a normalized result.

3.lp2lp.m、lp2hp.m、lp2bp.m, lp2bs.m 将模拟低通原型转换为实际的低通、高通、带通及带阻滤波器。 [B, A]=lp2lp(b, a, Wo) [B, A]=lp2hp(b, a, Wo) (1) [B, A]=lp2bp(b, a, Wo , Bw) [B, A]=lp2bs(b, a, Wo , Bw) (2) b, a 是AF LP 的分子、分母的系数向量,B, A是转换后的的分子、分母的系数向量;(1)中,Wo是低通或高通滤波器的截止频率; (2)中Wo是带通或带阻滤波器中心频率,Bw是其带宽。

4.bilinear.m :双线性变换,由模拟滤波器 得到数字滤波器。 [Bz, Az]=bilinear(B, A, Fs) 式中B, A分别是G(s)的分子、分母多项式 的系数向量,Bz, Az分别是H(z)的分子、分 母多项式的系数向量,Fs是抽样频率。

5.butter. m 用来直接设计Butterworth数字滤波器,实际上它把 buttord. m, buttap. m, lp2lp 5.butter.m 用来直接设计Butterworth数字滤波器,实际上它把 buttord.m, buttap.m, lp2lp.m, bilinear.m等文件都包含了进去,从而使设计过程更简捷。 [B,A]=butter(N,Wn); (2) [B,A]=butter(N,Wn,’high’); (3) [B,A]=butter(N,Wn,’stop’); (4) [B,A]=butter(N,Wn,’s’) 格式(1)~(3) 用来设计数字滤波器,B,A分别是H(z)的分子、分母多项式的系数向量,Wn是通带截止频率,范围在0~1之间。若Wn是标量,(1)用来设计低通数字滤波器,若Wn是1×2的向量,则(1) 用来设计数字带通滤波器; (2)用来设计数字高通滤波器; (3) 用来设计数字带阻滤波器,显然,这时的Wn是1×2的向量;格式(4) 用来设计模拟滤波器。

6.cheb1ord.m 求Cheb-Ⅰ型滤波器的阶; 7.cheb1ap.m 设计原型低Cheb-I型模拟滤波器; 8.cheby1.m 直接设计数字Cheb-Ⅰ滤波器。 以上三个文件的调用格式和对应的 Butterworth滤波器的文件类似。

9.cheb2ord.m; 10. cheb2ap.m; 11. cheby2.m; 12. ellipord.m; 13. ellipap.m; 14. ellip.m; 对应 Cheby-II、椭圆 IIR 滤波器 15.impinvar.m 用冲激响应不变法实现频率转换;

数字高通, 带通及带阻滤波器的设计 数字高通滤波器设计步骤 给出 得到 得到 模拟低通 的技术要求 数字高通 的技术要求 模拟高通 设计出 最后得到 数字高通转移 函数 得到 模拟高通转移 函数 数字高通滤波器设计步骤

对 带通(BP)、带阻(BS)数字滤波器的设计,只需改变图中 Step2 和 Step4:

例 : 设计一 IIR BP DF,要求: 要求: 通带频率范围 : 300Hz~ 400Hz ; 阻带频率范围 :200Hz、500Hz 按上述转换办法,可以求出:

例7.1 设计 IIR LP DF, clear all; fp=100;fs=300;Fs=1000;rp=3;rs=20; wp=2*pi*fp/Fs;ws=2*pi*fs/Fs; Fs=Fs/Fs; % let Fs=1 % frequency prewarping ; wap=2*Fs*tan(wp/2);was=2*Fs*tan(ws/2); % [n,wn]=buttord(wap,was,rp,rs,'s') % Note: 's'! [z,p,k]=buttap(n); % [bp,ap]=zp2tf(z,p,k) % [bs,as]=lp2lp(bp,ap, wn) % [bz,az]=bilinear(bs,as,Fs) %% s=(2/Ts)(z-1)/(z+1); [h,w]=freqz(bz,az,256,Fs*1000); plot(w, 20*log10(abs(h)));grid on;

clear all; wp=.2*pi;ws=.6*pi;Fs=1000; rp=3;rs=20; 例7.1 设计 IIR LP DF, clear all; wp=.2*pi;ws=.6*pi;Fs=1000; rp=3;rs=20; % frequency prewarping; wap=2*Fs*tan(wp/2);was=2*Fs*tan(ws/2); [n,wn]=buttord(wap,was,rp,rs,'s');% Note: 's'! [z,p,k]=buttap(n); [bp,ap]=zp2tf(z,p,k); [bs,as]=lp2lp(bp,ap,wap) w1=[0:499]*2*pi; h1=freqs(bs,as,w1); [bz,az]=bilinear(bs,as,Fs) % z=(2/ts)(z-1)/(z+1); [h2,w2]=freqz(bz,az,500,Fs); plot(w1/2/pi,abs(h1),w2,abs(h2),'k');grid on; 模拟滤波器和数字滤波器幅频特性比较

例7.1 设计 IIR LP DF, clear all; wp=.2*pi;ws=.6*pi;Fs=1000; rp=3;rs=20; [n,wn]=buttord(wp/pi,ws/pi,rp,rs); [bz,az]=butter(n,wp/pi) [bz1,az1]=butter(n,wn) [h,w]=freqz(bz,az,128,Fs); [h1,w1]=freqz(bz1,az1,128,Fs); plot(w, 20*log10(abs(h) ),w1, 20*log10(abs(h1) ),'g.'); grid on; 保证通带上限指标满足 保证阻带下限指标满足

产生窗函数的文件有八个: bartlett(三角窗); 2. blackman(布莱克曼窗) ; 两端为零 3. boxcar(矩形窗); 4. hamming(哈明窗); 5. hanning(汉宁窗); 6. triang(三角窗); 7. chebwin(切比雪夫窗); 8 .kaiser(凯赛窗); 两端为零 调用方式都非常简单请见help文件 两端不为零 稍为复杂

9.fir1.m 用“窗函数法”设计FIR DF。调用格式: (1)b = fir1(N,Wn); (2) b = fir1(N,Wn,‘high’); (3) b = fir1(N,Wn, ‘stop’); N:阶次,滤波器长度为N+1;Wn:通带截止频率,其值在0~1之间,1对应 Fs/2; b: 滤波器系数。 格式(2)用来设计高通滤波器, 格式(3)用来设计带阻滤波器。 格式(1),若Wn为标量,则设计低通滤波器,若 Wn是1×2的向量,则用来设计带通滤波器,若Wn是 1×L的向量,则可用来设计L带滤波器。

对格式(1),若Wn为标量,则设计低通滤波器,若 Wn是1×2的向量,则用来设计带通滤波器,若Wn是 1×L的向量,则可用来设计L带滤波器。这时,格式 (1)要改为: b = fir1(N,Wn, 'DC-1'), 或 b = fir1(N,Wn, 'DC-0') 前者保证第一个带为通带,后者保证第一个带为阻带。 在上述所有格式中,若不指定窗函数的类型,fir1自动选择Hamming窗。指定窗函数格式: (4)b = fir1(N,Wn,wind); 例 b = fir1(N,Wn,boxcar(N+1)); 指定矩形窗

例7.2 用matlab设计一FIR滤波器,要求频率指标如下: Solution: clc;clear all; close all wp=0.15*pi; ws=0.25*pi; wdelta=ws-wp; N=ceil(8*pi/wdelta); Wn=(0.15+0.25)*pi/2; b=fir1(N,Wn/pi,hanning(N+1)); figure % freqz(b,1,512) [H,w]=freqz(b,1,512) ; plot(w,abs(H)) set(gca,'XTick',0:0.2*pi:pi) set(gca,'XTickLabel',{'0','0.2π','0.4π','0.6π','0.8π','π'}) axis([0,pi,0.97,1.03]); Hanning窗

10.fir2.m 本文件采用“窗函数法”设计具有任意幅 频相应的FIR 数字滤波器。其调用格式是: b = fir2(N, F, M); F是频率向量,其值在0~1之间,M是和F相对应 的所希望的幅频相应。如同fir1, 缺省时自动选用 Hamming窗。高通DF,N为偶数,不能为奇数 例7.3 :设计一多带滤波器,要求频率在0.2~0.3, 0.6~0.8 之间为1,其余处为零。设计结果如下: f = [0 0.2 0.2 0.3 0.3 0.6 0.6 0.8 0.8 1]; m = [0 0 1 1 0 0 1 1 0 0]; N1=30 N2=90 b1 = fir2(N1,f,m); b2 = fir2(N2,f,m); [H1,w]=freqz(b1,1,512); [H2,w]=freqz(b2,1,512); subplot(311) stem(b1) subplot(312) stem(b2) subplot(313) plot(f,m,w/pi,abs(H1),w/pi,abs(H2))

N=30 N=90 N=30,90时幅频响应响应及理想幅频响应;

11. remez.m 设计Chebyshev最佳一致逼近FIR滤波器、Hilbert变换器和差分器。调用格式是: (1) b=remez(N, F, A); (2) b=remez(N, F, A, W); (3)b=remez(N,F,A,W,‘Hilbert’); (4) b=remez(N, F, A,W, ‘'differentiator') N是给定的滤波器的阶次,b是设计的滤波器的系数,其长度为N+1;F是频率向量,A是对应F的各频段上的理想幅频响应,W是各频段上的加权向量。

F、A及W的指定方式和例7.4.1和7.4.2所讨论过 的一样,唯一的差别是F的范围为0~1,而非0~0.5, 1对应抽样频率的一半。需要指出的是,若b的长度为偶数,设计高通和带阻滤波器时有可能出现错误,因此,最好保证b的长度为奇数,也即N应为偶数。

例7.4.1: 设计低通 FIR DF: 调整通带、阻带的加权及滤波器的长度。 b=remez(N, F, A, W) 调整N或W的结果 clear all; f=[0 .6 .7 1];% 给定频率轴分点; A=[1 1 0 0];% 频率分点上理想幅频响应; weigh=[1 10];% 频率分点上的加权; b=remez(32,f,A,weigh); % 设计出切比雪夫最佳一致逼近滤波器; [h,w]=freqz(b,1,256,1); h=abs(h); h=20*log10(h); figure(1);stem(b,'.');grid; figure(2);plot(w,h);grid; 调整N或W的结果

例7.4.2: 设计多阻带滤波器,抽样频率500Hz, 在50Hz、 100Hz 及150Hz处陷波。 通带加权为8,阻带为1 -17dB 通带、阻带加权都是1 -25dB

例7.4.2: 设计多阻带滤波器,抽样频率500Hz, 在50Hz、 100Hz 及150Hz处陷波。 clear all; f=[0 .14 .18 .22 .26 .34 .38 .42 .46 .54 .58 .62 .66 1]; A=[1 1 0 0 1 1 0 0 1 1 0 0 1 1]; weigh1=[8 1 8 1 8 1 8]; b1=remez(64,f,A,weigh1); [h1,w1]=freqz(b1,1,256,1); h1=abs(h1);h1=20*log10(h1); subplot(211);plot(w1,h1);grid;axis([0 0.5 -60 10]) title('N=32,weight=[8 1 8 1 8 1 8]','FontSize',14,'Color','r')

例7.1.1.设计低通 DF FIR, 令截止频率 =0. 25π, 取 M=10, 20,40,观察其幅频响应的特点. clear all;N=10; b1=fir1(N,0.25,boxcar(N+1)); b3=fir1(2*N,0.25,boxcar(2*N+1)); b4=fir1(4*N,0.25,boxcar(4*N+1)); M=128; h1=freqz(b1,1,M); h3=freqz(b3,1,M); h4=freqz(b4,1,M); f=0:0.5/M:0.5-0.5/M; plot(f,abs(h1),f,abs(h3),f,abs(h4));grid; axis([0 0.5 0 1.2])

例7.1.2: 理想差分器及其设计 clear all;N=40;n=0:N; b1=fir1(N,0.25,boxcar(N+1)); b2=fir1(N,0.25,hamming(N+1)); win=hamming(N+1); for n=1:N+1 if (n-1-N/2)==0; b1(n)=0; else b1(n)=(-1)^(n-1-N/2)/(n-1-N/2); end b2(n)=0; b2(n)=win(n)*(-1)^(n-1-N/2)/(n-1-N/2); 例7.1.2: 理想差分器及其设计 M=128; h1=freqz(b1,1,M); h2=freqz(b2,1,M); % h=freqz(b,1,M); f=0:0.5/M:0.5-0.5/M; hd=2*pi*f; plot(f,abs(h1),f,abs(h2),f,hd,'k-')

12.remezord.m 本文件用来确定在用Chebyshev最佳一致逼近设计FIR滤波器时所需要的滤波器阶次。其调用格式是: [N, Fo, Ao, W] = remezord(F, A, DEV, Fs)。 F、A的含意同文件remez,DEV是通带和阻带上的偏差;输出的是适合要求的滤波器阶次N、频率向量Fo、幅度向量Ao和加权向量W。若设计者事先不能确定要设计的滤波器的阶次,那么,调用remezord后,就可利用这一族参数调用remez, 即 b=remez(N, Fo, Ao, W),从而设计出所需要滤波器。因此,remez和remezord常结合起来使用。需要说明的是,remezord给出的阶次N有可能偏低,这时适当增加N即可;另外,最好判断一下,若N为奇数,就令其加一,使其变为偶数,这样b的长度为奇数。

与第八、九章有关的 MATLAB 文件 与本章内容有关的MATLAB文件主要是fft, ifft和 czt.m。顾名思义,fft实现快速傅立叶变换,ifft实现快速傅立叶反变换,czt.m 用来实现线性调频Z变换。 fft的调用格式是: X=fft(x), 或 X=fft(x, N)。 以高频pi为频谱中心 fftshift(X):移位使以零频为频谱中心

信号x X=fft(x) fftshift(X)

fftfilt.m 用叠接相加法实现长序列卷积。格式是: y=fftfilt(h,x) 或 y=fftfilt(h, x,N) 记 的长度为 , 的长度为 。 若采用第一个调用方式,程序自动地确定对 分段的长度 及做FFT的长度 , 显然, 是最接近 的2的整次幂。分的段数为 。 采用第二个调用方式,使用者可自己指定做FFT的长度。建议使用第一个调用方式。

例1. 设x(n)是两个正弦信号及白噪声的叠加,进行频谱分析。 clear all; % 产生两个正弦加白噪声; N=256; f1=.1;f2=.2;fs=1; a1=5;a2=3; w=2*pi/fs; x=a1*sin(w*f1*(0:N-1))+a2*sin(w*f2*(0:N-1))+randn(1,N); % 应用FFT 求频谱; subplot(4,1,1); plot(x(1:N/4)); axis tight f1=0:2*pi/N:2*pi-pi/N; f=-pi:2*pi/N:pi-pi/N; X=fft(x); y=ifft(X); subplot(4,1,2); plot(f1, abs(X));axis tight subplot(4,1,3); plot(f, fftshift(abs(X)));axis tight subplot(4,1,4); plot(real(y(1:N/4))); axis tight

信号x X=fft(x) fftshift(X) x’=ifft(X)

例2 令x(n)为一正弦加白噪声信号,长度为500,h(n)是用fir1. m文件设计的一个低通FIR滤波器,长度为11 例2 令x(n)为一正弦加白噪声信号,长度为500,h(n)是用fir1.m文件设计的一个低通FIR滤波器,长度为11.试用fftfilt实现长序列的卷积 clear; % 用叠接相加法,计算滤波器系数h和输入信号x的卷积 % 其中h为10阶hanning窗,x是带有高斯白噪的正弦信号 h=fir1(10,0.3,hanning(11)); % h: is the impulse response of a N=500;p=0.05;f=1/16; % low-pass filter. u=randn(1,N)*sqrt(p); % u:white noise s=sin(2*pi*f*[0:N-1]); % s:sine signal x=u(1:N)+s; % x: a long sequence; y=fftfilt(h,x); % Overlap-add method of FIR filtering using FFT % y=filter(h,1,x); % y=x*h subplot(211); plot(x); subplot(212); plot(y); figure; subplot(211); plot(abs(fft(x))); subplot(212); plot(abs(fft(y)));

信号x 滤波输出信号y 信号x频谱 信号y频谱

clear; % 按照overlap-add算法编程实现长信号滤波输出 % 生成滤波器系数h和混有高斯白噪的正弦信号x h=fir1(10,0.3,hanning(11)); N=500;p=0.05;f=1/16; u=randn(1,N)*sqrt(p);% s=sin(2*pi*f*[0:N-1]); x=u(1:N)+s; % 将x分为长度为L的小段 L=20;M=length(h); y=zeros(1,N+M-1); tempy=zeros(1,M+L-1); tempX=zeros(1,L); for k=0:N/L-1 tempx(1:L)=x(k*L+1:(k+1)*L); tempy=conv(tempx,h); y=y+[zeros(1,k*L),tempy,zeros(1,N-(k+1)*L)]; end subplot(211);plot(x) subplot(212);plot(y(1:N))

czt.m 调用格式是: X=czt(x, M, W, A) 。x是待变换的时域信号,其长度设为N,M是变换的长度,W确定变换的步长,A确定变换的起点。若M=N, A=1, 则CZT变成DFT。 A=exp(j*2*pi*f0/fs); W=exp(-j*2*pi*DELf/fs);

例3 设x(n)由三个实正弦组成,频率分别是8HZ, 8.22HZ 和9HZ, 抽样频率是40HZ ,时域取128点。 用CZT计算的DFT 用FFT计算的DFT 7~(7+M×0.05) HZ 的CZT变换

程序 clear all; % 构造三个不同频率的正弦信号的叠加作为试验信号 N=128; f1=8;f2=8.22;f3=9;fs=40; stepf=fs/N; n=0:N-1; t=2*pi*n/fs; n1=0:stepf:fs/2-stepf; x=sin(f1*t)+sin(f2*t)+sin(f3*t); M=N; W=exp(-j*2*pi/M); % A=1时的czt变换 A=1; Y1=czt(x,M,W,A); subplot(311) plot(n1,abs(Y1(1:N/2)));grid on;

% DFT Y2=abs(fft(x)); subplot(312) plot(n1,abs(Y2(1:N/2)));grid on; % 详细构造A后的czt M=60; f0=7.2; DELf=0.05; A=exp(j*2*pi*f0/fs); W=exp(-j*2*pi*DELf/fs); Y3=czt(x,M,W,A); n2=f0:DELf:f0+(M-1)*DELf; subplot(313);plot(n2,abs(Y3));grid on;

hilbert.m 文件用来计算信号Hilbert变换。调用 的格式是: y=hilbert(x),y的实部就 所以,y 实际上是 x 的解析信号。