annotate scripts/signal/freqz.m @ 904:3470f1e25a79

[project @ 1994-11-09 21:22:15 by jwe]
author jwe
date Wed, 09 Nov 1994 21:22:15 +0000
parents 8529a21443fa
children 52a3f38cbfeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
1 function [h, w] = freqz(b,...)
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
2
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
3 # Compute the frequency response of a filter.
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
4 #
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
5 # [h,w] = resp(b)
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
6 # returns the complex frequency response h of the FIR filter with
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
7 # coefficients b. The response is evaluated at 512 angular frequencies
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
8 # between 0 and pi. w is a vector containing the 512 frequencies.
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
9 #
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
10 # [h,w] = resp(b,a)
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
11 # returns the complex frequency response of the rational IIR filter
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
12 # whose numerator has coefficients b and denominator coefficients a.
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
13 #
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
14 # [h,w] = resp(b,a,n)
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
15 # returns the response evaluated at n angular frequencies. For fastest
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
16 # computation n should factor into a small number of small primes.
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
17 #
904
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
18 # [h,w] = freqz(b,a,n,"whole")
3470f1e25a79 [project @ 1994-11-09 21:22:15 by jwe]
jwe
parents: 566
diff changeset
19 # evaluates the response at n frequencies between 0 and 2*pi.
566
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
20
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
21 if (nargin == 1)
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
22 # Response of an FIR filter.
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
23 a = 1;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
24 n = 512;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
25 region = "half";
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
26 elseif (nargin == 2)
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
27 # Response of an IIR filter
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
28 a = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
29 n = 512;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
30 region = "half";
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
31 elseif (nargin == 3)
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
32 a = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
33 n = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
34 region = "half";
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
35 elseif (nargin == 4)
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
36 a = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
37 n = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
38 region = va_arg();
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
39 endif
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
40
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
41 la = length(a);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
42 a = reshape(a,1,la);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
43 lb = length(b);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
44 b = reshape(b,1,lb);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
45
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
46 k = max([la lb]);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
47
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
48 if( n >= k)
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
49 if (strcmp(region,"whole"))
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
50 h = fft(postpad(b,n)) ./ fft(postpad(a,n));
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
51 w = 2*pi*[0:(n-1)]/n;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
52 else
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
53 h = fft(postpad(b,2*n)) ./ fft(postpad(a,2*n));
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
54 h = h(1:n);
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
55 w = pi*[0:(n-1)]/n;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
56 endif
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
57 else
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
58 if (strcmp(region,"whole"))
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
59 w = 2*pi*[0:(n-1)]/n;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
60 else
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
61 w = pi*[0:(n-1)]/n;
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
62 endif
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
63 h = polyval(postpad(b,k),exp(j*w)) ./ polyval(postpad(a,k),exp(j*w));
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
64 endif
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
65
8529a21443fa [project @ 1994-07-26 02:07:38 by jwe]
jwe
parents:
diff changeset
66 endfunction