GGA Generalized Goertzel algorithm Usage: c = gga(x,fvec) c = gga(x,fvec,fs) Input parameters: x : Input data. fvec : Indices to calculate. fs : Sampling frequency. Output parameters: c : Coefficient vector. c=GGA(f,fvec) computes the discrete-time fourier transform DTFT of f at frequencies in fvec as c(k)=F(2pi f_{vec}(k)) where F=DTFT(f), k=1,dots K and K=length(fvec) using the generalized second-order Goertzel algorithm. Thanks to the generalization, values in fvec can be arbitrary numbers in range 0-1 and not restricted to l/Ls, l=0,dots Ls-1 (usual DFT samples) as the original Goertzel algorithm is. Ls is the length of the first non-singleton dimension of f. If fvec is empty or ommited, fvec is assumed to be (0:Ls-1)/Ls and results in the same output as fft. c=GGA(f,fvec,fs) computes the same with fvec in Hz relative to fs. The input f is processed along the first non-singleton dimension or along dimension dim if specified. *Remark:** Besides the generalization the algorithm is also shortened by one iteration compared to the conventional Goertzel. Examples: --------- Calculating DTFT samples of interest: % Generate input signal fs = 8000; L = 2^10; k = (0:L-1).'; freq = [400,510,620,680,825]; phase = [pi/4,-pi/4,-pi/8,pi/4,-pi/3]; amp = [5,3,4,1,2]; f = arrayfun(@(a,f,p) a*sin(2*pi*k*f/fs+p),... amp,freq,phase,'UniformOutput',0); f = sum(cell2mat(f),2); % This is equal to fft(f) ck = gga(f); %GGA to FFT error: norm(ck-fft(f)) % DTFT samples at 400,510,620,680,825 Hz ckgga = gga(f,freq,fs); % Plot modulus of coefficients figure(1);clf;hold on; stem(k/L*fs,2*abs(ck)/L,'k'); stem(freq,2*abs(ckgga)/L,'r:'); set(gca,'XLim',[freq(1)-50,freq(end)+50]); set(gca,'YLim',[0 6]); xlabel('f[Hz]'); ylabel('|c(k)|'); hold off; % Plot phase of coefficients figure(2);clf;hold on; stem(k/L*fs,angle(ck),'k'); stem(freq,angle(ckgga),'r:'); set(gca,'XLim',[freq(1)-50,freq(end)+50]); set(gca,'YLim',[-pi pi]); xlabel('f[Hz]'); ylabel('angle(c(k))'); hold off; References: P. Sysel and P. Rajmic. Goertzel algorithm generalized to non-integer multiples of fundamental frequency. EURASIP Journal on Advances in Signal Processing, 2012(1):56, 2012.
Url: http://ltfat.github.io/doc/fourier/gga.html
See also: chirpzt.
Package: ltfat