MATLAB中滤波函数、频率响应函数以及频率响应函数不同表达形式的转换

一、理论公式

        频率响应函数的表达式:H(e^{j\Omega })=\frac{b_{0}+b_{1}e^{-j\Omega }+...+b_{M}e^{-j\Omega M}}{a_{0}+a_{1}e^{-j\Omega }+...+a_{N}e^{-j\Omega N}}

        对应的z变换的多项表达式:H(z)=\frac{b_{0}+b_{1}z^{-1 }+...+b_{M}z^{- M}}{a_{0}+a_{1}z^{-1}+...+a_{N}z^{- N}}

        Z变换的零极点表达形式:H(z)=K\frac{(z-z_{1})+(z-z_{2})...(z-z_{M})}{(z-p_{1})+(z-p_{2})...(z-p_{N})}

        Z变换的二阶因子级联形式:H(z)=\prod_{i=1}^{L}\frac{b_{0i}+b_{1i}z^{-1 }+...+b_{2i}z^{- 2}}{a_{0i}+a_{1i}z^{-1}+...+a_{2i}z^{- 2}}

二、滤波函数filter

  1. filter函数,仅可以用于零状态响应系统。

        y=filter(b,a,x) ;       

        %b为z变换多项表达式公式中[b0,b1...bM]的矩阵

        %a为z变换多项表达式公式中[a0,a1...aN]的矩阵

        %x为输入的原始信号

移动平均滤波的matlab程序示例:

%求解零状态差分方程函数--LTI系统
% y=filter(b,a,x);


N=201;
n=rand(1,N)-0.5;%噪声信号
k=0:N-1;%
x=2*k.*(0.9.^k)+2.0*cos(0.02*pi*k)+5.0;%输入信号
y=x+n;%包含噪声的信号
plot(k,n,'g--',k,x,'b--',k,y,'r-');%显示三个函数图像,
xlabel('Time index k');
legend('n[k]','x[k]','y[k]');%添加图例


M=10;
b=ones(M,1)/M;%移动平均滤波,10个点相加,再除10,算出平均值
a=[1];
filter_y=filter(b,a,y);
plot(k,x,'b-',k,y,'g--',k,filter_y,'r-');%显示三个函数的波形
xlabel('Time index k');
legend('x[k]','y[k]','filter_y[k]');%添加图例

得出的波形如下图:

三、频率响应函数

 H=freqz(b,a,w);

%b为z变换多项表达式公式中[b0,b1...bM]的矩阵

        %a为z变换多项表达式公式中[a0,a1...aN]的矩阵

        %w为输入的角频率

matlab程序示例

%freqz用以分析离散系统的频率响应

b=[1]; %分子矩阵
a1=[1,-0.9]; a2=[1,0.9];%分母矩阵
w=linspace(0,pi,512);%在0-π范围内等间隔分512份
h1=freqz(b,a1,w);%计算频率响应
h2=freqz(b,a2,w);%计算频率响应
% plot(w,abs(h1),w,abs(h2),':');
plot(w/pi,abs(h1),w/pi,abs(h2),':');
legend('a=0.9','a=-0.9');

 

可以看出在分母矩阵为[1,-0.9]时,系统为低通滤波器;分母矩阵为[1,0.9]时,系统为高通滤波器。

 四、频率响应函数不同形式的转换

b=[1,4];%Z变换的分子矩阵
a=[1,0.1,-0.2];%Z变换的分母矩阵
z=zeros(1,2);%2*1的矩阵,值为0
% [z,p,K]=tf2zp(b,a);%多项式转零极点表达式
[z,p,K]=tf2zpk(b,a);%多项式转零极点表达式
sos=zp2sos(z,p,K);%零极点转二阶因子级联形式

多项式表达式为H(z)=\frac{1+z^{-1 }}{1+0.1z^{-1}-0.2z^{- 2}}

经过matlab计算,得到其零极点表达式为H(z)=\frac{z(z+1)}{(z-0.4)(z+0.5)}

二阶因子级联形式:H(z)=\frac{1+z^{-1 }}{1+0.1z^{-1}-0.2z^{- 2}}         (只有1级)

需要注意的是:tf2zp计算出来的结果中只有一个零点,而 tf2zpk计算出来的结果中有两个零点(多出来一个位置在0处的零点)

        tf2zpk是用于离散系统传递函数,基于z变换;而tf2zp是用于连续系统传递函数,基于拉普拉斯变换。依据二者的函数公式,计算该系统函数的零极点出来,确实会存在零点的细微差别。此处不做讨论,注意即可。

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解微分方程的频域响应函数,通常需要用到MATLAB的傅里叶变换和拉普拉斯变换工具箱。下面给出一个基本的步骤: 1. 将微分方程转换为拉普拉斯域方程。如果微分方程是线性且时不变的,可以使用拉普拉斯变换将其转换为代数方程。 2. 解拉普拉斯域方程的传递函数。传递函数是输入信号和输出信号之间的比例关系,通常用H(s)表示。 3. 将传递函数用傅里叶变换转换为频域响应函数H(jw)。在MATLAB,可以使用freqs函数解。 4. 绘制频域响应函数的图像。可以使用plot函数进行绘制。 下面给出一个简单的例子,假设有一个二阶低通滤波器,其微分方程为: y''(t) + 2ζωn y'(t) + ωn^2 y(t) = x(t) 其,y(t)为滤波器的输出,x(t)为输入信号,ζ为阻尼比,ωn为自然频率。 将其转换为拉普拉斯域方程得: H(s) = Y(s)/X(s) = 1 / (s^2 + 2ζωn s + ωn^2) 使用MATLAB解: ```matlab syms s; wn = 1; % 自然频率 zeta = 0.5; % 阻尼比 H = 1 / (s^2 + 2*zeta*wn*s + wn^2); % 解传递函数 w = logspace(-1, 2, 100); % 设定频率范围 Hw = freqs([1], [1 2*zeta*wn wn^2], w); % 解频域响应函数 semilogx(w, abs(Hw)); % 绘制幅频特性曲线 xlabel('Frequency (rad/s)'); ylabel('|H(jw)|'); grid on; ``` 上述代码,使用logspace函数设定频率范围,freqs函数解频域响应函数,semilogx函数绘制幅频特性曲线。 希望以上内容对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值