Bird
Raised Fist0
SciPydata~10 mins

IIR filter design (butter, cheby1) in SciPy - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to design a Butterworth lowpass filter with cutoff frequency 0.3.

SciPy
from scipy.signal import [1]

b, a = [1](4, 0.3, btype='low')
Drag options to blanks, or click blank then click option'
Afirwin
Bcheby1
Cbutter
Dlfilter
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'cheby1' instead of 'butter' for Butterworth filter design.
Confusing filter design functions with filtering functions like 'lfilter'.
2fill in blank
medium

Complete the code to design a Chebyshev type I highpass filter with 3 dB ripple and cutoff frequency 0.4.

SciPy
from scipy.signal import cheby1

b, a = cheby1(5, [1], 0.4, btype='high')
Drag options to blanks, or click blank then click option'
A1
B3
C0.5
D0.1
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing the ripple parameter with cutoff frequency.
Using values less than 1 dB which might be too small for this example.
3fill in blank
hard

Fix the error in the code to design a Butterworth bandpass filter between 0.2 and 0.5.

SciPy
from scipy.signal import butter

b, a = butter(4, [1], btype='bandpass')
Drag options to blanks, or click blank then click option'
A[0.2, 0.5]
B0.5
C0.35
D0.2, 0.5
Attempts:
3 left
💡 Hint
Common Mistakes
Passing two separate arguments instead of a list for cutoff frequencies.
Using a single float value for bandpass cutoff.
4fill in blank
hard

Fill both blanks to create a Chebyshev type I bandstop filter with order 3, ripple 2 dB, and cutoff frequencies 0.3 and 0.6.

SciPy
from scipy.signal import cheby1

b, a = cheby1([1], [2], [0.3, 0.6], btype='bandstop')
Drag options to blanks, or click blank then click option'
A3
B2
C4
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping order and ripple values.
Using ripple values too large or too small.
5fill in blank
hard

Fill all three blanks to create a Butterworth lowpass filter of order 6 with cutoff 0.25 and design it using 'butter'.

SciPy
from scipy.signal import [1]

b, a = [1]([2], [3], btype='low')
Drag options to blanks, or click blank then click option'
Abutter
B6
C0.25
Dcheby1
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing 'butter' and 'cheby1' in the same code.
Using incorrect order or cutoff values.

Practice

(1/5)
1. What is the main difference between a Butterworth and a Chebyshev IIR filter in scipy.signal?
easy
A. Butterworth filters are FIR, Chebyshev filters are IIR.
B. Butterworth filters have ripples, Chebyshev filters have a smooth response.
C. Butterworth filters are only for high-pass, Chebyshev only for low-pass.
D. Butterworth filters have a smooth frequency response, Chebyshev filters have ripples in the passband.

Solution

  1. Step 1: Understand Butterworth filter characteristics

    Butterworth filters are designed to have a maximally flat frequency response in the passband, meaning no ripples.
  2. Step 2: Understand Chebyshev filter characteristics

    Chebyshev filters allow ripples in the passband to achieve a sharper cutoff compared to Butterworth filters.
  3. Final Answer:

    Butterworth filters have a smooth frequency response, Chebyshev filters have ripples in the passband. -> Option D
  4. Quick Check:

    Butterworth smooth, Chebyshev ripples = D [OK]
Hint: Butterworth = smooth, Chebyshev = ripples [OK]
Common Mistakes:
  • Confusing which filter has ripples
  • Thinking Butterworth is FIR
  • Assuming filter types are limited to passband types
2. Which of the following is the correct way to design a 4th order Butterworth lowpass filter with cutoff frequency 0.3 (normalized) using scipy.signal.butter?
easy
A. b, a = butter(0.3, 4, btype='low')
B. b, a = butter(4, 0.3, btype='low')
C. b, a = butter(4, 0.3, type='lowpass')
D. b, a = butter(order=4, cutoff=0.3, kind='low')

