A análise espectral baseia-se na ideia de usar “somas trigonométricas” de senos e cossenos para descrever fenômenos periódicos. Se a série é periódica, a expansão do sinal é chamada de Série de Fourier. Se é aperiódica, a expansão é denominada Transformada de Fourier (ou Integral de Fourier) [1].
A Transformada de Fourier fornece a decomposição do sinal em ondas de frequências distintas, produzindo o espectro. Por ele é possível visualizar o sinal em bandas de frequências, facilitando a análise. Constatam-se, assim, quais frequências e ruídos compõem o sinal [2].
O software Octave possui função interna para converter o domínio do tempo de um sinal para o domínio da frequência, tratando-se da Transformada rápida de Fourier (FFT), que pode ser acionada por fft() [3]. Opcionalmente, fftshift() move a frequência central da FFT para o centro do vetor, facilitando a visualização e análise do espectro [4]. No Python, encontramos as operações equivalentes no numpy (confira abaixo).
O espectrograma corresponde ao gráfico de duas dimensões que relaciona o tempo e a frequência do sinal. Quando a ele se acrescenta a terceira dimensão, como a correspondente à amplitude do sinal (medida em dB), relacionando-a a cores, é possível constatar a energia do sinal ao longo do tempo e respectivas frequências, o que pode ser útil, por exemplo, para esteganografia ou análises de EEG, erupções vulcânicas, terremotos etc. a partir de seus sinais característicos [5] [6].
[<matplotlib.lines.Line2D at 0x7f2110263850>]
[0.00000e+00 1.25000e-04 2.50000e-04 ... 9.99625e-01 9.99750e-01 9.99875e-01] <class 'numpy.ndarray'> 8000
[<matplotlib.lines.Line2D at 0x7f2110087250>]
3000
<ipython-input-11-89a36e3a393a>:9: UserWarning: amplitude_to_db was called on complex input so phase information will be discarded. To suppress this warning, call amplitude_to_db(np.abs(S)) instead. D = librosa.amplitude_to_db(librosa.stft(y), ref=np.max)
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Sep 13 15:13:57 2007',
'__version__': '1.0',
'__globals__': [],
'fs': array([[4000]], dtype=uint16),
'X1': array([[-0.12512207, -0.08862305, -0.01721191, ..., 0. ,
0.0020752 , 0.0177002 ],
[-0.00354004, -0.00024414, -0.00146484, ..., 0.00109863,
-0.00231934, -0.00146484],
[ 0.00842285, -0.0012207 , 0.00793457, ..., -0.02294922,
-0.01330566, 0.01647949],
...,
[ 0.00769043, -0.00183105, 0.00244141, ..., 0.00146484,
0.00036621, -0.00048828],
[-0.00109863, -0.00793457, -0.00158691, ..., 0.09753418,
-0.05407715, -0.03918457],
[-0.00183105, -0.02844238, 0.01757812, ..., 0.00537109,
-0.01123047, -0.00512695]]),
'X2': array([[-0.04553223, -0.03430176, -0.06079102, ..., 0.0144043 ,
0.01330566, -0.01416016],
[ 0.02624512, 0.00402832, -0.01416016, ..., 0.01794434,
-0.03369141, -0.02392578],
[-0.02441406, -0.02355957, 0.00256348, ..., 0.02392578,
-0.00280762, 0.00476074],
...,
[ 0.03479004, -0.00915527, -0.02575684, ..., 0.01782227,
-0.01525879, -0.03393555],
[ 0.04272461, 0.02441406, -0.03625488, ..., 0.0255127 ,
0.04675293, 0.03222656],
[-0.04907227, -0.0246582 , 0.03857422, ..., 0.0369873 ,
0.02990723, 0.02490234]])}4000
Nenhum comentário:
Postar um comentário