Phase 06: Speech & Audio

Ses Temellikleri Dalga şekilleri, örnekleme, Fourier dönüşümü

Dalga şekilleri çiğ sinyalidır. Spektrogramlar temsilidir. Mel özellikleri ML dostu formudur. Her modern ASR ve TTS boru hattı bu merdivenin üzerinde yürür ve ilk adım örnekleme ve Fourier'i anlamak.

Type: Learn

Languages: Python

Prerequisites: Phase 1 · 06 (Vectors & Matrices), Phase 1 · 14 (Probability Distributions)

Time: ~45 minutes

Sorun

Bir mikrofon bir basınç ve zaman sinyali üretir. sinir ağınız tenzorlar tüketir. Onların arasında bir dizi konvansiyon bulunur ve bu konvansiyonlar ihlal edildiğinde sessiz böcekler üretir: model iyi çalışır ama WER iki katlanır, ya da TTS bir hisseder veya ses klonlama sistemi hoparlör yerine mikrofonı ezberler.

Konuşma sistemlerinde her hata üç sorudan birine döner:

  1. Veriler hangi örnek oranında kaydedildi ve model ne bekliyor?
  2. Sinyal adı gizli mi?
  3. Çiğ örnekler üzerinde mi çalışıyorsunuz yoksa frekans temsilleri üzerinde mi?

Bunları doğru yaparsanız, 6. aşamada kalanlar kontrol edilebilir.

Anlaşım

!Waveform, sampling, DFT, and frequency bins visualized

Waveform.Bir boyutlu bir sünger arşivinde [-1.0, 1.0]. Örnek numarasına göre indeksi. Sekünteler için örneğin oranına bölün: t = n / sr16 kHz'de 10 saniyelik bir klip 160.000 dalga ile bir dizi.

Sampling rate (sr).2026'da ortak oranlar:

RateUse
8 kHzTelephony, legacy VOIP. Nyquist at 4 kHz kills consonants. Avoid for ASR.
16 kHzASR standard. Whisper, Parakeet, SeamlessM4T v2 all consume 16 kHz.
22.05 kHzTTS vocoder training for older models.
24 kHzModern TTS (Kokoro, F5-TTS, xTTS v2).
44.1 kHzCD audio, music.
48 kHzFilm, pro audio, high-fidelity TTS (VALL-E 2, NaturalSpeech 3).

Nyquist-Shannon.sr sr/2- Ne ?sr/2Sınır Nyquist frekansıdır. Nyquist'in üzerindeki enerji aliased * aşağı frekanslara katlanır ve sinyali bozar.

Bit depth.16 bit PCM (salıkonulan int16, aralığı ±32.767) evrensel değişim biçimidir.soundfileint16 okuyun ama float32 dizilerini açığa çıkarın [-1, 1]- Evet .

Fourier Transform.Herhangi bir sınırlı sinyal, farklı frekanslarda sinusoidlerin toplamıdır.Nörnekler, Nkarmaşık katı bir frekans bin başına. bin kfrekans haritaları k · sr / NHz. Büyüklük bu frekansta genişliktir, açı faz.

FFT.Hızlı Fourier Değişimi: bir O(N log N)DFT algoritması, NHer ses kütüphanesi kapının altında FFT kullanır. 16 kHz'de 1024 örnek FFT, 15.6 Hz çözünürlükte 08 kHz'den oluşan 512 kullanılabilir frekans kutuları verir.

Framing + window.Bir klipi FFT yapmıyoruz. Tekrar üst üste frames (genellikle 25 ms 10 ms hop) olarak keseriz, kenar kesintisizlikleri ortadan kaldırmak için her çerçeveyi bir pencere işlevi (Hann, Hamming) ile çarpırız, sonra her çerçeveyi FFT yapıyoruz. Bu kısa süreli Fourier dönüşümü (STFT).

Yapın

Adım 1: bir klip oku ve dalga şeklini çiz

