大家帮我看看这个程序,基础东西
%circonvt.m function y=circonvt(x1,x2,N)
%在x1 和x2:(时域)之间的N 点圆周卷积
%-----------------------------------------
%[y]=circonvt(x1,x2,N)
%y=包含圆周卷积的输出序列
%x1=长度N1<=N 的输入序列
%x2=长度N2<=N 的输入序列
%N=循环缓冲器的大小
%方法y(n)=sum(x1(m)*x2((n-m) mod N))
%检查x1的长度:
if length(x1)>N
error('N必须>=x1的长度')
end
%检查x2的长度:
if length(x2)>N
error('N必须>=x2的长度')
end
x1=[x1 zeros(1,N-length(x1))];
x2=[x2 zeros(1,N-length(x2))];
m=[0:1:N-1];
x2=x2(mod(-m,N)+1); % 这行什么意思??赐教
H=zeros(N,N);
for n=1:1:N
H(n,:)=cirshftt(x2,n-1,N); % 这行呢? 赐教
end
y=x1*H';
其中包含的子函数:
%cirshftt.m
function y=cirshftt(x,m,N)
%长度为N 的x序列:(时域)作m个样本的循环移位
%---------------------------------------
%[y]=cirshftt(x,m,N)
%y=包含循环移位的输出序列
%x=长度<=N的输入序列
%m=移位样本数
%N=循环缓冲器长度
%方法: y(n)=x((n-m) mod N)
%检查x的长度
if length(x)>N
error('N必须>=x的长度')
end
x=[x zeros(1,N-length(x))];
n=[0:1:N-1];
n=mod(n-m,N); %。。。。。。。。。。。
y=x(n+1); % 为什么加1了呢 ?加1 不又移了一位
%mod.m
function m=mod(n,N)
%计算m=(n mod N)下标
m=rem(n,N);
m=m+N;
m=rem(m,N);