📄 ovrlpsav.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -