Pole-zero analysis for stability in Signal Processing - Time & Space Complexity
We want to understand how the time to analyze poles and zeros grows as the signal system size increases.
How does the work needed change when we have more poles and zeros to check?
Analyze the time complexity of the following code snippet.
# Given poles and zeros as lists
poles = [...] # list of complex numbers
zeros = [...] # list of complex numbers
# Check stability by verifying all poles inside unit circle
stable = True
for pole in poles:
if abs(pole) >= 1:
stable = False
break
# Output stability result
print('Stable' if stable else 'Unstable')
This code checks if all poles lie inside the unit circle to decide system stability.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each pole to check its magnitude.
- How many times: Once for each pole in the list.
As the number of poles increases, the time to check stability grows directly with that number.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The number of operations grows in a straight line with input size.
Time Complexity: O(n)
This means the time to check stability grows directly with the number of poles.
[X] Wrong: "Checking zeros also adds the same time cost as poles for stability."
[OK] Correct: Stability depends only on poles, so zeros do not affect the time to decide stability.
Understanding how time grows with system size helps you explain your approach clearly and shows you know what matters most in signal analysis.
"What if we also checked zeros for some property? How would that change the time complexity?"
Practice
Solution
Step 1: Understand pole location and stability
Poles inside the unit circle mean the system's response decays over time.Step 2: Relate pole location to system behavior
Since poles are inside the unit circle, the system output will not grow unbounded.Final Answer:
The system is stable -> Option AQuick Check:
Poles inside unit circle = stable system [OK]
- Confusing poles inside with outside the unit circle
- Thinking zeros affect stability directly
- Ignoring the unit circle boundary
Solution
Step 1: Identify correct markers for poles and zeros
Poles are usually marked with 'x' in red, zeros with 'o' in blue.Step 2: Match syntax with matplotlib scatter function
plt.scatter([0.5, 0.5], [0.5, -0.5], marker='x', color='r'); plt.scatter([0.8], [0], marker='o', color='b') uses plt.scatter with correct markers and colors for poles and zeros.Final Answer:
plt.scatter([0.5, 0.5], [0.5, -0.5], marker='x', color='r'); plt.scatter([0.8], [0], marker='o', color='b') -> Option AQuick Check:
Correct markers and colors for poles and zeros [OK]
- Swapping markers for poles and zeros
- Using plt.plot with wrong format strings
- Plotting zeros at wrong coordinates
Solution
Step 1: Check each pole's location relative to the unit circle
One pole is at 0.9 (inside), the other at 1.1 (outside) the unit circle.Step 2: Determine stability from pole locations
Since a pole lies outside the unit circle, the system is unstable regardless of zeros.Final Answer:
Unstable because one pole is outside the unit circle -> Option DQuick Check:
Any pole outside unit circle = unstable [OK]
- Ignoring poles outside the unit circle
- Confusing zeros with poles for stability
- Assuming zeros affect stability directly
import matplotlib.pyplot as plt poles = [0.7+0.7j, 0.7-0.7j] zeros = [0.9] plt.scatter(poles.real, poles.imag, marker='x', color='r') plt.scatter(zeros.real, zeros.imag, marker='o', color='b') plt.show()
Solution
Step 1: Identify data types of poles and zeros
Poles and zeros are Python lists of complex numbers, which do not support .real or .imag attributes directly.Step 2: Fix by converting lists to numpy arrays
Convert poles and zeros to numpy arrays to access .real and .imag properties without error.Final Answer:
Error because poles and zeros are lists, need numpy arrays for .real and .imag -> Option BQuick Check:
Lists lack .real/.imag; use numpy arrays [OK]
- Trying to access .real on Python lists
- Ignoring missing plt.show()
- Using wrong marker symbols
Solution
Step 1: Understand stability and pole radius
Poles closer to origin (smaller magnitude) mean faster decay and better stability.Step 2: Compare given pole movements
Move poles to [0.4, 0.5j, -0.5j] moves poles closer to origin (0.4 and 0.5j), reducing magnitude from original values.Step 3: Confirm other options increase or keep magnitude same
Options B and C move poles farther or slightly farther from origin, reducing stability; A is no change.Final Answer:
Move poles to [0.4, 0.5j, -0.5j] -> Option CQuick Check:
Smaller pole radius = better stability [OK]
- Moving poles outside unit circle
- Changing zeros instead of poles
- Not reducing pole magnitude
Ready to prove it?
Pass the test and this pattern moves unknown
