Mercurial > hg > octave-lyh
view scripts/signal/freqz.m @ 1356:8b51c1738882
[project @ 1995-09-05 20:08:49 by jwe]
Initial revision
author | jwe |
---|---|
date | Tue, 05 Sep 1995 20:08:49 +0000 |
parents | 52a3f38cbfeb |
children | 5cffc4b8de57 |
line wrap: on
line source
function [h, w] = freqz(b,...) # Compute the frequency response of a filter. # # [h,w] = resp(b) # returns the complex frequency response h of the FIR filter with # coefficients b. The response is evaluated at 512 angular frequencies # between 0 and pi. w is a vector containing the 512 frequencies. # # [h,w] = resp(b,a) # returns the complex frequency response of the rational IIR filter # whose numerator has coefficients b and denominator coefficients a. # # [h,w] = resp(b,a,n) # returns the response evaluated at n angular frequencies. For fastest # computation n should factor into a small number of small primes. # # [h,w] = freqz(b,a,n,"whole") # evaluates the response at n frequencies between 0 and 2*pi. if (nargin == 1) # Response of an FIR filter. a = 1; n = 512; region = "half"; elseif (nargin == 2) # Response of an IIR filter a = va_arg(); n = 512; region = "half"; elseif (nargin == 3) a = va_arg(); n = va_arg(); region = "half"; elseif (nargin == 4) a = va_arg(); n = va_arg(); region = va_arg(); endif la = length(a); a = reshape(a,1,la); lb = length(b); b = reshape(b,1,lb); k = max([la, lb]); if( n >= k) if (strcmp(region,"whole")) h = fft(postpad(b,n)) ./ fft(postpad(a,n)); w = 2*pi*[0:(n-1)]/n; else h = fft(postpad(b,2*n)) ./ fft(postpad(a,2*n)); h = h(1:n); w = pi*[0:(n-1)]/n; endif else if (strcmp(region,"whole")) w = 2*pi*[0:(n-1)]/n; else w = pi*[0:(n-1)]/n; endif h = polyval(postpad(b,k),exp(j*w)) ./ polyval(postpad(a,k),exp(j*w)); endif endfunction