0
0
Signal Processingdata~5 mins

Stability analysis (pole-zero plot) in Signal Processing

Choose your learning style9 modes available
Introduction

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.

When designing filters to make sure they don't produce unwanted noise.
When checking if a control system will keep a machine steady.
When analyzing audio effects to ensure they don't cause feedback.
When studying signals to understand their long-term behavior.
Syntax
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).

Examples
This system is stable because poles are at -1 (left side).
Signal Processing
num = [1]
den = [1, 2, 1]
# Simple stable system with poles at -1 and -1
This system is unstable because one pole has positive real part.
Signal Processing
num = [1]
den = [1, -1, 0.5]
# System with a pole on the right side (unstable)
Sample Program

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.

Signal Processing
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()
OutputSuccess
Important Notes

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.

Summary

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.