matlab filtic 函数应用 filter 解差分方程 dft 函数
一、 解差分方程
说明都在代码注释里面了
%这里要利用filtic函数 为滤波器的直接II型实现选择初始条件
%求解查分方程 y(n) - 0.4y(n-1) - 0.45y(n-2) = 0.45x(n) +0.4x(n-1) - x(n-2)
%y(-1) = 0 y(-2) = 1 x(-1) = 1 x(-2) = 2
%x(n) = 0.8 ^u(n) 状态方程H(z) = (0.45 + 0.4z^-1 - z^-2)/(1- 0.4z^-1-0.45z^-2)
% x 为滤波前序列 y 为输出 序列
% 总结一下 首先把num 和den 写出来
num = [ 0.45 0.4 -1];
den = [1 -0.4 -0.45]
% 其次把初始条件写来
x0 = [1 2] ;
y0= [0 1];
N = 50 ;
n = [1 :N-1]';
x = 0.8.^n;
%生成初始条件
Zi = filtic(num, den , y0 , x0);
[y , Zf] = filter(num , den ,x, Zi);
plot(n , x ,'R-', n, y, 'b--');
xlabel('n'); ylabel('(n)--y(n)');
legend('Input x' , 'Output y', 1);
grid;运行结果:
二、和上面类似简单的解差分方程
%这里要借助filter 和filtic 解差分方程
%假设输入信号为 x = 0.8.^n;
%求输出序列
%差分方程y(n) = x(n) - 5x(n-1)+ 8x(n-3)
num = [1 -5 0 8];
N = 30 ;
n =[0: N-1] ;
x = 0.8.^n;
y = filter(num , 1, x);
stem(n, y) ;
title('Response');
grid
运行结果:
三、dft 函数
%这里写出一个dft函数
% Xk = DFT[xn] = 公式
% 总结一下dft 写法首先确定xn N WN = exp(-j*2*pi/N)
%其次 确定nk = n'* k 再确定WNnk Xk = xn*WNnk
function [Xk] = dft(xn, N)
n = [0 :1 : N-1];
k = n ;
WN = exp(-j*2*pi/N);
nk = n'*k;
WNnk = WN.^nk;
Xk = xn*WNnk;
end
四、dft 应用
% x(n) = cos(0.48*pi*n) + cos(0.52*pi*n)
%绘制x(n) Xk(k) dft 变换
clf;
N = 100;
n = 0: N-1;
xn = cos(0.48*pi*n) + cos(0.52*pi*n);
Xk = dft(xn,N);
%幅度值 相位值
magXk = abs(Xk);
phaXk = angle(Xk);
% 原函数图像
subplot(221);
plot(n,xn);
xlabel('n'); ylabel('x(n)');
title('xn');
%幅度频率特性
subplot(222);
k = 0:length(magXk) - 1;
plot(k, magXk);
xlabel('k');
ylabel('abs(Xk)');
title('Xk');
运行结果: