Преобразование файлов Excel в Python для частоты - PullRequest
1 голос
/ 29 ноября 2011

По сути, у меня есть файлы Excel с напряжением в первом столбце и временем во втором.Я хочу найти период напряжений, так как он возвращает график напряжения по оси Y и времени по оси X с периодичностью, похожей на функцию синуса.

Чтобы найти частоту, которую я загрузил, мойФайл Excel для Python, так как я думаю, что это облегчит работу - может быть, я упустил кое-что, что упростит это.

Пока что в Python у меня есть:

import xlrd
import numpy as N
import numpy.fft as F
import matplotlib.pyplot as P

wb = xlrd.open_workbook('temp7.xls') #LOADING EXCEL FILE
wb.sheet_names()
sh = wb.sheet_by_index(0)

first_column = sh.col_values(1) #VALUES FROM EXCEL
second_column = sh.col_values(2) #VALUES FROM EXCEL

Теперь какя могу найти частоту от этого?

1 Ответ

1 голос
/ 29 ноября 2011

Я не уверен, сколько вы знаете о преобразовании Фурье, так что простите, если это слишком много фона.
Ваш сигнал не имеет «частоту», но он может рассматриваться как сумма многих частот. Преобразование Фурье скажет вам веса всех частот, которые составляют ваш сигнал. К сожалению, информация может быть потеряна при выборке из аналоговой (с непрерывным временем) в цифровую (с дискретным временем) области. Это накладывает ограничение на информацию, которую мы можем получить о частоте, а именно на то, что максимальный частотный компонент, который мы можем определить, связан с частотой дискретизации ( критерий Найквиста-Шеннона ):

fs > 2B

Где fs - ваша частота дискретизации (выборки / единица времени, обычно в Гц или что-то в этом роде), а B - максимальная частота вашего сигнала. Если ваш сигнал на самом деле имеет частоты выше B, они будут «совмещены» с некоторым значением ниже B.

Для решения вашей проблемы все, что вам нужно сделать, это:

x = N.array(first_column)
X = F.fft(x)

Теперь X - это представление вашего напряжения в частотной области. Соответствующая частотная ось покрывает [0, fs), основываясь на теореме отсчетов. Итак, что такое fs? Вам необходимо рассчитать это, посмотрев на число выборок, которые вы поделили на общую длительность вашего дискретизированного сигнала (отметьте здесь свои единицы измерения):

fs = len(second_column) / second_column[-1]

Обратите внимание, что это представление вашего сигнала также (вероятно) будет сложным, то есть каждая частота будет иметь соответствующую амплитуду и фазу.

Надеюсь, это поможет, и, надеюсь, я не охватил кучу вещей, которые вы уже знали.

...