04-Zenebona

Vizsgáljuk meg a ../data/zenebona nevű file-ban található zajos adatsor Fourier-spektrumát. Határozzuk meg azokat a pozitív frekvenciákat, melyek dominánsan szerepelnek ! Az file két oszlopot tartalmaz: az első oszlop az idő, a második pedig a jel.

  • Készíts ábrát a jel alakjáról!
  • Készíts ábrát a jel Fourier-transzformáltjáról!
  • Határozd meg a Fourier-transzformált domináns frekvenciáit, és jelöld azokat az ábrán! Például tegyünk esetlegesen előforduló csúcs(ok) tetejére valamilyen jelet!

Megoldás

Előszöt betöltjük a szükséges csomagokat

In [1]:
%pylab inline
from numpy.fft import *  
Populating the interactive namespace from numpy and matplotlib

Majd megnyitjuk az adatfájlt, és ábrázoljuk az adatokat.

In [2]:
adatok = loadtxt("../data/zenebona.txt")
plot(adatok[:,0], adatok[:,1])
xlabel("idö", size=12)
ylabel("Jelerösség", size=12)
title("Az adatfájl tartalma", size=18, y=1.05)
Out[2]:
<matplotlib.text.Text at 0x7f55064c2320>

Ezután elvégezzük a Fourier-transzformációt, és a transzformált jelben megkeressük a domináns frekvenciákat, ezeket eltároljuk egy új listában

In [3]:
Fjel = fft(adatok[:,1])
freq = fftfreq(len(adatok[:,0]), d=adatok[1,0] - adatok[0,0])

dom = [[], []]
for i in range(len(abs(Fjel))):
    if abs(Fjel)[i] > 300: # Azt tekintjük dominánsnak, aminek a jele 300-nál nagyobb.
        dom[0] += [abs(freq)[i]]
        dom[1] += [abs(Fjel)[i]]
dom[0]
Out[3]:
[13.686300000000001,
 41.957999999999998,
 41.957999999999998,
 13.686300000000001]

Tehát, a domináns frekvenciák a 0,0957 Hz és a 0,2934 Hz. Végül ábrázoljuk a transzformált függvényt, és a domináns frekvenciák helyét.

In [4]:
plot(abs(freq), abs(Fjel), label="A jel transzformáltja")
plot(dom[:][0], dom[:][1], "ro", label="A domináns frekvenciák")
xlabel("frekvencia", size=12)
ylabel("transzformált jelerösség", size=12)
title("A transzformált jel", size=18, y=1.05)
legend(loc=(1, 0.81))
Out[4]:
<matplotlib.legend.Legend at 0x7f550609ea58>