一、数字微分器
理想数字微分器的幅值响应为
离散域处理中,若微分器长M为奇数(第3类滤波器),则转变为
若微分器长M为偶数(第4类滤波器),则转变为
案例1、用等波纹法设计数字微分器,微分器长N=33。程序如下:
clear all; clc; close all;
N=33; % 设置滤波器长
f=0:0.05:0.95; % 设置频率点
a=f*pi; % 设置对应频率点的幅值
b=firpm(N,f,a,'differentiator'); % 用等波纹法设计
[db,mag,pha,grd,w]=freqz_m(b,1); % 求频域响应
% 作图
subplot 211; stem(b,'k');
title('微分器的脉冲响应')
xlabel('样点'); ylabel('幅值')
subplot 212; plot(w/pi,mag,'k','linewidth',2);
grid; title('微分器的幅频特性')
xlabel('归一化频率'); ylabel('幅值')
set(gcf,'color','w');
运行结果如下:
分析:
①在firpm函数中可以带有'differentiator'参数,表示设计微分器,这给微分器的设计带来了便利。
②我们设置了微分器阶数是33,微分器系数长M为34(偶数),所以得到的微分器是第4类滤波器。有的文献指出,只有第4类FIR滤波器适合做微分器。微分器阶数是可以改变的,可根据具体情况自行设定,但为了保证微分器是第4类FIR滤波器,阶数应为奇数。
二、数字希尔伯特变换器
线性相位希尔伯特变换器的理想频率响应为
在离散条件下幅度响应是纯虚数,为
式中:M为奇数。
案例2、用等波纹法设计数字希尔伯特变换器,变换器系数长M=51。程序如下:
clear all; clc; close all;
N=50; % 设置滤波器长
M=N+1; % 希尔伯特变换器长
f = [0.05,0.95]; % 设置频率点
a = [1 1]; % 设置对应频率点的幅值
h = firpm(N,f,a,'hilbert'); % 用等波纹法设计
[db,mag,pha,grd,w]=freqz_m(h,[1]); % 求频域响应
% 作图
subplot(1,1,1)
subplot(2,1,1); stem([0:N],h,'k');
title('希尔伯特变换器的脉冲响应')
xlabel('样点'); ylabel('幅值')
axis([0,N,-0.8,0.8])
set(gca,'XTickMode','manual','XTick',[0,N])
set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8]);
subplot(2,1,2); plot(w/pi,mag,'k','linewidth',2);
grid; title('希尔伯特变换器的幅频特性')
xlabel('归一化频率'); ylabel('幅值')
set(gca,'XTickMode','manual','XTick',[0,f,1])
set(gca,'YTickMode','manual','YTick',[0,1]);
set(gcf,'color','w');
运行结果如下:
分析:
①在firpm函数中可以带有'hilbert'参数,表示设计希尔伯特变换器,这给希尔伯特变换器的设计带来了便利。
②程序中设置了希尔伯特变换器系数长是51,滤波器阶数N=50,系数长是奇数,所以得到的希尔伯特变换器是第3类滤波器。希尔伯特变换器阶数是可以改变的,可根据具体情况自行设定,但为了保证希尔伯特变换器是第3类FIR滤波器,阶数应为偶数,系数长为奇数。
参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)