اصول صوتی شکل موج، نمونه گیری، فرورترسفورم
Type: Learn
Languages: Python
Prerequisites: Phase 1 · 06 (Vectors & Matrices), Phase 1 · 14 (Probability Distributions)
Time: ~45 minutes
مشکل
یک میکروفون سیگنال فشار به زمان تولید می کند. شبکه عصبی شما تنسورها را مصرف می کند. بین آنها یک دسته از کنوانسیون ها قرار دارد که هنگامی که نقض می شود، اشکال خاموش را تولید می کند: مدل به خوبی حرکت می کند اما WER دو برابر می شود، یا TTS یک سوت می فرستد، یا سیستم کلون صدا میکروفون را به جای بلندگو به یاد می آورد.
هر خطا در سیستم های گفتاری به یکی از سه سوال برمی گردد:
- داده های ثبت شده در چه نرخ نمونه ای بوده و مدل چه انتظاراتی را دارد؟
- سیگنال نام مستعار داره؟
- شما روی نمونه های خام کار می کنید یا روی نمایش فرکانس؟
اينها رو درست انجام بده و بقيه مرحله 6 قابل کنترل باشه اشتباهشون رو درست انجام بده و حتي Whisper-Large-v4 هم زباله مي کنه
مفهوم
!Waveform, sampling, DFT, and frequency bins visualized
Waveform.يه دسته ي يک بعدی از شناورها در[-1.0, 1.0]برای تبدیل به ثانیه ها، به سرعت نمونه تقسیم کنید:t = n / sr. یک کلیپ 10 ثانیه با 16 کیلوهرتز یک سری از 160 هزار فلوت است
Sampling rate (sr).چند نمونه در ثانیه. نرخ های مشترک در سال 2026:
| Rate | Use |
|---|---|
| 8 kHz | Telephony, legacy VOIP. Nyquist at 4 kHz kills consonants. Avoid for ASR. |
| 16 kHz | ASR standard. Whisper, Parakeet, SeamlessM4T v2 all consume 16 kHz. |
| 22.05 kHz | TTS vocoder training for older models. |
| 24 kHz | Modern TTS (Kokoro, F5-TTS, xTTS v2). |
| 44.1 kHz | CD audio, music. |
| 48 kHz | Film, pro audio, high-fidelity TTS (VALL-E 2, NaturalSpeech 3). |
Nyquist-Shannon.نرخ نمونه ای ازsrمی تواند به طور واضح فرکانس ها را تا sr/2.sr/2مرز فرکانس نیکیست است. انرژی بالای نیکیست نامگذاری شده به فرکانس های پایین تر خم می شود و سیگنال را خراب می کند. همیشه قبل از نمونه گیری پایین فیلتر کم عبور کنید.
Bit depth.16-bit PCM (به عنوان int16، محدوده ±32,767) است که فرمت تبادل جهانی است. 24-bit برای موسیقی، 32-bit شناور برای DSP داخلی. کتابخانه هایی مانند soundfileint16 رو بخونيد ولي در [-1, 1]. .
Fourier Transform.هر سیگنال محدود، مجموعه ای از سینوسایدها در فرکانس های مختلف است.Nنمونه هاNمعادلات پیچیده یک برای هر سطل فرکانس. bin kنقشه ها به فرکانسk · sr / Nهرتز. بزرگي در اين فرکانس، زاويه در مرحله است.
FFT.فرور سریع ترانسفورم:O(N log N)الگوریتم DFT وقتیNهر کتابخانه صوتی از FFT زیر کاپ استفاده می کند. یک FFT نمونه 1024 در 16 kHz 512 سطل فرکانس قابل استفاده را در عرض 08 kHz در رزولوشن 15.6 Hz فراهم می کند.
Framing + window.ما یک کلپ را FFT نمی کنیم. ما آن را به frames (معمولا 25 ms با 10 ms hop) بر روی همپوش می کنیم، هر فریم را با یک تابع پنجره (هان، هامینگ) برای از بین بردن قطعیت های کناری، سپس هر فریم را FFT می کنیم. این است که Short-Time Fourier Transform (STFT). درس 02 از اینجا شروع می شود.
آن را بسازید
مرحله اول: یک کلیپ را بخوانید و شکل موج را نقشه برداری کنید
code/main.pyفقط از stdlib استفاده ميکنهwaveماژول برای نگه داشتن انحصار آزاد در نمایش. برای تولید شما می توانید استفاده کنید soundfileیاtorchaudio.load(هر دو برگشت(waveform, sr)دوتا:
pythonimport soundfile as sf
waveform, sr = sf.read("clip.wav", dtype="float32") # shape (T,), sr=intمرحله دوم: یک موج سینوس را از اصول اول ترکیب کنید
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 هرتز (کنسرت A) در 16 کیلو هرتز برای یک ثانیه 16000 شناور است.wave.open(..., "wb")با استفاده از کدگذاری 16 بایت PCM.
مرحله 3: محاسبه DFT به صورت دستی
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 outO(N²) خوب براي N=256براي تایید درستي، براي صداي واقعي بي فایدهnumpy.fft.rfftیاtorch.fft.rfft. .
مرحله 4: تعدد غالب را پیدا کنید
شاخص اوج بُعدk_starنقشه ها به فرکانسk_star sr / N. اينو با 440 هرتز سينوس اجرا مي کنيم بايد اوج رو به بين برگردونيم440 N / sr. .
مرحله 5: نشان دادن نامگذاری
نمونه ای از 7 kHz سینوس در 10 kHz (نیکویست = 5 kHz)10 − 7 = 3 kHz. اوج FFT در 3 kHz ظاهر می شود. این نام استعاره کلاسیک است و دلیل اینکه هر DAC / ADC با یک فلتر کم عبور دیوار خمیر می فرستد.
ازش استفاده کن
اون دسته اي که در سال 2026 به دنيا مي فرستيد:
| Task | Library | Why |
|---|---|---|
| Read/write WAV/FLAC/OGG | soundfile (libsndfile wrapper) | Fastest, stable, returns float32. |
| Resample | torchaudio.transforms.Resample or librosa.resample | Correct anti-aliasing built in. |
| STFT / Mel | torchaudio or librosa | GPU-friendly; PyTorch ecosystem. |
| Real-time streaming | sounddevice or pyaudio | Cross-platform PortAudio bindings. |
| Inspect a file | ffprobe or soxi | CLI, fast, reports sr/channels/codec. |
قانون تصمیم گیری: match sample rate before you match anything else.سسپر انتظار داره 16 kHz mono float32 باشه. 44.1 kHz استریو بده و شما زباله هایی رو پیدا میکنی که شبیه یک مدل بگ هستن
-باده
پس ازoutputs/skill-audio-loader.mdاین مهارت به شما کمک می کند تا بررسی کنید که ورودی صوتی با انتظارات مدل زیر جریان مطابقت دارد و در صورتی که اینگونه نباشد، نمونه های درست را تکرار کنید.
تمرینات
- Easy.ترکیب یک ترکیب یک ثانیه از 220 هرتز + 440 هرتز + 880 هرتز در 16 کلو هرتز. DFT اجرا کنید. سه نقطه اوج در سطل انتظار می رود را تایید کنید.
- Medium.3 ثانیه WAV صداي خودتو در 48 kHz ضبط کنين
torchaudio.transforms.Resample(با ضد جبران) ، سپس به 16 kHz با استفاده از اعشاریه ساده (هر سوم نمونه) FFT هر دو. جبران نام کجا ظاهر می شود؟ - Hard.از نو ساخت STFT با استفاده از فقط
mathو DFT از مرحله 3. اندازه قاب 400، hop 160, پنجره Hann.matplotlib.pyplot.imshowاين اسپکتروگرام درس 2ه
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Sample rate | How many samples per second | Frequency in Hz at which the ADC measures the signal. |
| Nyquist | The max frequency you can represent | sr/2; energy above it aliases back down. |
| Bit depth | Resolution of each sample | int16 = 65,536 levels; float32 = 24-bit precision in [-1, 1]. |
| DFT | The Fourier transform for sequences | N samples → N complex frequency coefficients. |
| FFT | The fast DFT | O(N log N) algorithm requiring N = power of 2. |
| Bin | Frequency column | k · sr / N Hz; resolution = sr / N. |
| STFT | Spectrogram under the hood | Framed + windowed FFT over time. |
| Aliasing | Weird frequency ghosts | Energy above Nyquist mirroring down to lower bins. |
خواندن بیشتر
- Shannon (1949). Communication in the Presence of Noise مقاله پشت نظریه نمونه گیری
- Smith — The Scientist and Engineer's Guide to Digital Signal Processing کتاب درسی رایگان و قانونی در DSP
- librosa docs — audio primer راه رفتن عملی با کد
- Heinrich Kuttruff — Room Acoustics (6th ed.) اشاره به اینکه چرا صدا در دنیای واقعی یک سینوساید تمیز نیست.
- Steve Eddins — FFT Interpretation notebook حس باين فرکانس در 10 دقيقه پاک شد
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.