0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

さっとスペクトル分析

Last updated at Posted at 2021-08-09

波形データだけではわかりにくい

音声はマイクを振動は加速度センサを使えば取得できてそれぞれのセンサもかなり安価に入手することができます。そうするとIoTなどでもいろいろとデータが集められるようになりますが集めたデータから有用な情報を得るためには、得られたデータを分析しなければなりません。音声などのような波形データを分析する際に用いられることが多いスペクトル分析(周波数の分布を求める)をPythonを使って求めてみます。

ライブラリ

  • Numpy

必要な情報

波形データを取得するときに設定するサンプリング周波数(1秒間にどれだけの頻度で値を取得するか)とサンプリング時間(取得している時間)を控えておきましょう。

コード

とりあえずテスト用の波形データをつくってみる

ここでは30[Hz]と20[Hz]の波形の合成波をつくっています。

wave.py
import numpy as np
import math
import matplotlib.pyplot as plt

#データ生成
x=np.arange(0,sampling_time,1/sampling_rate)
y=np.sin(2*30*np.pi*x)+np.sin(2*20*np.pi*x)
plt.figure(figsize=(28,6))
plt.plot(x,y)
plt.show()

wave.png

これをサンプリング周波数を1000[Hz]、サンプル時間を2[s]として分析してみます。

analyze.py
sampling_rate=1000
sampling_time=2.0
#FFT関連計算
#sampling rateとsampling timeがわかっていれば波形データからスペクトル分析をできる
fft_result=np.fft.fft(y)
n=int(sampling_rate*sampling_time)#データ数
freq=np.fft.fftfreq(n, d=1/sampling_rate)#周波数
Amp = np.abs(fft_result/(n/2)) # 振幅

plt.figure(figsize=(28,6))
plt.plot(freq[1:int(n/2)],Amp[1:int(n/2)])
plt.xlim(0,100)
plt.show()

spectrum.png

このように分析結果も20[Hz]と30[Hz]となっており生成したデータで設定した周波数として取得できました。
このような感じでとりあえず簡単に周波数分布を調べられます。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?