03 ноября 2020

πŸŽ›οΈπŸ ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π€ΡƒΡ€ΡŒΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python

ΠŸΠΈΡˆΡƒ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠΆΡƒ ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ IT-ΡΡ‚Π°Ρ‚ΡŒΠΈ. На proglib написал 140 ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ². УвлСкаюсь Python, Π²Π΅Π±ΠΎΠΌ ΠΈ Data Science. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Ρƒ – ссылки Π½Π° соцсСти ΠΈ мСссСндТСры: https://matyushkin.github.io/links/ Если понравился ΡΡ‚ΠΈΠ»ΡŒ излоТСния, упорядочСнный список ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ β€” https://github.com/matyushkin/lessons
ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования прСобразования Π€ΡƒΡ€ΡŒΠ΅ для восстановлСния Π·Π°ΡˆΡƒΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ аудиосигнала с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SciPy.
πŸŽ›οΈπŸ ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π€ΡƒΡ€ΡŒΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» прСдставляСт собой Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращСнный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠšΡΠΌΠ΅Ρ€ΠΎΠ½Π° ΠœΠ°ΠΊΠ›Π°ΡƒΠ΄Π° Fourier Transforms With scipy.fft: Python Signal Processing.

***

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ – повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°Π½Π°Π»ΠΈΠ·Π° сигналов – ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π΄ΠΎ сТатия ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΎΡ‚ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… расчСтов Π΄ΠΎ Data Science. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Π°Ρ Python-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° SciPy прСдоставляСт Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ прСобразования Π€ΡƒΡ€ΡŒΠ΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ scipy.fft.

Π‘Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ выглядит ΡƒΡΡ‚Ρ€Π°ΡˆΠ°ΡŽΡ‰Π΅. Π’ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠΌΡƒ мноТСство ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎ Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ докумСнтация ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ тСхничСской Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ пояснСний. Но Π΅ΡΡ‚ΡŒ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, достаточно ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ лишь нСсколько основных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ.

НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π½Π΅ чувствуСтС сСбя ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ Π² матСматичСских изысканиях – ΠΌΡ‹ рассмотрим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ практичСском ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€ΠΎΠ»ΠΈΠΊ 3Blue1Brown (Π΅ΡΡ‚ΡŒ русскиС субтитры).

Из этого руководства Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

  • ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅;
  • ΠΊΠ°ΠΊ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· scipy.fft;
  • ΠΊΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ частотный спСктр сигнала;
  • ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ доступных Π² scipy.fft ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅
ВСкст ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ доступСн Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π° Jupyter.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ scipy.fft

