⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autocorr.m

📁 英文书《Digital Signal Processing with Examples in MATLAB》附带的MATLAB实例
💻 M
字号:
function phi=autocorr(x,type,N)
% phi=autocorr(x,type,N)
%
% phi(1:N)=autocorrelation (column) vector of x(1:K)
%          with N elements, each computed as follows:
%   phi(n)=sum from k=1 to K {x(k)*x(k+n-1)}/K,
%          computed for n=0,1,...,N-1.
% 
% type can have two values: 0 or 1:
%      0 implies x is extended with zeros.
%      1 implies x is extended periodically.
%
% N   =length of phi =number of values of phi to compute.
% See also: autocorr_mat, crosscor, autocovar, crosscovar

% Check for errors.
K=length(x);
if(nargin~=3)
%error('Function autocorr must have three arguments.');
elseif(type~=0 & type~=1),
   error('Second argument must be either 0 or 1.');
elseif(K<4)
   error('Signal vector must have at least 4 elements.');
end

% Compute phi up to one period.
x=(col_vec(x));
if(type==0),                            % If type=0, pad with zeros
    x=[x; zeros(K,1)];
else
    x=[x; x];                           % If type=1, pad with 2nd period
end
if K>128 & N>12*log2(2*K),              % If N is large, use fft's
    X=fft(x);
    phi=ifft(X.*conj(X))/K;
    if(type==1),
        phi=phi/2;                      % Divide by 2 if fft's and type=1
    end
else                                    % N is small, use sum of products
    phi=zeros(N,1);
    for n=1:min(K,N),
        phi(n)=real(x(1:K)'*x(n:K+n-1)/K);
    end
end

% If N>K, extend phi to length N depending on type.
if(N>K),
    for n=K+1:N,
        if(type==0),
            phi(n)=0;
        else
            phi(n)=phi(rem(n-1,K)+1);
        end
   end
end
phi=phi(1:N);

⌨️ 快捷键说明

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