1.4. Introduction to Resonance#

Resonance is a fundamental phenomenon in acoustics, occurring when a system is driven at a frequency that matches one of its natural frequencies. This results in large amplitude oscillations due to the efficient transfer of energy.

What is Resonance?#

Resonance occurs when the driving frequency aligns with the system’s natural frequency, leading to a condition where the input energy is amplified. The natural frequency \(f_0\) is determined by the system’s physical properties:

\[f_0 = \frac{1}{2\pi}\sqrt{\frac{k}{m}}\]

where:

  • \(k\) is the stiffness of the system.

  • \(m\) is the mass of the oscillating object.

In practical acoustics, resonance explains phenomena such as the amplification of sound in musical instruments and the structural vibrations in buildings.

Characteristics of Resonance#

  1. Amplitude Increase: The amplitude of oscillation grows significantly near the resonance frequency.

  2. Phase Shift: At resonance, the system’s phase shifts by \(90^\circ\) relative to the driving force.

  3. Damping Effects: In real systems, damping limits the amplitude and determines the sharpness of resonance.

Damping and Quality Factor#

The sharpness of resonance is characterized by the quality factor \(Q\):

\[Q = \frac{f_0}{\Delta f}\]

where \(\Delta f\) is the bandwidth of the resonance curve, defined as the frequency range where the amplitude drops to \(1/\sqrt{2}\) of its maximum value.

Quiz: Understanding Resonance#

Exercise

For a mass-spring-damping system with \(m = 2 \ \text{kg}\), \(k = 200 \ \text{N/m}\), and \(c = 0.5 \ \text{Ns/m}\), calculate the natural frequency and quality factor. What happens if the damping is doubled?

Interactive Simulation: Exploring Resonance

The following interactive Python code visualizes resonance behavior by varying system parameters such as mass, stiffness, and damping coefficient.


import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets
from ipywidgets import interact

# Resonance function

def resonance_simulation(mass, stiffness, damping, driving_freq):
    omega = 2 * np.pi * driving_freq  # Driving angular frequency
    omega_0 = np.sqrt(stiffness / mass)  # Natural angular frequency
    gamma = damping / (2 * mass)  # Damping coefficient

    # Impedance calculations
    real_part = damping  # Resistance (real part of impedance)
    imag_part = mass * omega - stiffness / omega  # Reactance (imaginary part of impedance)

    magnitude = np.sqrt(real_part**2 + imag_part**2)  # Magnitude of impedance
    phase = np.arctan2(imag_part, real_part)  # Phase of impedance

    # Frequency range for plotting
    frequencies = np.linspace(0.5 * omega_0, 1.5 * omega_0, 500)
    omega_range = 2 * np.pi * frequencies

    real_range = damping  # Constant resistance across all frequencies
    imag_range = mass * omega_range - stiffness / omega_range
    magnitude_range = np.sqrt(real_range**2 + imag_range**2)
    phase_range = np.arctan2(imag_range, real_range)

    # Plot results
    fig, ax = plt.subplots(1, 2, figsize=(12, 6))

    ax[0].plot(frequencies, magnitude_range, label="Impedance Magnitude")
    ax[0].set_title("Magnitude of Impedance")
    ax[0].set_xlabel("Frequency (Hz)")
    ax[0].set_ylabel("Impedance Magnitude")
    ax[0].grid(True)
    ax[0].legend()

    ax[1].plot(frequencies, np.degrees(phase_range), label="Impedance Phase")
    ax[1].set_title("Phase of Impedance")
    ax[1].set_xlabel("Frequency (Hz)")
    ax[1].set_ylabel("Phase (degrees)")
    ax[1].grid(True)
    ax[1].legend()

    plt.tight_layout()
    plt.show()

# Interactive widget
interact(
    resonance_simulation,
    mass=widgets.FloatSlider(value=1, min=0.1, max=10, step=0.1),
    stiffness=widgets.FloatSlider(value=100, min=10, max=1000, step=10),
    damping=widgets.FloatSlider(value=0.1, min=0.01, max=2, step=0.01),
    driving_freq=widgets.FloatSlider(value=5, min=1, max=20, step=0.1)
)