test_fbank_options.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #!/usr/bin/env python3
  2. #
  3. # Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
  4. import pickle
  5. import kaldi_native_fbank as knf
  6. def test_default():
  7. opts = knf.FbankOptions()
  8. assert opts.frame_opts.samp_freq == 16000
  9. assert opts.frame_opts.frame_shift_ms == 10.0
  10. assert opts.frame_opts.frame_length_ms == 25.0
  11. assert opts.frame_opts.dither == 1.0
  12. assert abs(opts.frame_opts.preemph_coeff - 0.97) < 1e-6
  13. assert opts.frame_opts.remove_dc_offset is True
  14. assert opts.frame_opts.window_type == "povey"
  15. assert opts.frame_opts.round_to_power_of_two is True
  16. assert abs(opts.frame_opts.blackman_coeff - 0.42) < 1e-6
  17. assert opts.frame_opts.snip_edges is True
  18. assert opts.mel_opts.num_bins == 23
  19. assert opts.mel_opts.low_freq == 20
  20. assert opts.mel_opts.high_freq == 0
  21. assert opts.mel_opts.vtln_low == 100
  22. assert opts.mel_opts.vtln_high == -500
  23. assert opts.mel_opts.debug_mel is False
  24. assert opts.mel_opts.htk_mode is False
  25. assert opts.use_energy is False
  26. assert opts.energy_floor == 0.0
  27. assert opts.raw_energy is True
  28. assert opts.htk_compat is False
  29. assert opts.use_log_fbank is True
  30. assert opts.use_power is True
  31. def test_set_get():
  32. opts = knf.FbankOptions()
  33. opts.use_energy = True
  34. assert opts.use_energy is True
  35. opts.energy_floor = 1
  36. assert opts.energy_floor == 1
  37. opts.raw_energy = False
  38. assert opts.raw_energy is False
  39. opts.htk_compat = True
  40. assert opts.htk_compat is True
  41. opts.use_log_fbank = False
  42. assert opts.use_log_fbank is False
  43. opts.use_power = False
  44. assert opts.use_power is False
  45. def test_set_get_frame_opts():
  46. opts = knf.FbankOptions()
  47. opts.frame_opts.samp_freq = 44100
  48. assert opts.frame_opts.samp_freq == 44100
  49. opts.frame_opts.frame_shift_ms = 20.5
  50. assert opts.frame_opts.frame_shift_ms == 20.5
  51. opts.frame_opts.frame_length_ms = 1
  52. assert opts.frame_opts.frame_length_ms == 1
  53. opts.frame_opts.dither = 0.5
  54. assert opts.frame_opts.dither == 0.5
  55. opts.frame_opts.preemph_coeff = 0.25
  56. assert opts.frame_opts.preemph_coeff == 0.25
  57. opts.frame_opts.remove_dc_offset = False
  58. assert opts.frame_opts.remove_dc_offset is False
  59. opts.frame_opts.window_type = "hanning"
  60. assert opts.frame_opts.window_type == "hanning"
  61. opts.frame_opts.round_to_power_of_two = False
  62. assert opts.frame_opts.round_to_power_of_two is False
  63. opts.frame_opts.blackman_coeff = 0.25
  64. assert opts.frame_opts.blackman_coeff == 0.25
  65. opts.frame_opts.snip_edges = False
  66. assert opts.frame_opts.snip_edges is False
  67. def test_set_get_mel_opts():
  68. opts = knf.FbankOptions()
  69. opts.mel_opts.num_bins = 100
  70. assert opts.mel_opts.num_bins == 100
  71. opts.mel_opts.low_freq = 22
  72. assert opts.mel_opts.low_freq == 22
  73. opts.mel_opts.high_freq = 1
  74. assert opts.mel_opts.high_freq == 1
  75. opts.mel_opts.vtln_low = 101
  76. assert opts.mel_opts.vtln_low == 101
  77. opts.mel_opts.vtln_high = -100
  78. assert opts.mel_opts.vtln_high == -100
  79. opts.mel_opts.debug_mel = True
  80. assert opts.mel_opts.debug_mel is True
  81. opts.mel_opts.htk_mode = True
  82. assert opts.mel_opts.htk_mode is True
  83. def test_from_empty_dict():
  84. opts = knf.FbankOptions.from_dict({})
  85. opts2 = knf.FbankOptions()
  86. assert str(opts) == str(opts2)
  87. def test_from_dict_partial():
  88. d = {
  89. "energy_floor": 10.5,
  90. "htk_compat": True,
  91. "mel_opts": {"num_bins": 80, "vtln_low": 1},
  92. "frame_opts": {"window_type": "hanning"},
  93. }
  94. opts = knf.FbankOptions.from_dict(d)
  95. assert opts.energy_floor == 10.5
  96. assert opts.htk_compat is True
  97. assert opts.mel_opts.num_bins == 80
  98. assert opts.mel_opts.vtln_low == 1
  99. assert opts.frame_opts.window_type == "hanning"
  100. mel_opts = knf.MelBanksOptions.from_dict(d["mel_opts"])
  101. assert str(opts.mel_opts) == str(mel_opts)
  102. def test_from_dict_full_and_as_dict():
  103. opts = knf.FbankOptions()
  104. opts.htk_compat = True
  105. opts.mel_opts.num_bins = 80
  106. opts.frame_opts.samp_freq = 10
  107. d = opts.as_dict()
  108. assert d["htk_compat"] is True
  109. assert d["mel_opts"]["num_bins"] == 80
  110. assert d["frame_opts"]["samp_freq"] == 10
  111. mel_opts = knf.MelBanksOptions()
  112. mel_opts.num_bins = 80
  113. assert d["mel_opts"] == mel_opts.as_dict()
  114. frame_opts = knf.FrameExtractionOptions()
  115. frame_opts.samp_freq = 10
  116. assert d["frame_opts"] == frame_opts.as_dict()
  117. opts2 = knf.FbankOptions.from_dict(d)
  118. assert str(opts2) == str(opts)
  119. d["htk_compat"] = False
  120. opts3 = knf.FbankOptions.from_dict(d)
  121. assert opts3.htk_compat is False
  122. def test_pickle():
  123. opts = knf.FbankOptions()
  124. opts.use_energy = True
  125. opts.use_power = False
  126. opts.frame_opts.samp_freq = 44100
  127. opts.mel_opts.num_bins = 100
  128. data = pickle.dumps(opts)
  129. opts2 = pickle.loads(data)
  130. assert str(opts) == str(opts2)
  131. def main():
  132. test_default()
  133. test_set_get()
  134. test_set_get_frame_opts()
  135. test_set_get_mel_opts()
  136. test_from_empty_dict()
  137. test_from_dict_partial()
  138. test_from_dict_full_and_as_dict()
  139. test_pickle()
  140. if __name__ == "__main__":
  141. main()