FM Preemphasis

From GNU Radio
Revision as of 03:01, 21 February 2021 by Duggabe (talk | contribs) (Example Flowgraph)
Jump to: navigation, search

An analog preemphasis filter, that flattens out again at the high end:

              C
        +-----||------+
        |             |
   o------+             +-----+--------o
        |      R1     |     |
        +----/\/\/\/--+     \
                            /
                            \ R2
                            /
                            \
                            |
   o--------------------------+--------o

(This fine ASCII rendition is based on Figure 5-15 in "Digital and Analog Communication Systems", Leon W. Couch II)

Has this transfer function:

                  1
             s + ---
                 R1C
   H(s) = ------------------
              1       R1
         s + --- (1 + --)
             R1C      R2


It has a corner due to the numerator, where the rise starts, at

   |Hn(j w_cl)|^2 = 2*|Hn(0)|^2  =>  s = j w_cl = j (1/(R1C))

It has a corner due to the denominator, where it levels off again, at

   |Hn(j w_ch)|^2 = 1/2*|Hd(0)|^2  =>  s = j w_ch = j (1/(R1C) * (1 + R1/R2))

Historically, the corner frequency of analog audio preemphasis filters been specified by the R1C time constant used, called tau.

So w_cl = 1/tau = 1/R1C; f_cl = 1/(2*pi*tau) = 1/(2*pi*R1*C) w_ch = 1/tau2 = (1+R1/R2)/R1C; f_ch = 1/(2*pi*tau2) = (1+R1/R2)/(2*pi*R1*C)

and note f_ch = f_cl * (1 + R1/R2).

For broadcast FM audio, tau is 75us in the United States and 50us in Europe. f_ch should be higher than our digital audio bandwidth.

The Bode plot looks like this:


                    /----------------
                   /
                  /  <-- slope = 20dB/decade
                 /
   -------------/
              f_cl  f_ch

In specifying tau for this digital preemphasis filter, tau specifiesthe *digital* corner frequency, w_cl, desired.

The digital preemphasis filter design below, uses the"bilinear transformation" method of designing digital filters:

1. Convert digital specifications into the analog domain, by prewarping digital frequency specifications into analog frequencies.

w_a = (2/T)tan(wT/2)

2. Use an analog filter design technique to design the filter.

3. Use the bilinear transformation to convert the analog filter design to a digital filter design.

H(z) = H(s)|
            s = (2/T)(1-z^-1)/(1+z^-1)


                                 -w_cla
                             1 + ------
                                  2 fs
                        1 - ------------ z^-1
             -w_cla              -w_cla
         1 - ------          1 - ------
              2 fs                2 fs
   H(z) = ------------ * -----------------------
             -w_cha              -w_cha
         1 - ------          1 + ------
              2 fs                2 fs
                        1 - ------------ z^-1
                                 -w_cha
                             1 - ------
                                  2 fs

We use this design technique, because it is an easy way to obtain a filter design with the 6 dB/octave rise required of the premphasis filter.

Jackson, Leland B., _Digital_Filters_and_Signal_Processing_Second_Edition_, Kluwer Academic Publishers, 1989, pp 201-212

Orfanidis, Sophocles J., _Introduction_to_Signal_Processing_, Prentice Hall, 1996, pp 573-583

Parameters

Sample Rate
Sampling frequency in Hz
Tau
Time constant in seconds (75us in US, 50us in EUR)
High Corner Freq
High frequency at which to flatten out (< 0 means default of 0.925*fs/2.0)

Example Flowgraph

NFM xmt 2 fg.png

Source Files

Python files
[1]
Block definition
[2]