Solution

  1. Step 1: Recall butter function signature

    The function signature is butter(N, Wn, btype='low', analog=False, output='ba'), where N is order and Wn is cutoff frequency.
  2. Step 2: Check correct parameter usage

    b, a = butter(4, 0.3, btype='low') uses butter(4, 0.3, btype='low'), which matches the signature correctly.
  3. Final Answer:

    b, a = butter(4, 0.3, btype='low') -> Option B
  4. Quick Check:

    Order first, cutoff second, btype='low' = A [OK]
Hint: Order first, cutoff second, btype='low' in butter() [OK]
Common Mistakes:
  • Swapping order and cutoff parameters
  • Using wrong keyword names like 'type' or 'kind'
  • Passing cutoff frequency as first argument
3. What will be the output shape of the coefficients when running this code?
from scipy.signal import cheby1
b, a = cheby1(3, 1, 0.4, btype='high')
medium
A. (3,), (3,)
B. (3, 3), (3, 3)
C. (4,), (4,)
D. (2,), (2,)

Solution

  1. Step 1: Understand cheby1 output

    The function returns numerator (b) and denominator (a) coefficients arrays each of length N+1, where N is filter order.
  2. Step 2: Calculate length for order 3

    For order 3, length is 3+1 = 4, so both b and a have shape (4,).
  3. Final Answer:

    (4,), (4,) -> Option C
  4. Quick Check:

    Length = order + 1 = 4 [OK]
Hint: Coefficients length = order + 1 [OK]
Common Mistakes:
  • Assuming length equals order
  • Expecting 2D arrays instead of 1D
  • Confusing numerator and denominator shapes
4. Identify the error in this code snippet for designing a Chebyshev type I filter:
from scipy.signal import cheby1
b, a = cheby1(5, 0.5, 0.2, btype='bandpass')
medium
A. The cutoff frequency should be a list or tuple for bandpass, not a single float.
B. The ripple parameter is missing and required.
C. The order parameter should be a float, not integer.
D. The btype 'bandpass' is not supported by cheby1.

Solution

  1. Step 1: Check bandpass cutoff frequency format

    For bandpass filters, cutoff frequency must be a sequence (list or tuple) of two frequencies, not a single float.
  2. Step 2: Verify other parameters

    Order as integer and ripple (second parameter) are correctly provided; btype 'bandpass' is valid.
  3. Final Answer:

    The cutoff frequency should be a list or tuple for bandpass, not a single float. -> Option A
  4. Quick Check:

    Bandpass cutoff needs two frequencies = C [OK]
Hint: Bandpass cutoff must be two frequencies in a list/tuple [OK]
Common Mistakes:
  • Passing single float for bandpass cutoff
  • Confusing ripple parameter position
  • Using unsupported btype values
5. You want to design a Chebyshev type I lowpass filter with order 6, 0.5 dB ripple, and cutoff frequency 0.25. Which code snippet correctly creates the filter and applies it to a signal x using scipy.signal.lfilter?
hard
A. from scipy.signal import cheby1, lfilter b, a = cheby1(6, 0.5, 0.25, btype='low') y = lfilter(b, a, x)
B. from scipy.signal import cheby1, lfilter b, a = cheby1(6, 0.5, 0.25, btype='high') y = lfilter(a, b, x)
C. from scipy.signal import butter, lfilter b, a = butter(6, 0.25, btype='low') y = lfilter(b, a, x)
D. from scipy.signal import cheby1, lfilter b, a = cheby1(0.5, 6, 0.25, btype='low') y = lfilter(b, a, x)

Solution

  1. Step 1: Verify cheby1 parameters order

    Order is first parameter (6), ripple second (0.5), cutoff third (0.25), and btype='low' for lowpass.
  2. Step 2: Check lfilter usage

    lfilter takes numerator coefficients (b), denominator coefficients (a), and signal (x) in that order.
  3. Final Answer:

    from scipy.signal import cheby1, lfilter b, a = cheby1(6, 0.5, 0.25, btype='low') y = lfilter(b, a, x) -> Option A
  4. Quick Check:

    Correct order and lfilter usage = A [OK]
Hint: Order, ripple, cutoff in cheby1; lfilter(b, a, x) [OK]
Common Mistakes:
  • Swapping order and ripple parameters
  • Using butter instead of cheby1
  • Swapping b and a in lfilter
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard