Можно ли использовать np.fft.fft для выбора коэффициентов Фурье в один момент времени и на определенной частоте? ⇐ Python
Можно ли использовать np.fft.fft для выбора коэффициентов Фурье в один момент времени и на определенной частоте?
Я впервые использую Stack Exchange и являюсь студентом бакалавриата, работающим над обработкой сигналов sEEG с использованием np.fft.fft.
Я пытаюсь применить np.fft.fft к двумерному массиву данных формы (98, 1024), где 98 — количество попыток, а 1024 — частота дискретизации в Гц. Я пытаюсь найти коэффициенты Фурье на 500 миллисекундах (соответствует 512-й выборке) на частоте 10 Гц. Но, насколько я понимаю, np.ftt.ftt возвращает массив формы (98, 1024), где 98 — это снова количество испытаний, а 1024 — теперь частоты. Итак, если меня интересуют 10 Гц, я могу написать этот код: (поправьте меня, если я неправильно понимаю)
after_fft = np.fft.fft(timeSeries, axis=1) частота_интереса = after_fft[:, 10] Но как я могу отслеживать информацию о времени?
[*]
Я адаптировал код, который нашел в Интернете (https://github.com/emma-holmes/Phase-Co ... herence.py), чтобы включить еще один параметр для timePoint, но Я понял, что параметр timePoint некуда поставить.
[*]
Я попытался сократить входные данные до 512-го образца, чтобы представить интересующие меня 500 мс, выполнив data = data[:,511, np.newaxis] и передав его в функцию ниже. Однако в течение заданного времени выходные данные функции (ПК) не менялись в зависимости от частоты, поэтому этот подход тоже не работал.
[*]
Я искал функции в Python, которые возвращают трехмерный массив с размерностями, представляющими (количество испытаний, моменты времени, частоты). В этом случае я мог бы использовать timePoint для индексации в after_fft, а затем индексировать в конкретный частота интереса.
Вот код ниже с некоторыми операторами печати, которые я добавил, чтобы лучше понять структуры данных. Огромное спасибо за помощь!
def PhaseCoherenceGivenTime(freq, timeSeries, FS, timePoint=None): # Получить параметры входных данных nMeasures = np.shape(timeSeries)[0] nSamples = np.shape(timeSeries)[1] nSecs = nSamples / FS print('Количество измерений =', nMeasures) print('Количество временных выборок =', nSamples, '=', nSecs, 'секунды') # Вычислить БПФ для каждого измерения (спектр — это частота х измерений) spect = np.fft.fft(timeSeries, axis=1) print("Spect.shape: ", spect.shape) # Нормализовать по амплитуде спектр = спектр / абс(спект) # Найдите значения спектра для интересующего элемента частоты частотаRes = 1/нс foibin = round(freq / freqRes + 1) - 1 print('Фойбин =', фоибин) spectFoi = spect[:, foibin] print("spectFoi: ", spectFoi) print("spectFoi.shape: ", spectFoi.shape) # Найдите отдельные фазовые углы для каждого измерения на интересующей частоте angularsFoi = np.arctan2(spectFoi.imag, spectFoi.real) # PC — среднеквадратичное значение сумм косинусов и синусов углов. PC = np.sqrt((np.sum(np.cos(anglesFoi)))**2 + (np.sum(np.sin(anglesFoi)))**2) / np.shape(anglesFoi)[0] # Распечатываем значение Распечатать('----------------------------------') print('Значение фазовой когерентности = ' + str("{0:.3f}".format(PC))) углы возвратаFoi, ПК
Я впервые использую Stack Exchange и являюсь студентом бакалавриата, работающим над обработкой сигналов sEEG с использованием np.fft.fft.
Я пытаюсь применить np.fft.fft к двумерному массиву данных формы (98, 1024), где 98 — количество попыток, а 1024 — частота дискретизации в Гц. Я пытаюсь найти коэффициенты Фурье на 500 миллисекундах (соответствует 512-й выборке) на частоте 10 Гц. Но, насколько я понимаю, np.ftt.ftt возвращает массив формы (98, 1024), где 98 — это снова количество испытаний, а 1024 — теперь частоты. Итак, если меня интересуют 10 Гц, я могу написать этот код: (поправьте меня, если я неправильно понимаю)
after_fft = np.fft.fft(timeSeries, axis=1) частота_интереса = after_fft[:, 10] Но как я могу отслеживать информацию о времени?
[*]
Я адаптировал код, который нашел в Интернете (https://github.com/emma-holmes/Phase-Co ... herence.py), чтобы включить еще один параметр для timePoint, но Я понял, что параметр timePoint некуда поставить.
[*]
Я попытался сократить входные данные до 512-го образца, чтобы представить интересующие меня 500 мс, выполнив data = data[:,511, np.newaxis] и передав его в функцию ниже. Однако в течение заданного времени выходные данные функции (ПК) не менялись в зависимости от частоты, поэтому этот подход тоже не работал.
[*]
Я искал функции в Python, которые возвращают трехмерный массив с размерностями, представляющими (количество испытаний, моменты времени, частоты). В этом случае я мог бы использовать timePoint для индексации в after_fft, а затем индексировать в конкретный частота интереса.
Вот код ниже с некоторыми операторами печати, которые я добавил, чтобы лучше понять структуры данных. Огромное спасибо за помощь!
def PhaseCoherenceGivenTime(freq, timeSeries, FS, timePoint=None): # Получить параметры входных данных nMeasures = np.shape(timeSeries)[0] nSamples = np.shape(timeSeries)[1] nSecs = nSamples / FS print('Количество измерений =', nMeasures) print('Количество временных выборок =', nSamples, '=', nSecs, 'секунды') # Вычислить БПФ для каждого измерения (спектр — это частота х измерений) spect = np.fft.fft(timeSeries, axis=1) print("Spect.shape: ", spect.shape) # Нормализовать по амплитуде спектр = спектр / абс(спект) # Найдите значения спектра для интересующего элемента частоты частотаRes = 1/нс foibin = round(freq / freqRes + 1) - 1 print('Фойбин =', фоибин) spectFoi = spect[:, foibin] print("spectFoi: ", spectFoi) print("spectFoi.shape: ", spectFoi.shape) # Найдите отдельные фазовые углы для каждого измерения на интересующей частоте angularsFoi = np.arctan2(spectFoi.imag, spectFoi.real) # PC — среднеквадратичное значение сумм косинусов и синусов углов. PC = np.sqrt((np.sum(np.cos(anglesFoi)))**2 + (np.sum(np.sin(anglesFoi)))**2) / np.shape(anglesFoi)[0] # Распечатываем значение Распечатать('----------------------------------') print('Значение фазовой когерентности = ' + str("{0:.3f}".format(PC))) углы возвратаFoi, ПК
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Математическое выражение преобразования Фурье, используемое в numpy.fft.fft
Anonymous » » в форуме Python - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Что вызывает этот странный прыжок на этих фазовых графах коэффициентов Фурье?
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-