Transformers documentation
Utilitas untuk FeatureExtractors
Utilitas untuk FeatureExtractors
Halaman ini mencantumkan semua fungsi utilitas yang dapat digunakan oleh FeatureExtractor audio untuk menghitung fitur khusus dari audio mentah menggunakan algoritma umum seperti Short Time Fourier Transform atau log mel spectrogram.
Sebagian besar dari itu hanya berguna jika Anda sedang mempelajari kode pemroses audio di pustaka tersebut.
Transformasi Audio
transformers.audio_utils.hertz_to_mel
< source >( freq: float | numpy.ndarraymel_scale: str = 'htk' ) → float or np.ndarray
Konversi frekuensi dari hertz ke mels.
transformers.audio_utils.mel_to_hertz
< source >( mels: float | numpy.ndarraymel_scale: str = 'htk' ) → float or np.ndarray
Mengonversi frekuensi dari mels ke hertz.
transformers.audio_utils.mel_filter_bank
< source >( num_frequency_bins: intnum_mel_filters: intmin_frequency: floatmax_frequency: floatsampling_rate: intnorm: str | None = Nonemel_scale: str = 'htk'triangularize_in_mel_space: bool = False ) → np.ndarray of shape (num_frequency_bins, num_mel_filters)
Parameter
- num_frequency_bins (
int) — Jumlah bin frekuensi (harus sama dengann_fft // 2 + 1di manan_fftadalah ukuran Fourier Transform yang digunakan untuk menghitung spektrogram). - num_mel_filters (
int) — Jumlah filter mel yang akan dibuat. - min_frequency (
float) — Frekuensi terendah yang menjadi perhatian dalam Hz. - max_frequency (
float) — Frekuensi tertinggi yang menjadi perhatian dalam Hz. Nilai ini tidak boleh melebihisampling_rate / 2. - sampling_rate (
int) — Laju sampel dari waveform audio. - norm (
str, opsional) — Jika"slaney", bagi bobot mel segitiga dengan lebar pita mel (normalisasi area). - mel_scale (
str, opsional, default"htk") — Skala frekuensi mel yang akan digunakan,"htk","kaldi"atau"slaney". - triangularize_in_mel_space (
bool, opsional, defaultFalse) — Jika opsi ini diaktifkan, filter segitiga diterapkan di ruang mel alih-alih ruang frekuensi. Nilai ini harus disetel ketrueuntuk mendapatkan hasil yang sama dengantorchaudiosaat menghitung filter mel.
Mengembalikan
np.ndarray dengan bentuk (num_frequency_bins, num_mel_filters)
Matriks bank filter segitiga. Ini adalah matriks proyeksi untuk mengubah spektrogram menjadi spektrogram mel.
Membuat matriks konversi bin frekuensi yang digunakan untuk mendapatkan spektrogram mel. Ini disebut mel filter bank, dan berbagai implementasi tersedia, yang berbeda dalam jumlah filter, bentuk filter, cara filter dijajarkan, bandwidth filter, dan cara spektrum diwarpa. Tujuan dari fitur-fitur ini adalah untuk mendekati persepsi manusia yang non-linear terhadap variasi pitch terhadap frekuensi.
Berbagai bank filter mel diperkenalkan dalam literatur. Variasi berikut didukung:
- MFCC FB-20: diperkenalkan pada tahun 1980 oleh Davis dan Mermelstein, metode ini mengasumsikan frekuensi sampling 10 kHz dan lebar pita suara
[0, 4600]Hz. - MFCC FB-24 HTK: dari Cambridge HMM Toolkit (HTK) (1995) menggunakan filter bank dengan 24 filter untuk bandwidth ucapan
[0, 8000]Hz. Ini mengasumsikan sampling rate ≥ 16 kHz. - MFCC FB-40: dari Auditory Toolbox untuk MATLAB yang ditulis oleh Slaney pada tahun 1998, mengasumsikan laju sampling 16 kHz dan
pita frekuensi ucapan
[133, 6854]Hz. Versi ini juga mencakup normalisasi area. - HFCC-E FB-29 (Human Factor Cepstral Coefficients) dari Skowronski dan Harris (2004), mengasumsikan laju sampling 12,5 kHz dan pita frekuensi ucapan
[0, 6250]Hz.
Kode ini diadaptasi dari torchaudio dan librosa. Perhatikan bahwa parameter default dari melscale_fbanks torchaudio mengimplementasikan filter "htk" sedangkan librosa menggunakan implementasi "slaney".
Menemukan ukuran input FFT terbaik untuk window_length tertentu. Fungsi ini mengambil panjang jendela tertentu dan, jika belum berupa pangkat dua, membulatkannya ke atas ke pangkat dua berikutnya.
Algoritma FFT bekerja paling cepat ketika panjang input merupakan pangkat dua, yang mungkin lebih besar dari ukuran jendela atau bingkai analisis. Misalnya, jika jendelanya 400 sampel, menggunakan ukuran input FFT 512 sampel lebih optimal daripada ukuran FFT 400 sampel. Menggunakan ukuran FFT yang lebih besar tidak memengaruhi frekuensi yang terdeteksi, melainkan hanya memberikan resolusi frekuensi yang lebih tinggi (yaitu, bin frekuensinya lebih kecil).
transformers.audio_utils.window_function
< source >( window_length: intname: str = 'hann'periodic: bool = Trueframe_length: int | None = Nonecenter: bool = True )
Parameter
- window_length (
int) — Panjang jendela dalam sampel. - name (
str, opsional, defaultnya"hann") — Nama dari fungsi jendela. - periodic (
bool, opsional, defaultTrue) — Apakah jendela bersifat periodik atau simetris. - frame_length (
int, opsional) — Panjang frame analisis dalam sampel. Berikan nilai untukframe_lengthjika window lebih kecil daripada panjang frame, sehingga akan dilakukan zero-padding. - center (
bool, opsional, defaultTrue) — Apakah akan memusatkan jendela di dalam buffer FFT. Hanya digunakan ketikaframe_lengthdiberikan.
Mengembalikan array yang berisi jendela yang ditentukan. Jendela ini dimaksudkan untuk digunakan dengan stft.
Jenis jendela berikut didukung:
"boxcar": jendela persegi panjang"hamming": jendela Hamming"hann": jendela Hann"povey": jendela Povey
transformers.audio_utils.spectrogram
< source >( waveform: ndarraywindow: ndarrayframe_length: inthop_length: intfft_length: int | None = Nonepower: float | None = 1.0center: bool = Truepad_mode: str = 'reflect'onesided: bool = Truedither: float = 0.0preemphasis: float | None = Nonemel_filters: numpy.ndarray | None = Nonemel_floor: float = 1e-10log_mel: str | None = Nonereference: float = 1.0min_value: float = 1e-10db_range: float | None = Noneremove_dc_offset: bool = Falsedtype: dtype = <class 'numpy.float32'> )
Parameter
- waveform (
np.ndarraydengan bentuk(length,)) — Gelombang suara masukan. Ini harus berupa gelombang suara mono bernilai real tunggal. - window (
np.ndarraydengan bentuk(frame_length,)) — Fungsi windowing yang akan diterapkan, termasuk zero-padding jika diperlukan. Panjang window aktual mungkin lebih pendek dariframe_length, tetapi kami mengasumsikan array sudah di-zero-pad. - frame_length (
int) — Panjang bingkai analisis dalam sampel. Dengan librosa ini selalu sama denganfft_lengthtetapi kami juga mengizinkan ukuran yang lebih kecil. - hop_length (
int) — Langkah antara bingkai analisis yang berurutan dalam sampel. - fft_length (
int, opsional) — Ukuran buffer FFT dalam sampel. Ini menentukan berapa banyak bin frekuensi yang akan dimiliki spektrogram. Untuk kecepatan optimal, nilai ini sebaiknya berupa pangkat dua. JikaNone, gunakanframe_length. - power (
float, opsional, default 1.0) — Jika 1.0, mengembalikan spektrogram amplitudo. Jika 2.0, mengembalikan spektrogram daya. JikaNone, mengembalikan bilangan kompleks. - center (
bool, opsional, defaultTrue) — Apakah akan melakukan padding pada waveform sehingga frametberada di tengah waktut * hop_length. JikaFalse, frametakan dimulai pada waktut * hop_length. - pad_mode (
str, opsional, defaultnya"reflect") — Mode padding yang digunakan ketikacenteradalahTrue. Nilai yang mungkin adalah:"constant"(padding dengan nol),"edge"(padding dengan nilai tepi),"reflect"(padding dengan nilai cermin). - onesided (
bool, opsional, defaultTrue) — Jika True, hanya menghitung frekuensi positif dan mengembalikan spektrogram yang berisifft_length // 2 + 1bin frekuensi. Jika False, juga menghitung frekuensi negatif dan mengembalikanfft_lengthbin frekuensi. - dither (
float, opsional, default 0.0) — Menambahkan dithering. Dengan kata lain, menambahkan noise Gaussian kecil ke setiap frame. Misalnya, gunakan 4.0 untuk menambahkan dithering dengan distribusi normal yang berpusat di 0.0 dengan deviasi standar 4.0, 0.0 berarti tidak ada dithering. Dithering memiliki efek serupa denganmel_floor. Ini mengurangi nilai log_mel_fbank yang tinggi untuk sinyal dengan bagian hard-zero, ketika VAD cutoff hadir dalam sinyal. - preemphasis (
float, opsional) — Koefisien untuk filter low-pass yang menerapkan pre-emphasis sebelum DFT. - mel_filters (
np.ndarraydengan bentuk(num_freq_bins, num_mel_filters), opsional) — Bank filter mel. Jika diberikan, bank filter ini diterapkan untuk membuat spektrogram mel. - mel_floor (
float, opsional, default 1e-10) — Nilai minimum dari bank frekuensi mel. - log_mel (
str, opsional) — Cara mengonversi spektrogram ke skala log. Opsi yang tersedia:None(tidak mengonversi),"log"(mengambil logaritma natural)"log10"(mengambil logaritma basis-10),"dB"(mengonversi ke desibel). Hanya dapat digunakan ketikapowerbukanNone. - reference (
float, opsional, default 1.0) — Menetapkan nilai spektrogram input yang sesuai dengan 0 dB. Misalnya, gunakannp.max(spectrogram)untuk menetapkan bagian paling keras ke 0 dB. Harus lebih besar dari nol. - min_value (
float, opsional, default1e-10) — Spektrogram akan dipotong (clipped) ke nilai minimum ini sebelum dikonversi ke desibel, untuk menghindari pengambilanlog(0). Untuk spektrogram daya, default1e-10sesuai dengan minimum -100 dB. Untuk spektrogram amplitudo, nilai1e-5sesuai dengan -100 dB. Harus lebih besar dari nol. - db_range (
float, opsional) — Menetapkan rentang dinamis maksimum dalam desibel. Misalnya, jikadb_range = 80, selisih antara nilai puncak dan nilai terkecil tidak akan pernah melebihi 80 dB. Harus lebih besar dari nol. - remove_dc_offset (
bool, opsional) — Kurangi rata-rata dari waveform pada setiap frame, diterapkan sebelum pre-emphasis. Nilai ini harus diset ketrueagar mendapatkan hasil yang sama dengantorchaudio.compliance.kaldi.fbanksaat menghitung filter mel. - dtype (
np.dtype, opsional, defaultnp.float32) — Tipe data dari tensor spektrogram. Jikapoweradalah None, argumen ini diabaikan dan dtype akan menjadinp.complex64.
Menghitung spektrogram dari satu gelombang suara menggunakan Short-Time Fourier Transform.
Fungsi ini dapat membuat jenis spektrogram berikut:
- spektrum amplitudo (
power = 1.0) - spektrum daya (
power = 2.0) - spektrogram bernilai kompleks (
power = None) - spektrogram log (gunakan argumen
log_mel) - spekrogram mel (berikan
mel_filters) - spektrogram log-mel (berikan
mel_filtersdanlog_mel)
Cara kerjanya:
- Gelombang input dipecah menjadi frame berukuran
frame_lengthyang tumpang tindih sebagian sebanyak `frame_length- sampel `hop_length`.
- Setiap frame dikalikan dengan jendela dan ditempatkan ke dalam buffer berukuran
fft_length. - DFT diambil dari setiap frame yang telah di-window.
- Hasilnya ditumpuk menjadi spektrogram.
Kami membedakan blok data sampel berikut, di mana masing-masing dapat memiliki panjang yang berbeda:
- Bingkai analisis. Ini adalah ukuran potongan waktu yang digunakan untuk membagi gelombang input.
- Jendela. Setiap bingkai analisis dikalikan dengan jendela untuk menghindari kebocoran spektral.
- Buffer input FFT. Panjang buffer ini menentukan berapa banyak bin frekuensi yang ada dalam spektrogram.
Pada implementasi ini, jendela diasumsikan telah di-*zero-pad* agar memiliki ukuran yang sama dengan bingkai analisis. Jendela yang telah di-*pad* dapat diperoleh dari window_function(). Buffer masukan FFT dapat lebih besar dari bingkai analisis, biasanya pangkat dua berikutnya.
Catatan: Fungsi ini belum dioptimalkan untuk kecepatan. Fungsi ini seharusnya sebagian besar kompatibel dengan librosa.stft dan torchaudio.functional.transforms.Spectrogram, meskipun lebih fleksibel karena berbagai cara spekrogram dapat dibangun.
transformers.audio_utils.power_to_db
< source >( spectrogram: ndarrayreference: float = 1.0min_value: float = 1e-10db_range: float | None = None ) → np.ndarray
Parameter
- spectrogram (
np.ndarray) — Spectrogram daya (mel) masukan. Perhatikan bahwa spectrogram daya memiliki amplitudo yang dikuadratkan! - reference (
float, opsional, default 1.0) — Menetapkan nilai spektrogram input yang sesuai dengan 0 dB. Misalnya, gunakannp.max(spectrogram)untuk menetapkan bagian paling keras ke 0 dB. Harus lebih besar dari nol. - min_value (
float, opsional, default1e-10) — Spektrogram akan dipotong (clipped) ke nilai minimum ini sebelum dikonversi ke desibel, untuk menghindari pengambilanlog(0). Nilai default1e-10sesuai dengan minimum -100 dB. Harus lebih besar dari nol. - db_range (
float, opsional) — Menetapkan rentang dinamis maksimum dalam desibel. Misalnya, jikadb_range = 80, selisih antara nilai puncak dan nilai terkecil tidak akan pernah melebihi 80 dB. Harus lebih besar dari nol.
Mengembalikan
np.ndarray
spektrogram dalam desibel
Mengonversi spektrogram daya ke skala desibel. Ini menghitung 10 * log10(spectrogram / reference), menggunakan sifat-sifat dasar logaritma untuk stabilitas numerik.
Motivasi di balik penerapan fungsi log pada spektrogram (mel) adalah bahwa manusia tidak mendengar kerasnya suara pada skala linear. Secara umum, untuk menggandakan persepsi volume suara, kita perlu memasukkan 8 kali lebih banyak energi ke dalamnya. Ini berarti bahwa variasi besar dalam energi mungkin tidak terdengar sangat berbeda jika suaranya sudah keras sejak awal. Operasi kompresi ini membuat fitur spektrogram (mel) lebih sesuai dengan apa yang sebenarnya didengar oleh manusia.
Berdasarkan implementasi dari librosa.power_to_db.
transformers.audio_utils.amplitude_to_db
< source >( spectrogram: ndarrayreference: float = 1.0min_value: float = 1e-05db_range: float | None = None ) → np.ndarray
Parameter
- spectrogram (
np.ndarray) — Spektrogram amplitudo (mel) masukan. - reference (
float, opsional, default 1.0) — Menetapkan nilai spektrogram input yang sesuai dengan 0 dB. Misalnya, gunakannp.max(spectrogram)untuk menetapkan bagian paling keras ke 0 dB. Harus lebih besar dari nol. - min_value (
float, opsional, default1e-5) — Spektrogram akan dipotong (clipped) ke nilai minimum ini sebelum dikonversi ke desibel, untuk menghindari pengambilanlog(0). Nilai default1e-5sesuai dengan minimum -100 dB. Harus lebih besar dari nol. - db_range (
float, opsional) — Menetapkan rentang dinamis maksimum dalam desibel. Misalnya, jikadb_range = 80, selisih antara nilai puncak dan nilai terkecil tidak akan pernah melebihi 80 dB. Harus lebih besar dari nol.
Mengembalikan
np.ndarray
spektrogram dalam desibel
Mengonversi spektrogram amplitudo ke skala desibel. Ini menghitung 20 * log10(spectrogram / reference), menggunakan
sifat-sifat logaritma dasar untuk stabilitas numerik.
Motivasi di balik penerapan fungsi log pada spektrogram (mel) adalah bahwa manusia tidak mendengar kerasnya suara pada skala linear. Secara umum, untuk menggandakan persepsi volume suara, kita perlu memasukkan 8 kali lebih banyak energi ke dalamnya. Ini berarti bahwa variasi besar dalam energi mungkin tidak terdengar sangat berbeda jika suaranya sudah keras sejak awal. Operasi kompresi ini membuat fitur spektrogram (mel) lebih sesuai dengan apa yang sebenarnya didengar oleh manusia.