code/main.pySadece stdlib kullanıyor waveBu modül, demo bağımlılığından kurtulmak için kullanılacak.soundfileveya torchaudio.load(İkisi de geri dönüyor (waveform, sr)Tüpler:

pythonimport soundfile as sf
waveform, sr = sf.read("clip.wav", dtype="float32")  # shape (T,), sr=int

Adım 2: Birinci ilkelerden sinüs dalgasını sentez edin

pythonimport math

def sine(freq_hz, sr, seconds, amp=0.5):
    n = int(sr * seconds)
    return [amp * math.sin(2 * math.pi * freq_hz * i / sr) for i in range(n)]

440 Hz sinüs (koncert A) 16 kHz'de 1 saniye için 16,000 float.wave.open(..., "wb")16 bit PCM kodlamasını kullanıyor.

Adım 3: DFT'yi el ile hesaplayın

pythondef dft(x):
    N = len(x)
    out = []
    for k in range(N):
        re = sum(x[n] * math.cos(-2 * math.pi * k * n / N) for n in range(N))
        im = sum(x[n] * math.sin(-2 * math.pi * k * n / N) for n in range(N))
        out.append((re, im))
    return out

O(N²) için cezalandırılır N=256Doğruyu doğrulayan gerçek ses için işe yaramaz.numpy.fft.rfftveya torch.fft.rfft- Evet .

Dördüncü adım: baskın frekansı bulun

Büyüklük zirvesi endeksi k_starfrekans haritaları k_star sr / N440 Hz sinüsünde çalıştırmak bin ' de bir zirve gönderir .440 N / sr- Evet .

Adım 5: isim değiştirmeyi göster

7 kHz sinüsünün 10 kHz'de (Nyquist = 5 kHz) örneklenmesi. 7 kHz ton Nyquist'in üzerinde ve 10 − 7 = 3 kHzFFT zirvesi 3 kHz'de görünür. Bu klasik isim göstergesidir ve bu nedenle her DAC/ADC gemisi tuğla duvarı düşük geçiş filtre ile gönderir.

Kullan

2026'da gerçekten göndereceğiniz yığın:

TaskLibraryWhy
Read/write WAV/FLAC/OGGsoundfile (libsndfile wrapper)Fastest, stable, returns float32.
Resampletorchaudio.transforms.Resample or librosa.resampleCorrect anti-aliasing built in.
STFT / Meltorchaudio or librosaGPU-friendly; PyTorch ecosystem.
Real-time streamingsounddevice or pyaudioCross-platform PortAudio bindings.
Inspect a fileffprobe or soxiCLI, fast, reports sr/channels/codec.

Karar kuralları: match sample rate before you match anything elseWhisper 16 kHz mono float32'yi bekliyor. 44.1 kHz stereoyu geçirin ve model bir böcek gibi görünen bir çöp alacaksınız.

Gönder

  • Kaydet .outputs/skill-audio-loader.mdBu yetenek, ses girişinin aşağıdaki modelin beklentilerine uygun olup olmadığını ve doğru olmayan zamanlarda doğru şekilde örneklemenize yardımcı olur.

Egzersizler

  1. Easy.16 kHz'de 220 Hz + 440 Hz + 880 Hz'in 1 saniyelik bir karışımı sentezleyin. DFT çalıştırın. Beklenen kutularda üç zirveyi onaylayın.
  2. Medium.Sesini 3 saniyelik WAV'da 48 kHz'de kaydet.torchaudio.transforms.Resample(anti-aliasing ile), sonra 16 kHz'e naif onarımı kullanarak (her üçüncü örnek).
  3. Hard.STFT ' i sadece kullanarak sıfırdan oluşturunmathVe DFT'den 3. Adımdan. Çerçeve boyutu 400, hop 160, Hann penceresi.matplotlib.pyplot.imshowBu 2. Dersin spektrogramı.

Anahtar Terimler

TermWhat people sayWhat it actually means
Sample rateHow many samples per secondFrequency in Hz at which the ADC measures the signal.
NyquistThe max frequency you can representsr/2; energy above it aliases back down.
Bit depthResolution of each sampleint16 = 65,536 levels; float32 = 24-bit precision in [-1, 1].
DFTThe Fourier transform for sequencesN samples → N complex frequency coefficients.
FFTThe fast DFTO(N log N) algorithm requiring N = power of 2.
BinFrequency columnk · sr / N Hz; resolution = sr / N.
STFTSpectrogram under the hoodFramed + windowed FFT over time.
AliasingWeird frequency ghostsEnergy above Nyquist mirroring down to lower bins.

Daha Fazla Okumak

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.