class_docstr: Lightweight Sinc Convolutions.
  
  Instead of using precomputed features, end-to-end speech recognition
  can also be done directly from raw audio using sinc convolutions, as
  described in "Lightweight End-to-End Speech Recognition from Raw Audio
  Data Using Sinc-Convolutions" by Kürzinger et al.
  https://arxiv.org/abs/2010.07597
  
  To use Sinc convolutions in your model instead of the default f-bank
  frontend, set this module as your pre-encoder with `preencoder: sinc`
  and use the input of the sliding window frontend with
  `frontend: sliding_window` in your yaml configuration file.
  So that the process flow is:
  
  Frontend (SlidingWindow) -> SpecAug -> Normalization ->
  Pre-encoder (LightweightSincConvs) -> Encoder -> Decoder
  
  Note that this method also performs data augmentation in time domain
  (vs. in spectral domain in the default frontend).
  Use `plot_sinc_filters.py` to visualize the learned Sinc filters.
class_docstr_tok: ["Lightweight","Sinc","Convolutions",".","Instead","of","using","precomputed","features",",","end-to-end","speech","recognition","can","also","be","done","directly","from","raw","audio","using","sinc","convolutions",",","as","described","in","``","Lightweight","End-to-End","Speech","Recognition","from","Raw","Audio","Data","Using","Sinc-Convolutions","''","by","K\u00fcrzinger","et","al",".","https",":","\/\/arxiv.org\/abs\/2010.07597","To","use","Sinc","convolutions","in","your","model","instead","of","the","default","f-bank","frontend",",","set","this","module","as","your","pre-encoder","with","`","preencoder",":","sinc","`","and","use","the","input","of","the","sliding","window","frontend","with","`","frontend",":","sliding_window","`","in","your","yaml","configuration","file",".","So","that","the","process","flow","is",":","Frontend","(","SlidingWindow",")","-",">","SpecAug","-",">","Normalization","-",">","Pre-encoder","(","LightweightSincConvs",")","-",">","Encoder","-",">","Decoder","Note","that","this","method","also","performs","data","augmentation","in","time","domain","(","vs.","in","spectral","domain","in","the","default","frontend",")",".","Use","`","plot_sinc_filters.py","`","to","visualize","the","learned","Sinc","filters","."]
docstr: Apply Lightweight Sinc Convolutions.
  
  The input shall be formatted as (B, T, C_in, D_in)
  with B as batch size, T as time dimension, C_in as channels,
  and D_in as feature dimension.
  
  The output will then be (B, T, C_out*D_out)
  with C_out and D_out as output dimensions.
  
  The current module structure only handles D_in=400, so that D_out=1.
  Remark for the multichannel case: C_out is the number of out_channels
  given at initialization multiplied with C_in.
docstr_tok: ["Apply","Lightweight","Sinc","Convolutions",".","The","input","shall","be","formatted","as","(","B",",","T",",","C_in",",","D_in",")","with","B","as","batch","size",",","T","as","time","dimension",",","C_in","as","channels",",","and","D_in","as","feature","dimension",".","The","output","will","then","be","(","B",",","T",",","C_out","*","D_out",")","with","C_out","and","D_out","as","output","dimensions",".","The","current","module","structure","only","handles","D_in=400",",","so","that","D_out=1",".","Remark","for","the","multichannel","case",":","C_out","is","the","number","of","out_channels","given","at","initialization","multiplied","with","C_in","."]
code: def forward(
      self, input: torch.Tensor, input_lengths: torch.Tensor
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      """Apply Lightweight Sinc Convolutions.
  
      The input shall be formatted as (B, T, C_in, D_in)
      with B as batch size, T as time dimension, C_in as channels,
      and D_in as feature dimension.
  
      The output will then be (B, T, C_out*D_out)
      with C_out and D_out as output dimensions.
  
      The current module structure only handles D_in=400, so that D_out=1.
      Remark for the multichannel case: C_out is the number of out_channels
      given at initialization multiplied with C_in.
      """
      # Transform input data:
      #   (B, T, C_in, D_in) -> (B*T, C_in, D_in)
      B, T, C_in, D_in = input.size()
      input_frames = input.view(B * T, C_in, D_in)
      output_frames = self.blocks.forward(input_frames)
  
      # ---TRANSFORM: (B*T, C_out, D_out) -> (B, T, C_out*D_out)
      _, C_out, D_out = output_frames.size()
      output_frames = output_frames.view(B, T, C_out * D_out)
      return output_frames, input_lengths
  
file_path: espnet/espnet2/asr/preencoder/sinc.py
imports: from collections import OrderedDict
  from typing import Optional, Tuple, Union
  import humanfriendly
  import torch
  from typeguard import check_argument_types
  from espnet2.asr.preencoder.abs_preencoder import AbsPreEncoder
  from espnet2.layers.sinc_conv import LogCompression, SincConv
label_desc: Use image node_id 5 for calling the LightweightSincConvs obj's underlying member method code with example usage: obj.forward(input, input_lengths) and returns: output_frames,  input_lengths