【陷波滤波器】陷波滤波器设计与matlab仿真以及在PID控制器中的应用

1.软件版本

matlab2013b

2.本算法理论知识

在信号处理中经常要把某些单频(窄带)干扰信号去除,例如求系统采集信号中的把工频信号滤除。实际上有一个很好的方法,便是使用陷波器。陷波器是一种特殊的带阻滤波器,陷波滤波器主要用于消除某个特定频率的干扰,数字陷波器一般为IIR滤波器。由于陷波器频率特性的特殊性,它除了可采用双线性变换进行设计外,还可以采用所谓零极点配置的方法进行设计。陷波滤波器是无限冲击响应(IIR)数字滤波器,该滤波器可以用以下线性差分方程表示:

 

陷波滤波器的理想频率特性曲线如下图所示:

 

     通过整合了陷波滤波器的控制系统,其基本结构如下所示(以简单的PID控制系统为例进行说明):

      其中陷波滤波器的参数是根据控制对象实际的振动滤波来设置的。从图3可知,用陷波滤波器消除控制回路中不平衡振动引起的周期性干扰。

3.部分源码

clc;
clear;
close all;
warning off;
  

f0   = 100;      %陷波器要滤除信号的频率
Ts   = 0.001;
Fs   = 1/Ts;    %采样频率
Len  = 512;     %信号长度
L    = 0:Len-1;

%陷波器
C1   =-2*cos(2*pi*f0*Ts);
C2   = 0.95;
b    =[1 C1 1];
a    =[1 C1*C2 C2^2];

figure(1);
%陷波器特性显示
freqz(b,a,Len,Fs);

%定义测试信号
x = 1.2*cos(2*pi*135*L*Ts) + cos(2*pi*100*L*Ts);

%陷波器滤波处理
y = dlsim(b,a,x);

y_fft = fft(x,Len);
y_fft = y_fft.*conj(y_fft)/Len;
y1    = fft(y,Len);
y2    = y1.*conj(y1)/Len;

figure(2);
subplot(221);
plot(L,x);
axis([0 Len -3 3]);
grid on;
xlabel('t');
ylabel('A');
 

subplot(222);
plot(L*Fs/Len,y_fft);
axis([0 Fs/2 min(y_fft) max(y_fft)]);
grid on;
xlabel('f(Hz)');
ylabel('A(dB)');
 


subplot(223);
plot(L,y);
axis([0 Len -2 2]);
grid on;
xlabel('t');
ylabel('A');
 

subplot(224);
plot(L*Fs/Len,y2);
axis([0 Fs/2 min(y2) max(y2)]);
grid on;
xlabel('f(Hz)');
ylabel('A(dB)');
 




4.仿真结论

 

 

     通过仿真结果可知,将同时包含100hz和135hz两种信号进行陷波滤波,通过陷波滤波器之后,信号仅剩下100hz,信号得到很好的还原了。A25-07

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/125153002