在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。 实现差分方程,先从简单的说起: (2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。 卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm. 程序一:以下两个程序的结果一样 (1)h = [3 2 1 -2 1 0 -4 0 3]; x = [1 -2 3 -4 3 2 1]; y = conv(h,x); n = 0:14; subplot(2,1,1); stem(n,y); xlabel('Time index n'); ylabel('Amplitude'); title('Output Obtained by Convolution'); grid; (2)x1 = [x zeros(1,8)]; y1 = filter(h,1,x1); subplot(2,1,2); stem(n,y1); xlabel('Time index n'); ylabel('Amplitude'); title('Output Generated by Filtering'); grid; 程序二:filter和conv的不同 x=[1,2,3,4,5]; y1=conv(h,x) 结果:y1 =1 3 6 9 12 9 5 y2 = 1 3 6 9 12 y3 =1 3 6 可见:filter函数y(n)是从n=0开始,认为所有n<0都为0;而conv是从卷积公式计算,包括n<0部分。 因此filter 和conv 的结果长短不同 程序三:滤波后信号幅度的变化 num=100; %总共1000个数
可见:滤波后信号的幅度是发生变化的,最大幅度值也会变化。 |
|