We use pole-zero plots to check if a system is stable. It helps us see if the system will behave well or go crazy over time.
Stability analysis (pole-zero plot) in Signal Processing
import matplotlib.pyplot as plt from scipy import signal # Define system with numerator (zeros) and denominator (poles) sys = signal.TransferFunction(num, den) # Get poles and zeros zeros, poles = signal.tf2zpk(num, den) # Plot poles and zeros plt.scatter(zeros.real, zeros.imag, marker='o', label='Zeros') plt.scatter(poles.real, poles.imag, marker='x', label='Poles') plt.axvline(0, color='gray', lw=1) plt.axhline(0, color='gray', lw=1) plt.xlabel('Real') plt.ylabel('Imaginary') plt.title('Pole-Zero Plot') plt.legend() plt.grid(True) plt.show()
The poles are values where the system output can become infinite.
For stability, all poles must be on the left side of the plot (negative real part).
num = [1] den = [1, 2, 1] # Simple stable system with poles at -1 and -1
num = [1] den = [1, -1, 0.5] # System with a pole on the right side (unstable)
This code shows the poles and zeros of a simple system and plots them. You can see if the poles are on the left side, meaning the system is stable.
import matplotlib.pyplot as plt from scipy import signal # Define numerator and denominator of transfer function num = [1] den = [1, 2, 1] # Get zeros and poles zeros, poles = signal.tf2zpk(num, den) # Print poles and zeros print('Zeros:', zeros) print('Poles:', poles) # Plot pole-zero plot plt.scatter(zeros.real, zeros.imag, marker='o', label='Zeros') plt.scatter(poles.real, poles.imag, marker='x', label='Poles') plt.axvline(0, color='gray', lw=1) plt.axhline(0, color='gray', lw=1) plt.xlabel('Real') plt.ylabel('Imaginary') plt.title('Pole-Zero Plot') plt.legend() plt.grid(True) plt.show()
Poles on the right side (positive real part) mean the system is unstable.
Poles on the imaginary axis mean the system is marginally stable (may oscillate).
Zeros do not affect stability but shape the system response.
Poles and zeros help us understand system behavior.
Stable systems have all poles with negative real parts.
Pole-zero plots visually show stability and system characteristics.
Practice
Solution
Step 1: Understand pole location and stability
Stability depends on poles, not zeros. Poles with negative real parts mean the system's response decays over time.Step 2: Identify correct pole location for stability
Poles in the left half-plane (negative real parts) ensure the system is stable.Final Answer:
All poles must lie in the left half of the complex plane (negative real parts). -> Option AQuick Check:
Stable system = poles with negative real parts [OK]
- Confusing zeros with poles for stability
- Thinking poles on imaginary axis are stable
- Assuming zeros affect stability directly
Solution
Step 1: Recall scipy.signal function for pole-zero plot
The function to plot poles and zeros is pzmap, not pzplot.Step 2: Check correct usage with plotting enabled
Using pzmap with plot=True plots the pole-zero map correctly.Final Answer:
signal.pzmap(system, plot=True) -> Option AQuick Check:
Use pzmap with plot=True for pole-zero plot [OK]
- Using non-existent function pzplot
- Forgetting plot=True argument
- Confusing function names
poles = [-1+2j, -1-2j, 0.5], what can you say about the system's stability?Solution
Step 1: Analyze the real parts of each pole
Poles are -1+2j (real part -1), -1-2j (real part -1), and 0.5 (real part 0.5).Step 2: Determine stability from pole real parts
Since one pole has positive real part (0.5), the system is unstable.Final Answer:
The system is unstable because one pole has a positive real part. -> Option DQuick Check:
Positive real pole means unstable system [OK]
- Ignoring positive real part pole
- Assuming complex conjugates guarantee stability
- Confusing marginal stability with instability
from scipy import signal system = signal.TransferFunction([1, 3], [1, 2, 1]) signal.pzplot(system)
What is the error and how to fix it?
Solution
Step 1: Identify the function causing error
The function pzplot does not exist in scipy.signal, causing the error.Step 2: Use correct function to plot poles and zeros
Use pzmap(system, plot=True) to plot poles and zeros correctly.Final Answer:
Function pzplot does not exist; use pzmap(system, plot=True) instead. -> Option CQuick Check:
Use pzmap, not pzplot, for pole-zero plots [OK]
- Using non-existent pzplot function
- Swapping numerator and denominator unnecessarily
- Wrong import statement causing confusion
-0.5, -1+1j, -1-1j and zeros at 0, -2. Which statement best describes the system's stability and response?Solution
Step 1: Check pole locations for stability
All poles have negative real parts (-0.5, -1), so system is stable.Step 2: Analyze pole types for response behavior
Complex conjugate poles (-1±1j) cause oscillations that decay over time.Step 3: Consider zeros' effect on stability
Zeros do not affect stability directly; zeros at 0 and -2 are not in right half-plane.Final Answer:
The system is stable with oscillatory decay due to complex poles. -> Option BQuick Check:
Negative real poles + complex = stable oscillatory decay [OK]
- Confusing zeros with poles for stability
- Thinking zeros at zero cause instability
- Ignoring oscillatory nature of complex poles
Ready to prove it?
Pass the test and this pattern moves unknown
