matlab 使用conv_m函数

n=-5:50;x=dw_jieyue(0,-5,50)-dw_jieyue(10,-5,50);h=((0.9).^n).* dw_jieyue(0,-5,50);
[y,ny]=conv_m(x,n,h,n);stem(ny,y);

dw_jieyue conv_m分别为以保存的单位阶跃和卷积函数;
如下:
function [y,ny] = conv_m(x,nx,h,nh)
%序列不从0开始的卷积和
ny1=nx(1)+nh(1);ny2=nx(length(x))+nh(length(h));
ny=ny1:ny2;
y=conv(x,h);
end

function [x,n] = dw_jieyue(n0,ns,nf)
%单位阶跃强调在n0及以后取1
n=(ns:nf);x=((n-n0)>=0);
end

运行时出现找不到指定模块错误!?这是怎么回事?

在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数y=conv(x,h)计算卷积。

(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。

实现差分方程,先从简单的说起:
filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]
y[1]=x[1]+2*0=1    (x[1]之前状态都用0)
y[2]=x[2]+2*x[1]=2+2*1=4

(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]; % impulse response

          x = [1 -2 3 -4 3 2 1]; % input sequence

         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;

温馨提示:答案为网友推荐,仅供参考