matlab tf()函数可用来建立传递函数,使用方法有很多,最直接方法如下:
1、建立连续传递函数
s = tf('s')
sys = s/(s^2 + 2*s + 10)
输出结果:
sys =
s
--------------
s^2 + 2 s + 10
Continuous-time transfer function.
2、建立离散传递函数
ts = 0.1;
z = tf('z',ts)
sys = (z - 1) / (z^2 - 1.85*z + 0.9)
输出结果:
sys = z - 1 ------------------ z^2 - 1.85 z + 0.9 Sample time: 0.1 seconds Discrete-time transfer function.
三 滤波器滤波器传递函数一般可写成如下形式:
在此我们只考虑数字滤波器,其中n代表滤波器的阶数,通过设定不同 的系数b,a可设计低通,高通,带通,带阻滤波器。
由离散传递函数很容易得出差分方程:
a(1)y(n)=b(1)x(n)+b(2)x(n−1)+...+b(nb+1)x(n−nb)−a(2)y(n−1)−...−a(na+1)y(n−na).
对于二阶传递函数一般写成:
二阶差分方程为:
一阶差分方程:
四 用matlab生成两种滤波器
1、 matlab [b,a] = butter(n,Wn) n:滤波器阶数,Wn:截止频率,默认生成n阶巴特沃斯低通滤波器
例如生成一六阶低通滤波器:
fc = 300;
fs = 1000;
[b,a] = butter(6,fc/(fs/2));
freqz(b,a,[],fs)
subplot(2,1,1)
ylim([-100 20])
[b,a]可直接带入tf()函数中,可通过幅频特性图查看滤波器性能。
2、生成一二阶陷波滤波器 [b,a] = iirnotch(wc,wb);
代码可参考matlab帮助文档,[b,a]可直接带入tf()查看效果
若想生成单片机可执行的c语言函数,可用matlab coder转换butter(n,Wn)和iirnotch(wc,wb)函数,则可生成对应的C语言函数,生成的[b,a]系数可直接带入差分方程。