code: def fingerprint(channel_samples: list, Fs: int = DEFAULT_FS,
                  wsize: int = DEFAULT_WINDOW_SIZE,
                  wratio: Union[int, float] = DEFAULT_OVERLAP_RATIO,
                  fan_value: int = DEFAULT_FAN_VALUE,
                  amp_min: Union[int, float] = DEFAULT_AMP_MIN)-> Iterator[tuple]:
      
      # FFT the signal and extract frequency components
      arr2D = mlab.specgram(
          channel_samples,
          NFFT=wsize,
          Fs=Fs,
          window=mlab.window_hanning,
          noverlap=int(wsize * wratio))[0]
  
      arr2D = 10 * np.log10(arr2D)
  
      arr2D[arr2D == -np.inf] = 0  # replace infs with zeros
  
      # find local maxima
      local_maxima = get_2D_peaks(arr2D, plot=False, amp_min=amp_min)
  
      # return hashes
      return generate_hashes(local_maxima, fan_value=fan_value)
docs: FFT the channel, log transform output, find local maxima, then return
      locally sensitive hashes.
      #