РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
174 of 541 menu

Функция fftfreq

Функция fftfreq из модуля numpy.fft возвращает массив частот, соответствующих элементам выходного массива дискретного преобразования Фурье. Первый параметр n задаёт длину окна преобразования, второй параметр d определяет шаг дискретизации (интервал между отсчётами). Функция возвращает одномерный массив частот, где положительные частоты расположены в первой половине, а отрицательные - во второй.

Синтаксис

np.fft.fftfreq(n, d=1.0)

Параметры:

  • n - длина окна преобразования (целое число);
  • d - шаг дискретизации (float, по умолчанию 1.0).

Возвращаемое значение:

  • одномерный массив ndarray частот длиной n.

Пример

Вычислим частоты для массива из 8 отсчётов с шагом дискретизации 1 секунда:

import numpy as np freqs = np.fft.fftfreq(8) print(freqs)

Результат выполнения кода:

[0. 0.125 0.25 0.375 -0.5 -0.375 -0.25 -0.125]

В результате получаем частоты от 0 до 0.5 Гц с положительным знаком, затем отрицательные частоты от -0.5 до -0.125 Гц.

Пример

Изменим шаг дискретизации, чтобы получить физические частоты для сигнала с частотой дискретизации 1000 Гц (шаг 0.001 секунды):

import numpy as np sample_rate = 1000 n = 1024 freqs = np.fft.fftfreq(n, d=1/sample_rate) print(freqs[:10]) print(freqs[-10:])

Результат выполнения кода:

[0. 0.9765625 1.953125 2.9296875 3.90625 4.8828125 5.859375 6.8359375 7.8125 8.7890625] [-502.9296875 -501.953125 -500.9765625 -500. -499.0234375 -498.046875 -497.0703125 -496.09375 -495.1171875 -494.140625]

Положительные частоты растут до 500 Гц, затем идут отрицательные частоты, что соответствует теореме Найквиста.

Пример

Используем fftfreq вместе с fft для визуализации спектра сигнала:

import numpy as np import matplotlib.pyplot as plt sample_rate = 100 t = np.linspace(0, 1, sample_rate, endpoint=False) signal = np.sin(2 * np.pi * 10 * t) + 0.5 * np.sin(2 * np.pi * 25 * t) fft_vals = np.fft.fft(signal) freqs = np.fft.fftfreq(sample_rate, d=1/sample_rate) magnitude = np.abs(fft_vals) print("First 5 frequencies:", freqs[:5]) print("First 5 magnitudes:", magnitude[:5])

Результат выполнения кода:

First 5 frequencies: [0. 1. 2. 3. 4.] First 5 magnitudes: [6.66133815e-16 5.00000000e+01 2.28997518e-14 2.17622783e-14 7.73231121e-14]

На частотах 10 и 25 Гц будут пики амплитуды, соответствующие частотам синусоид в сигнале.

Пример

Для чётного количества отсчётов частота Найквиста равна 0.5 / d, а для нечётного - меньше. Сравним результаты:

import numpy as np print("Even n=6:") print(np.fft.fftfreq(6)) print("\nOdd n=7:") print(np.fft.fftfreq(7))

Результат выполнения кода:

Even n=6: [ 0. 0.16666667 0.33333333 -0.5 -0.33333333 -0.16666667] Odd n=7: [ 0. 0.14285714 0.28571429 0.42857143 -0.42857143 -0.28571429 -0.14285714]

Для нечётного n частота Найквиста не достигается, а максимальная положительная частота меньше 0.5.

Смотрите также

  • функцию rfftfreq,
    которая возвращает частоты для действительного преобразования Фурье
  • функцию fftshift,
    которая смещает нулевую частоту в центр спектра
  • функцию ifftshift,
    которая выполняет обратное смещение для fftshift
  • функцию fft,
    которая выполняет одномерное дискретное преобразование Фурье
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить