Я пытаюсь создать программное обеспечение, чтобы использовать его для анализа данных, которые у меня есть на файле. У меня нет информации о частоте дискретизации, при которой данные были захвачены. Есть ли способ найти частоту моего сигнала, учитывая, что я могу играть с частотой дискретизации моего сигнала? Я попробовал написать код, чтобы найти БПФ синусоидальной волны с частотой 100 Гц, но когда я рисую fft моего сигнала, частота сигнала не соответствует частоте на оси fft. Вот полный код для вашей справки.fft биосигнала неизвестной частотыin python
from scipy import *
import numpy as np
import matplotlib.pyplot as plt
from Tkinter import *
import tkFileDialog
class FFTGUI(object):
def __init__(self, master):
self.master = master
self.layout_init(self.master)
def layout_init(self, master):
self.master = master
self.title_label = Label(self.master, text="SIGNAL ANALYSER", font="-weight bold")
self.title_label.grid(row=0, column=0, columnspan=2)
self.load_data_file_label = Label(self.master, text="LOAD DATA: ")
self.load_data_file_label.grid(row=1, column=0)
self.load_data_file_button = Button(self.master, text="LOAD",command = self.askopenfilename)
self.load_data_file_button.grid(row=1, column=1)
self.no_sample_label = Label(self.master, text="ENTER THE NUMBER OF SAMPLE POINTS: ")
self.no_sample_label.grid(row=2, column=0)
self.no_sample_entry = Entry(self.master, text="Enter Sample")
self.no_sample_entry.grid(row=2, column=1)
self.sample_spacing_label = Label(self.master, text="ENTER THE SAMPLING SPACE (s):")
self.sample_spacing_label.grid(row=3, column=0)
self.sample_spacing_entry = Entry(self.master, text="ENTER SPACE")
self.sample_spacing_entry.grid(row=3, column=1)
self.plot_graph_button = Button(self.master, text="PLOT", command = self.fft_data_plot)
self.plot_graph_button.grid(row=4, columnspan =2)
def askopenfilename(self):
# get filename
self.filename = tkFileDialog.askopenfilename()
# open file on your own
#~ print self.filename
if self.filename:
return open(self.filename, 'r')
def selectfile(self):
self.file = tkFileDialog.askopenfilename(parent=root,mode='rb',title='Choose a file')
if self.file != None:
self.f= np.loadtxt(file, delimiter='\t', skiprows=0, unpack=True)
#~ print type(f)
return f
def fft_data_plot(self):
N = int(self.no_sample_entry.get())
SAMPLE_SPACE_T = int(self.sample_spacing_entry.get())
T = 1.0/SAMPLE_SPACE_T
lines = [line.rstrip('\n') for line in open(self.filename)]
lines = [float(i) for i in lines]
#~ print lines
yf = fft(lines)
yf_power = np.abs(yf)**2
energy_yf = 0
for i in range(N/2):
energy_yf += yf_power[i]
#~ print energy_yf
energy_nor_yf = []
for i in range(N/2):
temp_energy_nor_yf = (yf_power[i]/energy_yf)*100
energy_nor_yf.append(temp_energy_nor_yf)
#~ print energy_nor_yf
plt.subplot(3,1,1)
plt.plot(lines)
plt.subplot(3,1,2)
plt.plot(np.abs(yf))
plt.ylim([0,100])
plt.xlim([0,N/2])
plt.subplot(3,1,3)
plt.plot(energy_nor_yf)
plt.ylim([0, max(energy_nor_yf)])
plt.show()
root = Tk()
FFTGUI(root)
root.mainloop()
Файл Я пытаюсь загрузить и проанализировать, можно найти здесь: http://www.filedropper.com/cosine100hz Этот файл представляет собой простой косинусоида, что я сгенерировал на первенствует и полученных данных на косинус волны была добавлена в текстовый файл, так что его можно было бы построить и проанализировать. К сожалению, я, похоже, не знаю, в чем проблема, и почему я не получаю желаемую частоту. Буду признателен за вашу помощь. Спасибо
Я не вижу часть вашего кода, отображающего мощность * по сравнению с частотой *. Вы рисуете его по сравнению с номером компонента, не так ли? – abukaj
Привет, abukaj, Да, я рисую против номера компонента. – Usama
Как вы определили, какой компонент составляет 100 Гц? – abukaj