Установка SciPy ΠΈ Matplotlib

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ SciPy, NumPy (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами) ΠΈ Matplotlib (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов:

  1. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Anaconda: Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΈ установитС Anaconda Individual Edition. Π’ этот Π½Π°Π±ΠΎΡ€ инструмСнтов ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ пСрСчислСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  2. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ (ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ посрСдством ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:
        python -m pip install -U numpy scipy matplotlib
    

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ установка ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, запустив ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

        import numpy, scipy, matplotlib
print(numpy.__version__)
print(scipy.__version__)
print(matplotlib.__version__)
    

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ NumPy, SciPy, Matplotlib ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ вСрсии ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ссли ΠΎΠ½ΠΈ установлСны Π² систСмС.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ scipy.fft ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями

ΠžΡ‡Π΅Ρ€Ρ‚ΠΈΠΌ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ scipy.fft ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями со схоТими названиями. ΠŸΡ€ΠΈ просмотрС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ SciPy Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Π΄Π²Π° родствСнных модуля:

  • scipy.fft
  • scipy.fftpack

ΠœΠΎΠ΄ΡƒΠ»ΡŒ scipy.fft Π½ΠΎΠ²Π΅Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ρ‡Π΅ΠΌ scipy.fftpack:

  • scipy.fft ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ интСрфСйс;
  • scipy.fft позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ.

РСализация быстрого прСобразования Π€ΡƒΡ€ΡŒΠ΅ (Π°Π½Π³Π». Fast Fourier transform, FFT) Π² SciPy содСрТит большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ вСроятно Π±ΡƒΠ΄Π΅Ρ‚ исправлСна Π² случаС обнаруТСния ошибки, Ρ‡Π΅ΠΌ рСализация NumPy (numpy.fft), которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ FFT лишь для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»
πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python
ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅

Анализ Π€ΡƒΡ€ΡŒΠ΅ – ΠΎΠ±Π»Π°ΡΡ‚ΡŒ матСматичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π°Ρ Π½Π° вопрос, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ простых тригономСтричСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ – это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π² исслСдуСмом сигналС ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΊΠ»Π°Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих гармоничСских ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ частотой. Π’ этом смыслС говорят, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ позволяСт Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ частотам.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…:

  1. Π‘ΠΈΠ³Π½Π°Π» – нСкоторая информация, которая мСняСтся со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. НапримСр, аудиосигнал, видСосигнал, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ разности элСктричСских ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΠΎΠ² – всё это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ сигналов.
  2. Частота (Π°Π½Π³Π». frequency) – это ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ повторяСтся. НапримСр, часы Ρ‚ΠΈΠΊΠ°ΡŽΡ‚ с частотой ΠΎΠ΄ΠΈΠ½ Π³Π΅Ρ€Ρ† (1 Π“Ρ†) ΠΈΠ»ΠΈ, ΠΈΠ½Π°Ρ‡Π΅ говоря, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ Π² сСкунду.
  3. ΠœΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ (Π°Π½Π³Π». power) – Π² Π΄Π°Π½Π½ΠΎΠΌ случаС просто ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ сигнала для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ частоты.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ гармоничСских сигналов Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ частоты ΠΈ мощности.

Пики высокочастотной ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ располоТСны Π±Π»ΠΈΠΆΠ΅ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, Ρ‡Π΅ΠΌ ΠΏΠΈΠΊΠΈ низкочастотной. Π‘ΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ»Π½Π° ΠΌΠ°Π»ΠΎΠΉ мощности ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Ρƒ, Ρ‡Π΅ΠΌ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹.
Пики высокочастотной ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ располоТСны Π±Π»ΠΈΠΆΠ΅ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, Ρ‡Π΅ΠΌ ΠΏΠΈΠΊΠΈ низкочастотной. Π‘ΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ»Π½Π° ΠΌΠ°Π»ΠΎΠΉ мощности ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Ρƒ, Ρ‡Π΅ΠΌ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ для записи Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π½Π° Ρ„ΠΎΡ€Ρ‚Π΅ΠΏΠΈΠ°Π½ΠΎ Π°ΠΊΠΊΠΎΡ€Π΄ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Π½ΠΎΡ‚.

БхСматичСскоС прСдставлСниС Π°ΠΊΠΊΠΎΡ€Π΄Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ частотного спСктра
БхСматичСскоС прСдставлСниС Π°ΠΊΠΊΠΎΡ€Π΄Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ частотного спСктра

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ частотный спСктр ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΠΈΠΊΠ° – ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΡ‚Ρ‹. Если Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈΠ³Ρ€Π°Π» ΠΎΠ΄Π½Ρƒ Π½ΠΎΡ‚Ρƒ мягчС, ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ для частоты этой Π½ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС, Ρ‡Π΅ΠΌ для Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ….

Π—Π°Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅?

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях. НапримСр, Shazam ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слуТбы распознавания ΠΌΡƒΠ·Ρ‹ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ пСсСн. Алгоритм сТатия JPEG прСдставляСт собой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ прСобразования Π€ΡƒΡ€ΡŒΠ΅, примСняСмый для удалСния высокочастотных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ распознавании Ρ€Π΅Ρ‡ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ прСобразования слуТат для восстановлСния произнСсСнных слов.

Π—Π°Π΄Π°Ρ‡Π° прСобразования Π€ΡƒΡ€ΡŒΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с сигналом, прСдставляСмым Π² пространствС частот.

ВрСмСнная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² частотной области

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с врСмСнно́й ΠΈ частотной областями] – двумя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ сигнала: ΠΊΠ°ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, которая измСняСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° частот ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄.

НиТС прСдставлСно Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ аудиосигнала – классичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° сигнала Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ области. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ось соотвСтствуСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ось – Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Π΅.

Аудиосигнал Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ области
Аудиосигнал Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ области

Π’ΠΎΡ‚ ΠΆΠ΅ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΏΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎ частотам. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ось Π½Π° рисункС Π½ΠΈΠΆΠ΅ прСдставляСт частоту, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ось – ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ.

Π’ΠΎΡ‚ ΠΆΠ΅ аудиосигнал Π² частотной области
Π’ΠΎΡ‚ ΠΆΠ΅ аудиосигнал Π² частотной области

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π€ΡƒΡ€ΡŒΠ΅

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°ΠΌ. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ – ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅: Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ ΠΈΠ»ΠΈ дискрСтныС. Π’ этом руководствС ΠΌΡ‹ рассматриваСм дискрСтноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ (DFT).

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ DFT ΠΈ FFT Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ взаимозамСняСмыС. Однако это Π½Π΅ совсСм ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅: быстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ (FFT) – лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² вычислСния дискрСтного прСобразования Π€ΡƒΡ€ΡŒΠ΅.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° линия Ρ€Π°Π·Π΄Π΅Π»Π° Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΈ использовании scipy.fft,– Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π²Π²ΠΎΠ΄Π°. НапримСр, функция fft() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ комплСксныС числа, Π° rfft() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами. Π’ дальнСйшСм ΠΌΡ‹ обсудим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡˆΡƒΠΌΠ° ΠΈΠ· Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»Π°

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ€Π΅ΡˆΠΈΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π·Π²ΡƒΠΊΠ°. НамСрСнно создадим Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал с высокочастотным ΡˆΡƒΠΌΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΠΌ ΡˆΡƒΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСобразования Π€ΡƒΡ€ΡŒΠ΅.

БозданиС сигнала

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ гармоничСскоС (ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠ΅) ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ частоту ΠΈ Π² ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ являСтся чистым Ρ‚ΠΎΠ½ΠΎΠΌ. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ свойством Ρ‚Π°ΠΊΠΈΡ… Π²ΠΎΠ»Π½ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π²ΡƒΠΊΠ°:

        import numpy as np
from matplotlib import pyplot as plt

SAMPLE_RATE = 44100  # Π“Ρ†
DURATION = 5  # Π‘Π΅ΠΊΡƒΠ½Π΄Ρ‹

def generate_sine_wave(freq, sample_rate, duration):
    x = np.linspace(0, duration, sample_rate*duration, endpoint=False)
    frequencies = x * freq
    # 2pi для прСобразования Π² Ρ€Π°Π΄ΠΈΠ°Π½Ρ‹
    y = np.sin((2 * np.pi) * frequencies)
    return x, y

# Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π²ΠΎΠ»Π½Ρƒ с частотой 2 Π“Ρ†, которая длится 5 сСкунд
x, y = generate_sine_wave(2, SAMPLE_RATE, DURATION)
plt.plot(x, y)
plt.show()
    

ПослС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° NumPy ΠΈ Matplotlib ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π΅ константы:

  1. SAMPLE_RATE (частота дискрСтизации) опрСдСляСт, сколько Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдставлСния ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ 1 с. Если Π±Ρ‹ сигнал ΠΈΠΌΠ΅Π» частоту дискрСтизации 10 Π“Ρ† ΠΈ прСдставлял ΠΏΡΡ‚ΠΈΡΠ΅ΠΊΡƒΠ½Π΄Π½ΡƒΡŽ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΡƒΡŽ Π²ΠΎΠ»Π½Ρƒ, Ρ‚ΠΎ ΠΎΠ½ содСрТал Π±Ρ‹ 50 Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ….
  2. DURATION – Π΄Π»ΠΈΠ½Π° сгСнСрированной Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ – ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π΅ΠΉ нСсколько Ρ€Π°Π·. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ частоту freq ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния x ΠΈ y, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для построСния изобраТСния сигнала.

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСны ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ DURATION. Установка endpoint = False Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ np.linspace() Π²Π°ΠΆΠ½Π° для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСобразования Π€ΡƒΡ€ΡŒΠ΅ – прСдполагаСтся, Ρ‡Ρ‚ΠΎ сигнал являСтся пСриодичСским.

Ось x прСдставляСт врСмя Π² сСкундах – ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ»Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π΄Π²Π° колСбания Π² сСкунду. Π­Ρ‚Π° синусоида ΠΈΠΌΠ΅Π΅Ρ‚ слишком Π½ΠΈΠ·ΠΊΡƒΡŽ частоту, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, поэтому Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ сгСнСрируСм нСсколько высокочастотных синусоид ΠΈ рассмотрим, ΠΊΠ°ΠΊ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ.

БмСшиваниС аудиосигналов

ΠœΠΈΠΊΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ аудиосигналов состоит всСго ΠΈΠ· Π΄Π²ΡƒΡ… этапов:

  • cΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сигналов;
  • нормализация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.
        _, nice_tone = generate_sine_wave(400, SAMPLE_RATE, DURATION)
_, noise_tone = generate_sine_wave(4000, SAMPLE_RATE, DURATION)

noise_tone = noise_tone * 0.3
mixed_tone = nice_tone + noise_tone
    

Π‘ΠΈΠΌΠ²ΠΎΠ» подчСркивания (_) ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ значСния x, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ generate_sine_wave() – Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ значСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг – нормализация, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сигнала ΠΏΠΎΠ΄ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π’ нашСм случаС это 16-Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ -32768 Π΄ΠΎ 32767:

        normalized_tone = np.int16((mixed_tone / mixed_tone.max()) * 32767)

plt.plot(normalized_tone[:1000])
plt.show()
    
Π’ΠΈΠ΄ ΡΠΌΠΈΠΊΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сигнала
Π’ΠΈΠ΄ ΡΠΌΠΈΠΊΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сигнала

Π”Π΅Π»Π΅Π½ΠΈΠ΅ mixed_tone Π½Π° максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ ΠΎΡ‚ -1 Π΄ΠΎ 1. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 32767 ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал ΠΌΠ΅ΠΆΠ΄Ρƒ -32767 ΠΈ 32767, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ соотвСтствуСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ np.int16. Код ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 1000 Ρ‚ΠΎΡ‡Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ‡Π΅Ρ‚Ρ‡Π΅ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ структуру сигнала. Видимая Π½Π°ΠΌΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ»Π½Π° – это сгСнСрированный Ρ‚ΠΎΠ½ 400 Π“Ρ†, искаТСнный Ρ‚ΠΎΠ½ΠΎΠΌ 4000 Π“Ρ†.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π·Π²ΡƒΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎΠΏΠ»Π΅Π΅Ρ€. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SciPy wavfile.write ΠΈ сохраним Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° WAV. Π’Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ 16-Π±ΠΈΡ‚Π½ΠΎΠ΅ цСлочислСнноС прСдставлСниС являСтся стандартным Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… для wav-Ρ„Π°ΠΉΠ»ΠΎΠ².

        from scipy.io.wavfile import write

write("mysinewave.wav", SAMPLE_RATE, normalized_tone)
    

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ» mysinewave.wav Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π³Π΄Π΅ ΠΌΡ‹ запускаСм этот скрипт Python. Π€Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ любого ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠ»Π΅Π΅Ρ€Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ быстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ для удалСния ΡˆΡƒΠΌΠ°

БыстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ (FFT) – Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ частотный спСктр сигнала:

        from scipy.fft import fft, fftfreq

# число Ρ‚ΠΎΡ‡Π΅ΠΊ Π² normalized_tone
N = SAMPLE_RATE * DURATION

yf = fft(normalized_tone)
xf = fftfreq(N, 1 / SAMPLE_RATE)

plt.plot(xf, np.abs(yf))
plt.show()
    
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ FFT-прСобразования
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ FFT-прСобразования

На построСнном спСктрС Π²ΠΈΠ΄Π½Ρ‹ Π΄Π²Π° ΠΏΠΈΠΊΠ° Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частотах ΠΈ Π΄Π²Π° ΠΈΡ… Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… отраТСния Π² ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ области. Пики ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… частот находятся Π½Π° позициях 400 ΠΈ 4000 Π“Ρ†.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ взяло ΠΊΠΎΠ»Π΅Π±Π»ΡŽΡ‰ΠΈΠΉΡΡ сигнал ΠΈ Ρ€Π°Π·Π»ΠΎΠΆΠΈΠ»ΠΎ Π΅Π³ΠΎ ΠΏΠΎ содСрТащимся Π² Π½Π΅ΠΌ частотам. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ сами внСсли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ частоты, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ прСобразования ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ…. Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС Π² ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ областях – ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт Π²Π²ΠΎΠ΄Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅, ΠΎ Ρ‡Ρ‘ΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² дальнСйшСм.

Π‘Π°ΠΌΡ‹ΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» Π² этом нСбольшом скриптС – вычислСниС прСобразования Π€ΡƒΡ€ΡŒΠ΅:

        yf = fft(normalized_tone)
xf = fftfreq(N, 1/SAMPLE_RATE)
    

Код Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. fft() вычисляСт само ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.
  2. fftfreq() Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ частоты Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Β«Π±ΠΈΠ½Π°Β» Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ fft(). Π‘Π΅Π· этого Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ возмоТности ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ось x нашСго спСктра.

Под Π±ΠΈΠ½ΠΎΠΌ здСсь понимаСтся ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, сгруппированных Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ гистограммС. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этого руководства достаточно Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π° являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, выполняСмая с yf ΠΏΠ΅Ρ€Π΅Π΄ построСниСм – Π²Ρ‹Π·ΠΎΠ² np.abs() для yf Π²Ρ‹Π·Π²Π°Π½ лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ значСния yf – комплСксныС числа.

КомплСксноС число – это число, состоящСС ΠΈΠ· Π΄Π²ΡƒΡ… частСй: Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΌΠ½ΠΈΠΌΠΎΠΉ. Π’Π°ΠΊΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ числа ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… прилоТСниях, Π½ΠΎ Ссли Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½ΠΈΠΌΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Ρ‚ΠΎ сСйчас достаточно Π·Π½Π°Ρ‚ΡŒ лишь Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ комплСксныС числа Π² Ρ„ΠΎΡ€ΠΌΠ΅ a + bi, Π³Π΄Π΅ a – Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ, b – мнимая Ρ‡Π°ΡΡ‚ΡŒ, i – мнимая Π΅Π΄ΠΈΠ½ΠΈΡ†Π°.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ комплСксныС числа состоят ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, построСниС Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΡ… зависимости ΠΎΡ‚ частоты Π½Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ оси Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° значСния Π² ΠΎΠ΄Π½ΠΎ. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ np.abs(). Π­Ρ‚Π° функция вычисляСт √(aΒ²+bΒ²).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ fft() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² качСствС максимальной частоты Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 20 тысяч Π³Π΅Ρ€Ρ†, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: 22050 Π“Ρ†. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ составляСт Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ частоты дискрСтизации ΠΈ называСтся частотой Найквиста. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов (Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° ΠšΠΎΡ‚Π΅Π»ΡŒΠ½ΠΈΠΊΠΎΠ²Π°), слСдуСт, Ρ‡Ρ‚ΠΎ частота дискрСтизации Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Π΄Π²ΠΎΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ частоту сигнала.

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ сигнал Π΅Ρ‰Π΅ быстрСС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ rfft()

Частотный спСктр, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ fft(), Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎ отраТался ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси y. Π­Ρ‚Π° симмСтрия Π²Ρ‹Π·Π²Π°Π½Π° Π²Π²ΠΎΠ΄ΠΎΠΌ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл. Π­Ρ‚Ρƒ ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅, вычислив лишь ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rfft().

        from scipy.fft import rfft, rfftfreq

# ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° r Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΡ‘Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
yf = rfft(normalized_tone)
xf = rfftfreq(N, 1/SAMPLE_RATE)

plt.plot(xf, np.abs(yf))
plt.show()
    
Π€ΠΎΡ€ΠΌΠ° спСктра сигнала Π΄ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
Π€ΠΎΡ€ΠΌΠ° спСктра сигнала Π΄ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ сигнала

Бамая Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π€ΡƒΡ€ΡŒΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ. Π›ΡŽΠ±ΠΎΠΉ сигнал, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Π² частотной области, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ этим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ высокочастотный ΡˆΡƒΠΌ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ rfft() значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ мощности ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ частотного Π±ΠΈΠ½Π°. Если ΠΌΡ‹ установим ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Π±ΠΈΠ½Π° Ρ€Π°Π²Π½ΠΎΠΉ Π½ΡƒΠ»ΡŽ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ частота пСрСстанСт ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ сигналС Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ области:

        # Максимальная частота составляСт ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ частоты дискрСтизации
points_per_freq = len(xf) / (SAMPLE_RATE / 2)

# Наша цСлСвая частота - 4000 Π“Ρ†
target_idx = int(points_per_freq * 4000)
    

ΠžΠ±Π½ΡƒΠ»ΠΈΠΌ yf для индСксов ΠΎΠΊΠΎΠ»ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ частоты:

        yf[target_idx-2:target_idx+2] = 0

plt.plot(xf, np.abs(yf))
plt.show()
    
Π€ΠΎΡ€ΠΌΠ° спСктра сигнала послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
Π€ΠΎΡ€ΠΌΠ° спСктра сигнала послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

ΠžΡΡ‚Π°Π»ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования Π€ΡƒΡ€ΡŒΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ FFT Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ FFT:

        from scipy.fft import irfft

new_sig = irfft(yf)

plt.plot(new_sig[:1000])
plt.show()
    
Π€ΠΎΡ€ΠΌΠ° сигнала послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
Π€ΠΎΡ€ΠΌΠ° сигнала послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ использовали rfft(), для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ irfft(). Однако, Ссли Π±Ρ‹ ΠΌΡ‹ использовали fft(), ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π±Ρ‹Π»Π° Π±Ρ‹ ifft().

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° синусоида, ΠΊΠΎΠ»Π΅Π±Π»ΡŽΡ‰Π°ΡΡΡ с частотой 400 Π“Ρ† – ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΡˆΡƒΠΌ Π½Π° 4000 Π“Ρ†.

НормализуСм сигнал ΠΈ запишСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„Π°ΠΉΠ». Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·:

        norm_new_sig = np.int16(new_sig * (32767 / new_sig.max()))
write("clean.wav", SAMPLE_RATE, norm_new_sig)
    

ΠŸΡ€ΠΎΠΈΠ³Ρ€Π°Π² Ρ„Π°ΠΉΠ», Π²Ρ‹ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ писк исчСз.

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ
ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² большСй ΠΌΠ΅Ρ€Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, Ρ‡Π΅ΠΌ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования. ВоспроизвСдСниС процСсса для Ρ‚Π°ΠΊΠΈΡ… сигналов, ΠΊΠ°ΠΊ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ произвСдСния, ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большС ΡˆΡƒΠΌΠ°, Ρ‡Π΅ΠΌ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ.Для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ сигналов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ проСктирования Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° scipy.signal. Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ – слоТная Ρ‚Π΅ΠΌΠ°, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ матСматичСской ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ сигналов Π΄Π°Π΅Ρ‚ ΠΊΠ½ΠΈΠ³Π° Π‘Ρ‚ΠΈΠ²Π΅Π½Π° Π‘ΠΌΠΈΡ‚Π° The Scientist and Engineer's Guide to Digital Signal Processing.

ДискрСтныС косинусныС ΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ прСобразования

Π’ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ scipy.fft Π±Ρ‹Π» Π±Ρ‹ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π±Π΅Π· рассмотрСния дискрСтного косинусного (DCT) ΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ (DST) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Π­Ρ‚ΠΈ Π΄Π²Π° прСобразования тСсно связаны с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π€ΡƒΡ€ΡŒΠ΅, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ SciPy ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ dct() ΠΈ dst(). Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с названиями, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ с i ΠΈ n, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ соотвСтствСнно ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΈ n-ΠΌΠ΅Ρ€Π½Ρ‹Π΅ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ говоря, DCT ΠΈ DST – ΠΊΠ°ΠΊ Π±Ρ‹ Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ прСобразования Π€ΡƒΡ€ΡŒΠ΅, вычисляСмыС ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ быстрСС, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ Π² памяти понятиС Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π§Π΅Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ симмСтричны ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оси y, Π° Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ – ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это наглядно, взглянитС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‡Π΅Ρ‚Π½ΠΎΠΉ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ – соотвСтствСнно квадратичная ΠΈ кубичСская Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‡Π΅Ρ‚Π½ΠΎΠΉ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ – соотвСтствСнно квадратичная ΠΈ кубичСская Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΈ расчСтС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ прСобразования Π€ΡƒΡ€ΡŒΠ΅ (DFT) прСдполагаСтся, Ρ‡Ρ‚ΠΎ функция, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит вычислСниС, повторяСтся бСсконСчно. Однако прСобразования DCT ΠΈ DST ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ сигнала. ΠšΠΎΡΠΈΠ½ΡƒΡΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (DCT) ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция продлСваСтся Π·Π° счСт Ρ‡Π΅Ρ‚Π½ΠΎΠΉ симмСтрии, Π° для DST – Π·Π° счСт Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠΉ симмСтрии.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ прСдставляСт, ΠΊΠ°ΠΊ функция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π² бСсконСчности.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ дискрСтного сигнала Π² случаС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ, косинусного ΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π€ΡƒΡ€ΡŒΠ΅
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ дискрСтного сигнала Π² случаС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ, косинусного ΠΈ ΡΠΈΠ½ΡƒΡΠΎΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π€ΡƒΡ€ΡŒΠ΅

На ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ повторяСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. DCT ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, Π° DST – ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ симмСтрия DST ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сущСствСнным Ρ€Π°Π·Ρ€Ρ‹Π²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ вносит высокочастотныС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ частотном спСктрС. Если Π½Π΅Ρ‚ свСдСний ΠΎ симмСтрии сигнала, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DCT.

Π•ΡΡ‚ΡŒ мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования DCT Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… высокой скорости прСобразования Π€ΡƒΡ€ΡŒΠ΅, Π² Ρ‚ΠΎΠΌ числС Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… JPEG, MP3 ΠΈ WebM.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅ – это мощная концСпция, примСняСмая Π² самых Ρ€Π°Π·Π½Ρ‹Ρ… областях – ΠΎΡ‚ чистой ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π΄ΠΎ Π°ΡƒΠ΄ΠΈΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ финансов. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрСли:

  • ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅
  • ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· scipy.fft
  • Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ частотной областями
  • ΠΊΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ частотный спСктр сигнала
  • ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rfft(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π΅Ρ‰Π΅ быстрСС

ΠœΡ‹ рассмотрСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡƒΡŽ идСю, Π½ΠΎ Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… вопросах, связанных с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π€ΡƒΡ€ΡŒΠ΅ ΠΈ прСдставлСниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ частотных спСктров.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ курс ΠΏΠΎ Python ΠΎΡ‚ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ программиста».

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

ΠœΠ•Π ΠžΠŸΠ Π˜Π―Π’Π˜Π―

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π»ΠΈ Π²Π°ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ рассмотрСния прСобразования Π€ΡƒΡ€ΡŒΠ΅ для Π΄Ρ€ΡƒΠ³ΠΈΡ… практичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? ΠŸΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях.

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Go-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ
ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования
Senior Java Developer
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π‘#
ΠΎΡ‚ 200000 RUB Π΄ΠΎ 400000 RUB

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•