チュートリアル:信号の周波数をリアルタイムで可視化する
DSPモジュールのFFTクラスを使用して、入力オーディオデータをスペクトラムアナライザーとして表示する方法を学びます。ウィンドウ関数を使用する利点を理解します。
レベル:中級
プラットフォーム:Windows, macOS, Linux
クラス: dsp::FFT, dsp::WindowingFunction, デシベル
はじめる
This tutorial leads on from チュートリアル高速フーリエ変換. If you haven't done so already, you should read that tutorial first.
Download the demo project for this tutorial here: ピップ | ジップ. Unzip the project and open the first header file in the Projucer.
お使いのオペレーティングシステムが、マイクへのアクセス許可を要求する必要がある場合(現在、iOS、Android、macOS Mojave)、Projucerの関連するエクスポーターの下に対応するオプションを設定し、プロジェクトを再保存する必要があります。
If you need help with this step, see チュートリアルProjucerパート1:Projucerを始める.
The demo project
完成すると、デモプロジェクトは、入力されたオーディオデータを、周波数(x軸)と振幅(y軸)の2次元スペクト ルアナライザーとして表示します。画面に表示される値は1秒間に30回更新され、任意の時間枠のウィンドウは次のようになります:
Windowing functions
As seen in チュートリアル高速フーリエ変換 the Fast Fourier Transform allows us to convert a time domain signal to the frequency domain in order to process the individual frequency components of a certain signal.
しかし、フーリエ変換の限界は、オーディオ・アプリケーションのオーディオ・バッファ・ブロックのように、有限の時間間隔の間に適用される場合、変換は、問題の周波数の両側に新しい周波数成分が出現し始める、スペクトル・リークと呼ばれる現象が現れることである。これは、サンプリングされた信号部分が波形の自然な周期に収まらないことがあり、本質的に信号が切り捨てられるためです。
スペクトル漏れは、似たような周波数と似たような振幅を持つ2つの正弦波や、似たような周波数と似たような振幅を持つ2つの正弦波を分析するときに特に問題となる。正弦波の周波数と振幅が近い場合、漏れによって互いに区別がつかなくなることがある。一方、正弦波の周波数と振幅が遠い場合、最も強い成分からの漏れは、最も弱い成分の存在を覆い隠してしまう。
スペクトル漏洩の影響を減らすために、フーリエ変換を行う前に信号に窓関数を適用することができ、窓関数の種類によって出力への影響が異なります。以下に、JUCE DSPモジュールで利用可能ないくつかの窓とその特徴を示します:
- 長方形:最も低いダイナミックレンジ、最も高い解像度。ウィンドウなしと同等。
- ハミング良好なダイナミック・レンジ、良好な分解能。通常、狭帯域アプリケーションで使用される 。
- Hann:良好なダイナミック・レンジ、まずまずの解像度。通常、狭帯域のアプリケーションで使用される。
- ブラックマン:最高のダイナミックレンジ、最低の解像度。通常、広帯域アプリケーションで使用される。
Processing Audio Data
現在、私たちのアプリケーションは、入力されるオーディオ信号を表示も処理もしないので、FFTを実装することから始めましょう。
FFT Initialisation
In the アナライザーコンポーネント
class, start by declaring an enum as a public member to define useful constants for the FFT implementation:
列挙
{
fftOrder = 11, // [1]
fftSize = 1 << fftOrder, // [2]
スコープサイズ = 512 // [3]
};