2015-04-27 4 views
1

У меня есть набор data. Очевидно, он носит периодический характер. Я хочу узнать, какую частоту он использует, используя преобразование Фурье и запечатлеть его.Преобразование Фурье с питоном

Снимок сделан из моего, но это кажется не очень хорошим. enter image description here

Это соответствующий код, я не konw, почему он не:

import numpy 
from pylab import * 
from scipy.fftpack import fft,fftfreq 
import matplotlib.pyplot as plt 
dataset = numpy.genfromtxt(fname='data.txt',skip_header=1) 
t = dataset[:,0] 
signal = dataset[:,1] 
npts=len(t) 

FFT = abs(fft(signal)) 
freqs = fftfreq(npts, t[1]-t[0]) 
subplot(211) 
plot(t[:npts], signal[:npts]) 
subplot(212) 
plot(freqs,20*log10(FFT),',') 
xlim(-10,10) 
show() 

Мой вопрос: Поскольку исходные данные очень периодический вид, и я ожидаю увидеть, что в частоте область пика очень резкая; как я могу сделать пик приятнее?

+0

Что не так? что вы ожидали? –

+0

@PaulH Почему пик настолько широк, я вижу, что период исходных данных очень приятный. Как я могу сделать частоту более очевидной? – buzhidao

ответ

4

Это проблема анализа данных.

  • FFT работает со сложным числом, поэтому спектр симметричен на реальном вводе данных: ограничивается xlim(0,max(freqs)).
  • Период выборки не является хорошим: увеличение периода при сохранении того же общего количества входных точек приведет к лучшему спектру качества на этом примере.

EDIT. с:

dataset = numpy.genfromtxt(fname='data.txt',skip_header=1)[::30]; 
t,signal = dataset.T 
(...) 
plot(freqs,FFT) 
xlim(0,1) 
ylim(0,30)  

спектр

spectum

Для лучшего спектра качества, просто повторно захватить сигнал в течение долгого долгого времени (для красивых пиков), с частотой дискретизации 1 Гц, которая даст вам шкалу [0, 0.5 Гц] (см. критерий Найквиста).

+0

У меня есть свой первый момент, можете ли вы дать более подробное объяснение вашего второго пункта? следует заменить «t [1] -t [0]» на «10 * (t [1] -t [0])»? Это тоже не приятно. – buzhidao

+1

Просто проверка моего понимания. Частота выборки составляет $ 1/(30 * 0,005 с) = 6,67 Гц $, поэтому согласно критерию Найквиста. Эта гарантированная частота дискретизации позволяет восстановить информацию о сигнале с частотой $ f <6,67/2 = 3,33 Гц $. Поэтому мы должны нарисовать ось х от 0 до 3,4 Гц. – buzhidao

+1

Тем не менее, я до сих пор не понимаю магии, которую вы выбрали, меньше очков может заставить график выглядеть лучше, можете ли вы объяснить эту часть в своем ответе. Спасибо! – buzhidao

Смежные вопросы