函数一:[H,w]=freqz(B,A,N)
MATLAB提供了专门用于求离散系统频响特性的函数freqz(),调用freqz()的格式有以下两种:
l [H,w]=freqz(B,A,N)
B和A分别为离散系统的系统函数分子、分母多项式的系数向量,N为正整数,返回量H则包含了离散系统频响 在 0——pi范围内N个频率等分点的值,向量w则包含 范围内N个频率等分点。调用中若N默认,默认值为512。 l [H,w]=freqz(B,A,N,’whole’)
该调用格式将计算离散系统在0—pi范内的N个频率等分店的频率响应的值。
因此,可以先调用freqz()函数计算系统的频率响应,然后利用abs()和angle()函数及plot()函数,即可绘制出系统在 或 范围内的频响曲线。 绘制如下系统的频响曲线 H(z)=(z-0.5)/z
MATLAB命令如下: B=[1 -0.5]; A =[1 0];
[H,w]=freqz(B,A,400,'whole'); Hf=abs(H); Hx=angle(H); clf
figure(1) plot(w,Hf)
title('离散系统幅频特性曲线') figure(2) plot(w,Hx)
title('离散系统相频特性曲线')
函数二[b,a]=butter(n,Wn,/ftype/): butter函数的用法为:
[b,a]=butter(n,Wn,/ftype/)
其中n代表滤波器阶数,Wn代表滤波器的截止频率,这两个参数可使用buttord函数来确定。buttord函数可在给定滤波器性能的情况下,求出巴特沃斯滤波器的最小阶数n,同时给出对应的截止频率Wn。buttord函数的用法为:
[n,Wn]= buttord(Wp,Ws,Rp,Rs)
其中Wp和Ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值为1时代表采样频率的一半。Rp和Rs分别是通带和阻带区的波纹系数。 不同类型(高通、低通、带通和带阻)滤波器对应的Wp和Ws值遵循以下规则: 1.高通滤波器:Wp和Ws为一元矢量且Wp>Ws; 2.低通滤波器:Wp和Ws为一元矢量且Wp - ! 函数三 firl函数的使用: 在MATLAB下设计标准响应FIR滤波器可使用firl函数。firl函数以经典方法实现加窗线性相位FIR滤波器设计,它可以设计出标准的低通、带通、高通和带阻滤波器。firl函数的用法为: b=firl(n,Wn,/ftype/,Window) 各个参数的含义如下: b—滤波器系数。对于一个n阶的FIR滤波器,其n+1个滤波器系数可表示为:b(z)=b(1)+b(2)z-1+…+b(n+1)z-n。 n—滤波器阶数。 Wn—截止频率,0≤Wn≤1,Wn=1对应于采样频率的一半。当设计带通和带阻滤波器时,Wn=[W1 W2],W1≤ω≤W2。 ftype—当指定ftype时,可设计高通和带阻滤波器。Ftype=high时,设计高通FIR滤波器;ftype=stop时设计带阻FIR滤波器。低通和带通FIR滤波器无需输入ftype参数。 Window—窗函数。窗函数的长度应等于FIR滤波器系数个数,即阶数n+1。 函数4窗函数的使用: 在MATLAB下,这些窗函数分别为: 1.矩形窗:w=boxcar(n),产生一个n点的矩形窗函数。 2.三角窗:w=triang(n),产生一个n点的三角窗函数。 当n为奇数时,三角窗系数为w(k)= 当n为偶数时,三角窗系数为w(k)= 3.巴特利特窗:w=Bartlett(n),产生一个n点的巴特利特窗函数。 巴特利特窗系数为w(k)= 巴特利特窗与三角窗非常相似。巴特利特窗在取样点1和n上总以零结束,而三角窗在这些点上并不为零。实际上,当n为奇数时bartlett(n)的中心n-2个点等效于triang(n-2)。 4.汉明窗:w=hamming(n),产生一个n点的汉明窗函数。 汉明窗系数为w(k+1)=0.54-0.46cos( ) k=0,…,n-1 5.汉宁窗:w=hanning(n),产生一个n点的汉宁窗函数。 汉宁窗系数为w(k)=0.5[1-cos( )] k=1,…,n 6.布莱克曼窗:w=Blackman(n),产生一个n点的布莱克曼窗函数。 布莱克曼窗系数为w(k)=0.42-0.5cos(2π )+0.8cos(4π )] k=1,…,n 与等长度的汉明窗和汉宁窗相比,布莱克曼窗的主瓣稍宽,旁瓣稍低。 7.凯泽窗:w=Kaiser(n,beta),产生一个n点的凯泽窗数,其中beta为影响窗函数旁瓣的β参数,其最小的旁瓣抑制α与β的关系为: 0.1102(α-0.87) α>50 β= 0.5842(α-21)0.4+0.07886(α-21) 21≤α≤50 0 α<21 增加β可使主瓣变宽,旁瓣的幅度降低。 8.契比雪夫窗:w=chebwin(n,r)产生一个n点的契比雪夫窗函数。其傅里叶变换后的旁瓣波纹低于主瓣r个db数。 2 - ! Matlab中关于FIR滤波器设计的命令 收藏 一、产生窗函数的文件有八个: 1.bartlett(三角窗);——两端为零 2. blackman(布莱克曼窗); 3. boxcar(矩形窗); 4. hamming(哈明窗); 5. hanning(汉宁窗); 6. triang(三角窗);——两端不为零 7. chebwin(切比雪夫窗); 8 .kaiser(凯赛窗); 二、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:滤波器系数。 格式(1):若Wn为标量,则设计低通滤波器,若Wn是1×2的向量,则用来设计带通滤波器,若Wn是1×L的向量,则可用来设计L带滤波器。这时,格式(1)要改为: b = fir1(N,Wn, 'DC-1'), 或b = fir1(N,Wn, 'DC-0')。前者保证第一个带为通带,后者保证第一个带为阻带。 格式(2):用来设计高通滤波器。 格式(3):用来设计带阻滤波器。 在上述所有格式中,若不指定窗函数的类型,fir1自动选择Hamming窗。 三、fir2.m 本文件采用“窗函数法”设计具有任意幅频相应的FIR 数字滤波器。 其调用格式是:b = fir1(N, F, M); F是频率向量,其值在0~1之间,M是和F相对应的所希望的幅频相应。如同fir1, 缺省时自动选用Hamming窗。 例:设计一多带滤波器,要求频率在0.2~0.3, 0.6~0.8 之间为1,其余处为零。 四、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的指定方式和例8.4.1和8.4.2所讨论过的一样,唯一的差别是F的范围为0~1, 3 - ! 而非0~0.5, 1对应抽样频率的一半。需要指出的是,若b的长度为偶数,设计高通和带阻滤波器时有可能出现错误,因此,最好保证b的长度为奇数,也即N应为偶数。 五、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的长度为奇数。 例:fedge=[800 1000]; %表示频率向量,用于低通滤波器的通带截止和阻带起始 mval=[1 0]; %对应fedge各频率向量上的理想幅频响应 dev=[0.0559 0.01];%通带和阻带上的偏差 fs=4000; %抽样频率 [N,fpts,mag,wt]=remezord(fedge,mval,dev,fs); %由remezord求得滤波器的阶次N、频率向量fpts、幅度向量mag和加权向量wt b=remez(N,fpts,mag,wt); [h,w]=freqz(b,1,256); plot(w*2000/pi,20*log10(abs(h))); grid; xlabel('频率/Hz') ylabel('幅度/dB') 六、其他 1、firls.m 用最小平方法设计线性相位FIR滤波器,可设计任意给定的理想幅频响应; 2、fircls.m用带约束的最小平方法设计线性相位FIR滤波器,可设计任意给定的理想幅频响应; 3、fircls1.m 用带约束的最小平方方法设计线性相位FIR低通和高通滤波器。 4、sgolay.m 用来设计Savitzky-GolayFIR 平滑滤波器,其原理见9.1.1节 5、firrcos.m 用来设计低通线性相位FIR滤波器,其过渡带为余弦函数形状。 一、在 MATLAB 中的窗函数,十分简单: (1)矩形窗(Rectangle Window) 调用格式:w=boxcar(n),根据长度 n 产生一个矩形窗 w。 (2)三角窗(Triangular Window) 调用格式:w=triang(n),根据长度 n 产生一个三角窗 w。 4 - ! (3)汉宁窗(Hanning Window) 调用格式:w=hanning(n),根据长度 n 产生一个汉宁窗 w。 (4)海明窗(Hamming Window) 调用格式:w=hamming(n),根据长度 n 产生一个海明窗 w。 (5)布拉克曼窗(Blackman Window)调用格式:w=blackman(n),根据长度 n 产生一个布拉克曼窗 w。 (6)恺撒窗(Kaiser Window) 调用格式:w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。 二、基于窗函数的 FIR 滤波器设计 利用 MATLAB 提供的函数 fir1来实现 调用格式:fir1(n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通滤波器,其通带为W1<ω<> [例]设计一个长度为 8 的线性相位 FIR 滤波器。其理想幅频特性满足 用矩形窗: Window=boxcar(8); b=fir1(7,0.4,Window); freqz(b,1) 用blackman窗: Window=blackman(8); b=fir1(7,0.4,Window); freqz(b,1) [例] 设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,w2=0.5π Window=blackman(16); b=fir1(15,[0.3 0.5],Window); freqz(b,1) linspace 是用来生成一个等差数列的lin是linear的缩写 x=linspace(a,b,n) 就是将生成一个以a和b为断点 共划分为n个区间的向量,比如 >> linspace(1,10,5) ans = 1.0000 3.2500 5.5000 7.7500 10.0000 5 - ! AWGN:在某一信号中加入高斯白噪声 y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。 y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为'measured',则函数将在加入噪声之前测定信号强度。 y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。 y = awgn(…,POWERTYPE) 指定SNR和SIGPOWER的单位。POWERTYPE可以是'dB'或'linear'。 最佳FIR滤波器设计-使用remezord,remez REMEZ和REMEZORD常用来设计最佳滤波器,其中REMZORD用来计算滤波器的阶 数。使用例子如下: 采用频率fs : 8000Hz 通带截至频率:1500Hz(归一化后为0.375) 阻带截至频率:2000Hz(归一化后为0.5) 通带波纹:0.01(即0.1737dB) 阻带衰减:0.1(即20dB) [n, fo, mo, w] = remezord([1500 2000], [1 0], [0.01 0.1], 8000); b = remez(n, fo, mo, w); %[h w] = freqz(b, 1, 128); %plot(w/pi, abs(h)); freqz(b, 1, 128); 得到的输出响应如下图: 6 - ! FIR滤波器设计(无反馈) fir2函数:基于窗函数的FIR滤波器设计——任意频率响应 语法格式: b = fir2(n,f,m) b = fir2(n,f,m,window) b = fir2(n,f,m,npt) b = fir2(n,f,m,npt,window) f 频率点矢量(属于[0 1]区间) n 滤波器阶数 m 幅度矢量 npt 指定加窗的点数 windows 指定的窗函数 2,FIR滤波器设计(无反馈) fir2函数:基于窗函数的FIR滤波器设计——任意频率响应 例:设计一个30阶的带通滤波器 n=30; f=[0 0.3 0.7 1]; m=[0 1 1 0]; b=fir2(n,f,m); freqz(b,1,512); butter函数:Butterworth滤波器设计 例2:从多种频率成分叠加的信号中,提取出某一频带的信号.例如:从 500Hz,1kHz,2kHz三种频率成分叠加的信号中,提取出频带为800Hz~1.5kHz的信号.要求:阻带衰减不低于10dB,通带衰减不高于3dB. %先选择滤波器阶数 Fs=5000; %Fs≥2*2kHz Wp=[800 1500]/(Fs/2); Ws=[600 1700]/(Fs/2); Rp=3; Rs=10; [n,Wn] = buttord(Wp,Ws,Rp,Rs); %再进行滤波器设计 [b,a]=butter(n,Wn,'bandpass'); z=filter(b,a,y); 7 - ! %设计低通滤波器: [N,Wc]=buttord() %估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc [a,b]=butter(N,Wc); %设计Butterworth低通滤波器 [h,f]=freqz(); %求数字低通滤波器的频率响应 figure(2); % 打开窗口2 subplot(221); %图形显示分割窗口 plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图 title('巴氏低通滤波器'); grid; %绘制带网格的图像 sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数 subplot(222); plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形 xlabel('时间 (seconds)'); ylabel('时间按幅度'); SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换 %%%%%%%%%%%%%%%%%%%%%%%%%%w= %新信号角频率 subplot(223); plot(); %绘制叠加函数S经过低通滤波器以后的频谱图 8 - ! title('低通滤波后的频谱图'); %设计高通滤波器 [N,Wc]=buttord() %估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc [a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器 [h,f]=freqz(); %求数字高通滤波器的频率响应 figure(3); subplot(221); plot(f,abs(h)); %绘制Butterworth高通滤波器的幅频响应图 title('巴氏高通滤波器'); grid; %绘制带网格的图像 sf=filter(); %叠加函数S经过高通滤波器以后的新函数 subplot(222); plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形 xlabel('Time(seconds)'); ylabel('Time waveform'); w; %新信号角频率 subplot(223); plot(); %绘制叠加函数S经过高通滤波器以后的频谱图 title('高通滤波后的频谱图'); %设计带通滤波器 9 - ! [N,Wc]=buttord() %估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc [a,b]=butter(N,Wc); %设计Butterworth带通滤波器 [h,f]=freqz(); %求数字带通滤波器的频率响应 figure(4); subplot(221); plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图 title('butter bandpass filter'); grid; %绘制带网格的图像 sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数 subplot(222); plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形 xlabel('Time(seconds)'); ylabel('Time waveform'); SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换 %%%%%%%%%%%%%%%%%%w=( %新信号角频率 subplot(223); plot(); %绘制叠加函数S经过带通滤波器以后的频谱图 title('带通滤波后的频谱图'); 10 - ! 一、MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数 (Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 11 - ! log2(x):以2为底的对数 log10(x):以10为底的对数 二、MATLAB常用的三角函数 sin(x):正弦函数 cos(x):馀弦函数 tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 三、适用於向量的常用函数有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位数 std(x): 向量x的元素的标准差 diff(x): 向量x的相邻元素的差 12 - ! sort(x): 对向量x的元素进行排序(Sorting) length(x): 向量x的元素个数 norm(x): 向量x的欧氏(Euclidean)长度 sum(x): 向量x的元素总和 prod(x): 向量x的元素总乘积 cumsum(x): 向量x的累计元素总和 cumprod(x): 向量x的累计元素总乘积 dot(x, y): 向量x和y的内积 cross(x, y): 向量x和y的外积 四、MATLAB的永久常数 i或j:基本虚数单位(即) eps:系统的浮点(Floating-point)精确度 inf:无限大, 例如1/0 nan或NaN:非数值(Not a number),例如0/0 pi:圆周率 p(= 3.1415926...) realmax:系统所能表示的最大数值 realmin:系统所能表示的最小数值 nargin: 函数的输入引数个数 nargin: 函数的输出引数个数 五、MATLAB基本绘图函数 plot: x轴和y轴均为线性刻度(Linear scale) loglog: x轴和y轴均为对数刻度(Logarithmic scale) semilogx: x轴为对数刻度,y轴为线性刻度 semilogy: x轴为线性刻度,y轴为对数刻度 13 - ! 六、plot绘图函数的叁数 字元 颜色 字元 图线型态 y 黄色 . 点 k 黑色 o 圆 w 白色 x x b 蓝色 + + g 绿色 * * r 红色 - 实线 c 亮青色 : 点线 m 锰紫色 -. 点虚线 -- 虚线 七、注解 xlabel('Input Value'); % x轴注解 ylabel('Function Value'); % y轴注解 title('Two Trigonometric Functions'); % 图形标题 legend('y = sin(x)','y = cos(x)'); % 图形注解 grid on; % 显示格线 八、二维绘图函数 bar 长条图 errorbar 图形加上误差范围 fplot 较精确的函数图形 polar 极座标图 hist 累计图 14 因篇幅问题不能全部显示,请点此查看更多更全内容