www.pudn.com > 图像压缩的几个MATLAB算法.zip > convfft.m


function [out] = convfft(z1,z2) 
%CONVFFT FFT-based convolution and polynomial multiplication. 
%    C = CONVFFT(A, B) convolves vectors A and B.  The resulting 
%    vector is length LENGTH(A)+LENGTH(B)-1. 
%    If A and B are vectors of polynomial coefficients, convolving 
%    them is equivalent to multiplying the two polynomials. 
% 
% Please contribute if you find this software useful. 
% Report bugs to luigi.rosa@tiscali.it 
% 
%***************************************************************** 
% Luigi Rosa 
% Via Centrale 27 
% 67042 Civita di Bagno 
% L'Aquila --- ITALY  
% email  luigi.rosa@tiscali.it 
% mobile +39 340 3463208  
% http://utenti.lycos.it/matlab 
%***************************************************************** 
% 
 
 
z1x=size(z1,1); 
z1y=size(z1,2); 
z2x=size(z2,1); 
z2y=size(z2,2); 
if (~isa(z1,'double'))||(~isa(z2,'double'))||(ndims(z1)>2)||(ndims(z2)>2) 
    disp('Error: input vector must be unidimensional double array'); 
    out=[]; 
    return; 
else 
    if ((z1x>1)&&(z1y>1)) || ((z2x>1)&&(z2y>1)) 
        out=[]; 
        disp('Error: input vectors are double matrices'); 
        return; 
         
    else 
         
        if (z1x==1)&&(z1y>1)     
            z1=z1'; 
            z1x=z1y; 
        end 
         
         
        if (z2x==1)&&(z2y>1)             
            z2=z2'; 
            z2x=z2y; 
        end 
         
         
        if (any(any(imag(z1))))||(any(any(imag(z2)))) 
            out=(ifft(fft(z1,z1x+z2x-1).*fft(z2,z1x+z2x-1))); 
        else 
            out=real(ifft(fft(z1,z1x+z2x-1).*fft(z2,z1x+z2x-1))); 
        end 
    end 
end