资源预览内容
第1页 / 共81页
第2页 / 共81页
第3页 / 共81页
第4页 / 共81页
第5页 / 共81页
第6页 / 共81页
第7页 / 共81页
第8页 / 共81页
第9页 / 共81页
第10页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MatlabMatlab与信号处理与信号处理( (信号信号处理处理) )4、基于MATLAB的数字信号处理4.1 4.1 信号产生信号产生4.2 4.2 离散系统的离散系统的MATLABMATLAB实现实现4.3 4.3 变换的变换的MATLABMATLAB实现实现4.4 4.4 数字滤波器设计数字滤波器设计4.5 4.5 功率谱估计功率谱估计24.1 信号产生l信号的表示信号的表示x(n)=x(n)=,x(-2),x(-1),x(0),x(1),x(2) Matlab中,信号都是用矩阵(向量)描述例如:x=4 3 7 9 1l典型离散信号表示典型离散信号表示单位抽样序列 x=zeros(1,N); x(1)=1; (n) x(k)=1; (n-k)单位阶跃序列: x=ones(1,N);3波形的产生波形的产生首先产生时间:如t=0:0.01:2*pi;产生信号:如 y=sin(2*t+pi/4);square sawtooth sinc 噪声的产生噪声的产生rand , randn4 周期波形产生函数名功能Sawtooth(t,width)产生锯齿波或三角波. Width确定最大值位置Square(t,duty)产生方波。Duty指定正半周期的比例Sinc(t)产生sinc或sin(pi*t)/(pi*t)Diric(t,n)产生Dirichlet函数5sawtooth(t,0.7)square(t)sinc(t)diric(t,5)6l信号的常规操作信号加x=x1+x2信号必须等长对齐信号乘x=x1.*x2信号必须等长对齐改变比例x=a*x1移位x=x1(n-k)7折叠y=x(-n)取样和y=sum(x(n1:n2)取样积y=prod(x(n1:n2)卷积y=conv(x,h)y,ny=conv_m(x,nx,h,nh)相关r= xcorr(x,y)8l产生数据产生数据直接键盘输入直接键盘输入利用函数产生,如利用函数产生,如sin,cos,sawtooh等等用用Matlab从从.Mat文件导入文件导入通过文件读写产生数据,如通过文件读写产生数据,如fopen,fread等等用一个用一个.M文件专门产生数据文件专门产生数据94.2 离散系统的MATLAB实现离散系统的表示方法:离散系统的表示方法: LSI系统的时域表示系统的时域表示 常系数线性差分方程 单位抽样响应h(n) LSI系统的频域表示系统的频域表示 频率响应 (DFT) 转移函数 (z变换) 零极点增益 二次分式 离散系统的内部描述离散系统的内部描述 10l离散系统的输入输出的差分方程:离散系统的输入输出的差分方程:l单位抽样响应单位抽样响应 ?filter函数y=filter(b,a,x)impz函数y=impz(b,a)1112l频率响应 ? h,f=freqz(b,a,n,fs)1314l 零极点增益?15l离散系统的表示方法转换函数 tf2zp sos2tf tf2ss sos2zp zp2tf sos2ss zp2sos ss2tf zp2ss ss2zp ss2sos16 4.3 变换的MATLAB实现1、DFT17计算 DFT并画图 1819202、FFT 可利用内部函数fft进行计算,速度快。 y=fft(x,n) x的n点fft x=ifft(y,n)213、z变换R,P,K=residuez(b,a);224、DCTly=dct(x,n)lx=idct(y,n)23rp=84.3566245、Hilbert变换l 解析信号 l DFT方法求解l 函数y=Hilbert(x)25(1) 数字滤波器的基本概念数字滤波器的基本概念(2)基于)基于MATLAB的的IIR滤波器设计滤波器设计(3) 基于基于MATLAB的的FIR滤波器设计滤波器设计4.4 基于基于MATLAB的数字滤波器设计的数字滤波器设计26(1) 数字滤波器的基本概念数字滤波器的基本概念l数字滤波器数字滤波器 对数字信号进行滤波的线性时不变系统。l数字滤波器的分类数字滤波器的分类 IIR数字滤波器:设计经典选频滤波器,性能好, 阶数低。 FIR数字滤波器:设计线性相位经典滤波器,适用范围广、 阶数高。 27l数字滤波器的设计步骤数字滤波器的设计步骤1) 按照实际任务的要求,确定滤波器的技术指标。2)用一个因果、稳定的离散线性时不变系统的系统函数 去逼近这一网络性能。根据不同的要求可选择IIR或者 FIR系统函数去逼近。3)利用有限精度算法实现系统函数。28lIIR数字滤波器一般有两种设计方法: 1)模拟原型法 先设计一个合适的模拟滤波器,然后再变 换为满足要求的数字滤波器 。 2)直接法 直接在离散时域和离散频域进行数字滤波 器的设计 29lFIR一般有三种设计方法: 窗函数法 频率取样法 切比雪夫逼近法 30(2) 基于基于MATLAB的的IIR滤波器设计滤波器设计lButterworth数字滤波器设计数字滤波器设计l椭圆数字滤波器设计椭圆数字滤波器设计lChebyshev-I数字滤波器设计数字滤波器设计lChebyshev-II数字滤波器设计数字滤波器设计31lButterworth数字滤波器设计数字滤波器设计 MATLAB语句: b,a=butter(n,wn) (1) b,a=butter(n,wn,ftype) (2) z,p,k=butter() (3) a,b,c,d=butter() (4) 语句(1) (4) 都可以设计一个阶数为n,截止频率为wn的数字低通滤波器。对于语句(2) ,若参数ftype取hi-gh或stop,则可以来设计相应的高通或带阻滤波器。 返回值a和b为系统函数的分子和分母的系数。32系统函数为: 返回值z,p,k分别是滤波器的零点、极点和增益。返回值A、B、C、D构造滤波器的状态方程。状态方程为: 其中u是输入信号,x是状态变量,y是输出信号。33例例 : 设计一个阶数为9阶、截止频率为300Hz的高通 Butterworth滤波器,采样频率为1000。并画出它的频率特性。程序: n=9; wn=300/500; b,a=buffer(n,wn,high); freqz(b,a,128,1000);34Buttordworth高通滤波器的频率响应35 n=236例例 设计一个10阶的带通Butterworth滤波器,它的通带 范围是100200Hz,采样频率为1000。并画出它的频率特性和冲击响应。 程序:n=10; wn=100 200/500; b,a=butter(n,wn); freqz(b,a,128,1000); y,t=impz(b,a,101); stem(t,y);37 Buttordworth带通滤波器的频率响应38Buttordworth滤波器的时域冲击响应39l椭圆数字滤波器设计椭圆数字滤波器设计 MATLAB语法: b,a=ellip(n,Rp,Rs,wn) (5) b,a=ellip(n, Rp,Rs, wn,ftype) (6) z,p,k=ellip() (7) a,b,c,d=ellip() (8) 语句(5) (8)都可以设计一个阶数为n,截止频率为wn,通带波纹最大衰减为Rp、阻带波纹最小衰减为Rs的数字低通滤波器。对于语句(6),若参数ftype取high或stop,则可以来设计相应的高通或带阻滤波器。 返回值a和b为系统函数的分子和分母的系数。返回 40值z,p,k分别是滤波器的零点、极点和增益。返回值A、B、C、D可以用来构造滤波器的状态方程。例例 采样频率为1000Hz,请设计一个阶数为6阶、截止频 率为300Hz的低通ellip数字滤波器。其中滤波器在通 带的波纹为3dB,阻带的波纹为50dB。 程序: b,a=ellip(6,3,50,300/500); freqz(b,a,512,1000); title(n=6 低通椭圆滤波器);41椭圆低通滤波器的频率响应42例例 设计一个10阶的带通滤波器,通带范围为100200Hz, 信号的采样频率为1000Hz,滤波器在通带的波纹为0.5 dB,阻带的波纹为20dB。设计出这个滤波器并画出它 的冲击响应。 程序: b,a=ellip(10,0.5,20,100 200/500); y,t=impz(b,a,101); freqz(b,a,128,1000); stem(t,y); title(n=10 带通椭圆滤波器);43椭圆带通滤波器的频率响应44椭圆滤波器的冲击响应45lChebyshev-I数字滤波器设计数字滤波器设计 MATLAB语法: b,a=cheby1(n,Rp,wn) (9) b,a= cheby1(n,Rp,wn,ftype) (10) z,p,k= cheby1() (11) a,b,c,d= cheby1() (12) 语句(9) (12)都可以设计一个阶数为n,截止频率为wn,通带波纹最大衰减为Rp的数字低通滤波器。对于语句(10),若参数ftype取high或stop,则可以来设计相应的高通或带阻滤波器。 返回值a和b为系统函数的分子和分母的系数。返回46值z,p,k分别是滤波器的零点、极点和增益。返回值A、B、C、D可以用来构造滤波器的状态方程。例例 对采样频率为1000Hz的采样信号,设计一个阶数为9 阶,截止频率为300Hz的低通cheby1数字滤波器,其 中滤波器在通带的波纹为0.5dB。 程序: b,a=cheby1(9,0.5,300/500); freqz(b,a,512,1000); 47 Chebyshev-I数字低通滤波器的频率响应48lChebyshev-II数字滤波器设计数字滤波器设计 MATLAB语法: b,a=cheby2(n,Rs,wn) (13) b,a= cheby2(n,Rs,wn,ftype) (14) z,p,k= cheby2() (15) a,b,c,d= cheby2() (16) 语句(13) (16)都可以设计一个阶数为n,截止频率为wn, 阻带纹波最小衰减为Rs的数字低通滤波器。对于语句(13)式,若参数ftype取high或stop,则可以来设计相应的高通或带阻滤波器。 返回值a和b为系统函数的分子和分母的系数。返回49值z,p,k分别是滤波器的零点、极点和增益。返回值A、B、C、D可以用来构造滤波器的状态方程。例例 对于采样频率为1000Hz的信号,设计一个阶数为9阶,截止频率为300Hz的低通Chebyshev-II数字滤波器,其中滤波器在阻带的波纹为20dB。 程序: b,a=cheby2(9,20,300/500); freqz(b,a,512,1000); 50 Chebyshev-II数字低通滤波器的频率响应 51(3 )基于)基于MATLAB的的FIR滤波器设计滤波器设计l窗函数法设计窗函数法设计FIR数字滤波器数字滤波器l频率取样法频率取样法l切比雪夫逼近法设计切比雪夫逼近法设计FIR滤波器滤波器52l 窗函数法设计窗函数法设计FIR数字滤波器数字滤波器 时域中进行的 常见的窗函数 w=boxcar(n) w=triang(n) w=hanning(n) w=hamming(n) w=blackman(n) w=chebwin(n,R) w=bartlett(n) w=kaiser(n, ) 53例:用8种窗函数设计数字低通滤波器。采样频率 1000Hz,截止频率200Hz,滤波器阶数81。 程序:5455利用利用fir1函数设计滤波器函数设计滤波器(窗函数法)窗函数法) MATLAB语法: b=fir1(n, wn) b=fir1(n, wn, ftype) b=fir1(n, wn, window) b=fir1(n, wn, ftype, window) 56例例 : 设计一个阶数为48,通带范围为 0.350.65的带通FIR线性相位滤波器,并分析它的频率特性。 程序:b=fir1(48,0.35,0.65); freqz(b); 57 利用FIR1设计的带通滤波器的频率响应58利用利用kaiserord函数求凯赛窗函数的参数函数求凯赛窗函数的参数 MATLAB语法: n,wn,beta,ftype=kaiserord(f,a,dev) n,wn,beta,ftype=kaiserord(f,a,dev,Fs)例例 利用凯赛窗函数设计一个低通FIR数字滤波器,通带 范围是01000Hz,阻带范围是15004000Hz,通带 的波纹最大为0.05,阻带的波纹最大为0.01。采样频 率为8000Hz。59 程序: fsamp=8000; fcuts=1000 1500; mags=1 0; devs=0.05 0.01; n,wn,beta,ftype=kaiserord(fcuts,mags, devs,fsamp); b=fir1(n,wn,ftype,kaiser(n+1,beta); freqz(b); 60 利用凯赛窗设计的低通滤波器的频率响应61利用利用fir2函数设计任意响应函数设计任意响应FIR数字滤波器数字滤波器 MATLAB语法: b=fir2(n, f, m) b=fir2(n, f, m, window) b=fir2(n, f, m, npt) b=fir2(n, f, m, npt, window) b=fir2(n, f, m, npt, lap) 62例例 设计一个60阶的滤波器,要求设计的滤波器在0 的幅度响应为1,在 到 的幅度响应为 ,在 到 的幅度响应为 ,在 到 的 幅度响应为 ,在 到 的幅度响应为 。并画 出该滤波器和理想滤波器的幅频响应曲线,进行比较。 程序:f=0,0.125,0.125,0.25,0.25,0.5,0.5,0.75,0.75,1; m=1,1,0.5,0.5,0.25,0.25,1/6,1/6,0.125,0.125; b=fir2(60, f, m); h,w= freqz(b); plot(f,m,w/pi,abs(h);63 用fir2设计的任意响应的滤波器与理想滤波器比较64l 切比雪夫逼近法设计FIR滤波器 采用最大误差最小准则方法设计滤波器 优化问题 雷米兹(REMEZ)算法 较成功的设计线性相位滤波器的方法65利用利用remez函数设计函数设计FIR数字滤波器数字滤波器 MATLAB语法: b=remez(n, f, m) b=remez(n, f, m, w) b=remez(n, f, m, ftype) b=remez(n, f, m, w, ftype) 66其它的MATLAB函数 : firls remezord fircs fircls1 cremez firrcos 67l IIR与FIR数字滤波器的比较在相同的技术指标下,IIR可以用比FIR较少的阶数来满足要求;FIR可得到严格的线性相位;IIR的设计可利用模拟滤波器的结果IIR主要设计规格化的滤波器,而FIR较灵活,可是任意响应的滤波器,适应性较广。 68n一维信号处理:信号滤波信号:s1 = sin(2*pi*t*5); s2=sin(2*pi*t*15); s3=sin(2*pi*t*30);S=s1+s2+s3滤波器:b,a = ellip(4,0.1,40,10 20*2/Fs);H,w = freqz(b,a,512);滤波后的结果sf = filter(b,a,s);695 功率谱估计 概念 : 平稳随机信号的功率谱密度(PSD)是自相关序列的离散时间傅立叶变换70 功率谱估计的方法71经典功率谱估计方法l直接法(周期图法) 直接由傅立叶变换而得来的。72例子:直接法计算功率谱利用FFT直接法:Fs=1000;NFFT=1024;n=0:1/Fs:1;x=sin(2*pi*40*n)+4*sin(2*pi*100*n)+randn(size(n); %噪声序列X=fft(x,NFFT);Pxx=abs(X).2/length(n); %求解PSDt=0:round(NFFT/2-1);k=t*Fs/NFFT;P=10*(log10(Pxx(t+1);plot(k,P)xlabel(Frequency(Hz);ylabel(PSD(dB/Hz);7374利用periodogram函数:Fs=1000;NFFT=1024;n=0:1/Fs:1;x=sin(2*pi*40*n)+4*sin(2*pi*100*n)+randn(size(n); %噪声序列window=boxcar(length(x);Pxx,f=periodogram(x,window,NFFT,Fs); %求PSDPlot(f,10*log10(Pxx)75直接法功率谱图76l间接法(自相关法或BT法) 其理论基础是维纳-辛钦定理。其方法是先由随机信号N个观察值估计出自相关函数 ,然后再求 的傅立叶变换。77例子:间接法求功率谱估计Fs=2000;NFFT=1024;n=0:1/Fs:1;x=sin(2*pi*100*n)+4*sin(2*pi*500*n)+randn(size(n);%噪声序列Cx=xcorr(x,unbiased); %计算序列的自相关函数Cxk=fft(Cx,NFFT);Pxx=abs(Cxk); %求解PSDt=0:round(NFFT/2-1);k=t*Fs/NFFT;P=10*(log10(Pxx(t+1);plot(k,P)title(自相关法功率谱估计);xlabel(Frequency(Hz);ylabel(PSD(dB/Hz);78间接法功率谱图79l改进法:Welch法(psd、pwelch)lAR模型功率谱估计 80结束结束
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号