ovrlpadd.m

来自「realize overlapped-add method %[y]=over」· M 代码 · 共 25 行

M
25
字号
function [y]=ovrlpadd(x,h,Nfft)
%realize overlapped-add method
%[y]=overlpadd(x,h,Nfft)
%y:output sequence 
%x:input sequence 
%h:filter impulse response sequence
%Nfft:points of each DFT operation
%重叠相加法实现分段卷积
Lenx=length(x);
M=length(h);
N=Nfft-M+1;                     %确定每一个分段的大小
x=[x,zeros(1,N-1)];             %填充序列使得循环中对序列的索引不会超出范围
K=floor(Lenx/N);                %确定分段数
y=zeros(1,Lenx+Nfft-1);         %初始化输出序列
for i=0:1:K
    ix=i:N;
    x_seg=x(ix+1:ix+N);          %取出每一个分段
    y_seg=circonv2(x_seg,h,Nfft);%对每一个分段进行处理
    y(ix+1:ix+Nfft)=y(ix+1:ix+Nfft)+y_seg(1:Nfft);   %重叠相加
end
y=y(1:Lenx+M-1);                  %取出真正的输出序列
if~any(imag(h))&~any(imag(x))
    y=real(y);                    %判断是否为实数序列
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?