class_docstr: Conventional frontend structure for ASR
  
  Stft -> log-amplitude-spec
code: def forward(
      self, input: torch.Tensor, input_lengths: torch.Tensor = None
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      # 1. Stft: time -> time-freq
      input_stft, feats_lens = self.stft(input, input_lengths)
  
      assert input_stft.dim() >= 4, input_stft.shape
      # "2" refers to the real/imag parts of Complex
      assert input_stft.shape[-1] == 2, input_stft.shape
  
      # NOTE(kamo): We use different definition for log-spec between TTS and ASR
      #   TTS: log_10(abs(stft))
      #   ASR: log_e(power(stft))
  
      # STFT -> Power spectrum
      # input_stft: (..., F, 2) -> (..., F)
      input_power = input_stft[..., 0] ** 2 + input_stft[..., 1] ** 2
      log_amp = 0.5 * torch.log10(torch.clamp(input_power, min=1.0e-10))
      return log_amp, feats_lens
  
file_path: espnet/espnet2/s2st/tgt_feats_extract/log_spectrogram.py
imports: from typing import Any, Dict, Optional, Tuple
  import torch
  from typeguard import check_argument_types
  from espnet2.layers.stft import Stft
  from espnet2.s2st.tgt_feats_extract.abs_tgt_feats_extract import AbsTgtFeatsExtract
label_desc: Use image node_id 4 for calling the LogSpectrogram obj's underlying member method code with example usage: obj.forward(input, input_lengths) and returns: log_amp,  feats_lens