ovrlpsav.m
来自「%realize overlapped-save method %y:outp」· M 代码 · 共 30 行
M
30 行
function [y]=ovrlpsav(x,h,N)
%realize overlapped-save method
%y:output sequence
%x:input seqence
%h:filter impulse response sequence
%N:length of each segment
%重叠保留法实现分段卷积
Lenx=length(x);M=length(h);
M1=M-1;L=N-M1;
h=[h,zeros(1,N-M)]; %将序列h(n)补零到长度为N
%x(n)的前面补上M1-1个零,以修正第一段中的前面M-1个样本,
%在x(n)的后面补零,使得下面循环语句的索引不会超过范围
x=[zeros(1,M1),x,zeros(1,N-1)];
K=floor((Lenx+M1-1)/(L)); %确定分成多少段
Y=zeros(K+1,N);
for k=0:K
xk=x(k*L+1:k*L+N); %取出每一段对应的输入序列
Y(k+1,:)=circonv2(xk,h,N); %对每一段分别进行处理
end
Y=Y(:,M:N)';
y=(Y(:))'; %重叠保留
y=y(1:Lenx+M-1); %取出实际的输出序列
if ~any(imag(h))&~any(imag(x))
y=real(y); %判断是否为实数序列
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?