code: def forward(self, mixture) -> torch.Tensor:
      spectrum = self.stft(mixture)  # (batch, channel, time, freq)
      batch, _, freq, time = spectrum.shape
      input_feature = torch.log(
          spectrum[:, self.ref_channel].abs() + 1e-8
      )  # (batch, freq, time)
      mask = torch.nn.functional.relu(
          self.mask_net(input_feature)
      )  # (batch, 2, freq, time)
      mask_speech = mask[:, 0]
      mask_noise = mask[:, 1]
      psd_speech = self.psd(spectrum, mask_speech)
      psd_noise = self.psd(spectrum, mask_noise)
      enhanced_stft = self.beamformer(
          spectrum, psd_speech, psd_noise, self.ref_channel
      )
      enhanced_waveform = self.istft(
          enhanced_stft, length=mixture.shape[-1]
      )
      return enhanced_waveform
  
file_path: audio/examples/dnn_beamformer/model.py
imports: import ci_sdr
  import lightning.pytorch
  import torch
  from asteroid.losses.stoi import NegSTOILoss
  from asteroid.masknn import TDConvNet
  from torchaudio.transforms import InverseSpectrogram, PSD, SoudenMVDR, Spectrogram
label_desc: Use image node_id 2 for calling the DNNBeamformer obj's underlying member method code with example usage: obj.forward(mixture) and returns: enhanced_waveform