```>
>andrewunm wrote:
>>
>> I tried plotting the gain using the semilogx function, but I did not
see
>> the symmetry I described above.
>
>can you post a code snippet?
>
>> I took two courses in DSP, and we plotted
>> many filter responses without consideration of frequency warping.  In
fact
>> it was never mentioned.
>
>was "bilinear transform" mentioned?  if your BPF resonant frequency is
>much below Nyquist (at least 2 or 3 octaves), the effect of frequency
>warping is negligible.  at least usually it is.
>
>r b-j
>

>
Yes, the bilinear transform was mentioned multiple times.  I think that
was to transform an analog filter into a digital filter.  After I created
H  (the filter gain) using code from my first post, I typed
semilogx(abs(H), hoping to plot the magnitude of the frequency response.

Andrew

```
```andrewunm wrote:
>
> I tried plotting the gain using the semilogx function, but I did not see
> the symmetry I described above.

can you post a code snippet?

> I took two courses in DSP, and we plotted
> many filter responses without consideration of frequency warping.  In fact
> it was never mentioned.

was "bilinear transform" mentioned?  if your BPF resonant frequency is
much below Nyquist (at least 2 or 3 octaves), the effect of frequency
warping is negligible.  at least usually it is.

r b-j

```
```>
>andrewunm wrote:
>
>>
>> Thanks for the tip.  Let me clarify what I meant by symmetry.  Let's
say
>> we have a bandpass filter like I described above centered at a
frequency
>> fc, and we plot the frequency response.  Would I be correct in
expecting
>> to see a mirror image symmetry around the center frequency?
>
>sure.  but you should expect that for *any* BPF displayed as gain vs.
>log of frequency (for continuous-time or "analog" filters, there is
>some frequency warping for digital filters that is not visible if your
>center frequency is much lower than Nyquist).
>
>the symmetry comes from the mapping of the LPF prototype to BPF such
>that (in the s-domain):
>
>H_b(s) = H_l(s+1/s)
>
>when s = j*w  then
>
>H_b(jw) = H_l(jw+1/(jw)) = H_l(j*(w-1/w)) = H_l( j*(w^2-1)/w) )
>
>so you can see that the BPF does at w=1 what the LPF does at w=0.  now
>if you express that in terms of log(w) it's
>
>H_b(j*exp(log(w)) ) = H_l( j*(exp(log(w)-1/exp(log(w)) ) = H_l(
>j*(exp(log(w)-exp(-log(w)) )
>
>                 = H_l( j*2*(sinh(log(w)) )
>
>that is why there is symmetry in log(w).
>
>r b-j
>
>

I tried plotting the gain using the semilogx function, but I did not see
the symmetry I described above.  I took two courses in DSP, and we plotted
many filter responses without consideration of frequency warping.  In fact
it was never mentioned.
Andrew

```
```andrewunm wrote:

>
> Thanks for the tip.  Let me clarify what I meant by symmetry.  Let's say
> we have a bandpass filter like I described above centered at a frequency
> fc, and we plot the frequency response.  Would I be correct in expecting
> to see a mirror image symmetry around the center frequency?

sure.  but you should expect that for *any* BPF displayed as gain vs.
log of frequency (for continuous-time or "analog" filters, there is
some frequency warping for digital filters that is not visible if your
center frequency is much lower than Nyquist).

the symmetry comes from the mapping of the LPF prototype to BPF such
that (in the s-domain):

H_b(s) = H_l(s+1/s)

when s = j*w  then

H_b(jw) = H_l(jw+1/(jw)) = H_l(j*(w-1/w)) = H_l( j*(w^2-1)/w) )

so you can see that the BPF does at w=1 what the LPF does at w=0.  now
if you express that in terms of log(w) it's

H_b(j*exp(log(w)) ) = H_l( j*(exp(log(w)-1/exp(log(w)) ) = H_l(
j*(exp(log(w)-exp(-log(w)) )

= H_l( j*2*(sinh(log(w)) )

that is why there is symmetry in log(w).

r b-j

```
```>
>andrewunm wrote:
>> Greetings,
>>
>> I am exploring Butterworth filters on Matlab.    I created the filter
>> weights using:
>> [b,a]=butter(8,[.6438 .9328]);
>>
>> Now, I want to plot the gain of the filter using the following code
given
>> below. I plotted the gain using plot(abs(H)).  I do not see symmetry
in
>> the plot.
>
>i dunno what you mean by "symmetry" w.r.t. Butterworth filters, but
>i'll bet you want to use the MATLAB function "semilogx()" instead of
>"plot()".
>
>r b-j
>
>

Thanks for the tip.  Let me clarify what I meant by symmetry.  Let's say
we have a bandpass filter like I described above centered at a frequency
fc, and we plot the frequency response.  Would I be correct in expecting
to see a mirror image symmetry around the center frequency?
Andrew

```
```andrewunm wrote:
> Greetings,
>
> I am exploring Butterworth filters on Matlab.    I created the filter
> weights using:
> [b,a]=butter(8,[.6438 .9328]);
>
> Now, I want to plot the gain of the filter using the following code given
> below. I plotted the gain using plot(abs(H)).  I do not see symmetry in
> the plot.

i dunno what you mean by "symmetry" w.r.t. Butterworth filters, but
i'll bet you want to use the MATLAB function "semilogx()" instead of
"plot()".

```
```andrewunm wrote:
> Greetings,
>
> I am exploring Butterworth filters on Matlab.    I created the filter
> weights using:
> [b,a]=butter(8,[.6438 .9328]);
>
> Now, I want to plot the gain of the filter using the following code given
> below. I plotted the gain using plot(abs(H)).  I do not see symmetry in
> the plot.

i dunno what you mean by "symmetry" w.r.t. Butterworth filters, but
i'll bet you want to use the MATLAB function "semilogx()" instead of
"plot()".

r b-j

```
```Greetings,

I am exploring Butterworth filters on Matlab.    I created the filter
weights using:
[b,a]=butter(8,[.6438 .9328]);

Now, I want to plot the gain of the filter using the following code given
below. I plotted the gain using plot(abs(H)).  I do not see symmetry in
the plot.  My co-worker created a similar Butterworth filter using a
different technique, and his plot shows symmetry.  Is it required that the
plot show symmetry, indicating I did something wrong?

Andrew

function [H,nu]=gain(b,a,N)
% [H,nu]=gain(b,a,N)
%
% H  =N values of complex gain of a linear digital system.
% nu =N frequencies in [0,0.5] Hz-s at which H values are computed.
%     N is set internally to 513 unless specified.
%     H and nu are both column vectors.
% b  =numerator weights of linear system transfer function.
% a  =denominator weights.  a(1) must not be 0. Usually, a(1)=1.
%
% b and a can be arrays. If so, each row contains the weights of a
% section of the digital transfer function in cascade form.
if(nargin<3),
N=513;
end
% Check for errors.
[mb,nb]=size(b);
[ma,na]=size(a);
if(mb~=ma),
error('b and a arrays must have the same # of rows.');
elseif(min(abs(a(:,1)))==0)
error('a cannot have a zero in its first column.');
end
% Go thru H(z) one section at a time. fft size =2(N-1).
N2=2*(N-1);
H=ones(1,N2);
for m=1:mb,
A=fft([a(m,:),zeros(1,N2-na)]);
if(min(abs(A))==0),
error('Power gain is infinite at some point.');
end
H=H.*fft([b(m,:),zeros(1,N2-nb)])./A;
end
% Specify nu and H(nu).
nu=linspace(0,.5,N)';
H=H(1:N)';

```