class_docstr: Implements psychoacoustic model of Lin and Abdulla (2015) following Qin et al. (2019) simplifications.
  
  | Paper link: Lin and Abdulla (2015), https://www.springer.com/gp/book/9783319079738
  | Paper link: Qin et al. (2019), http://proceedings.mlr.press/v97/qin19a.html
docstr: Compute the power spectral density matrix for an audio input.
  
  :param audio: Audio sample of shape `(length,)`.
  :return: PSD matrix of shape `(window_size // 2 + 1, frame_length)` and maximum vector of shape
  `(frame_length)`.
code: def power_spectral_density(
      self, audio: np.ndarray
  ) -> Tuple[np.ndarray, np.ndarray]:
      """
      Compute the power spectral density matrix for an audio input.
  
      :param audio: Audio sample of shape `(length,)`.
      :return: PSD matrix of shape `(window_size // 2 + 1, frame_length)` and maximum vector of shape
      `(frame_length)`.
      """
      import librosa
  
      # compute short-time Fourier transform (STFT)
      audio_float = audio.astype(np.float32)
      stft_params = {
          "n_fft": self.window_size,
          "hop_length": self.hop_size,
          "win_length": self.window_size,
          "window": ss.get_window(
              "hann", self.window_size, fftbins=True
          ),
          "center": False,
      }
      stft_matrix = librosa.core.stft(audio_float, **stft_params)
  
      # compute power spectral density (PSD)
      with np.errstate(divide="ignore"):
          gain_factor = np.sqrt(8.0 / 3.0)
          psd_matrix = 20 * np.log10(
              np.abs(gain_factor * stft_matrix / self.window_size)
          )
          psd_matrix = psd_matrix.clip(min=-200)
  
      # normalize PSD at 96dB
      psd_matrix_max = np.max(psd_matrix)
      psd_matrix_normalized = 96.0 - psd_matrix_max + psd_matrix
  
      return psd_matrix_normalized, psd_matrix_max
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from typing import TYPE_CHECKING, Optional, Tuple, Union
  import numpy
  import scipy.signal
  from art.attacks.attack import EvasionAttack
  from art.estimators.estimator import BaseEstimator, LossGradientsMixin, NeuralNetworkMixin
  from art.estimators.pytorch import PyTorchEstimator
  from art.estimators.speech_recognition.speech_recognizer import SpeechRecognizerMixin
  from art.estimators.tensorflow import TensorFlowV2Estimator
  from art.utils import pad_sequence_input
label_desc: Use image node_id 9 for calling the PsychoacousticMasker obj's underlying member method code with example usage: obj.power_spectral_density(audio) and returns: psd_matrix_normalized,  psd_matrix_max