class_docstr: Estimate a reference channel by selecting the reference
  that maximizes the output SNR. It returns one-hot encoded
  vector or a soft reference.
  
  A straight-through estimator is used for gradient when using
  hard reference.
  
  Args:
      hard: If true, use hard estimate of ref channel.
          If false, use a soft estimate across channels.
      hard_use_grad: Use straight-through estimator for
          the gradient.
      subband_weighting: If true, use subband weighting when
          adding across subband SNRs. If false, use average
          across subbands.
  
  References:
      Boeddeker et al, Front-End Processing for the CHiME-5 Dinner Party Scenario, 2018
docstr: Returns definitions of module output types
          
docstr_tok: ["Returns","definitions","of","module","output","types"]
code: def output_types(self):
      """Returns definitions of module output types"""
      return {
          "output": NeuralType(("B", "C"), FloatType()),
      }
  
imports: import random
  from typing import Callable, Optional
  import torch
  from nemo.collections.asr.parts.submodules.multi_head_attention import MultiHeadAttention
  from nemo.core.classes import NeuralModule, typecheck
  from nemo.core.neural_types import AudioSignal, FloatType, NeuralType, SpectrogramType
  from nemo.utils import logging
label_desc: Use image node_id 3 for calling the ReferenceChannelEstimatorSNR obj's underlying member method code with example usage: obj.output_types() and returns: dict