MC, 2025
Ilustracja do artykułu: Fftfreq – jak wykorzystać go w analizie częstotliwościowej?

Fftfreq – jak wykorzystać go w analizie częstotliwościowej?

Jeśli kiedykolwiek zastanawiałeś się, jak przeprowadzić analizę częstotliwościową w Pythonie, na pewno natknąłeś się na termin fftfreq. Jest to jedna z podstawowych funkcji wykorzystywanych w analizach częstotliwościowych, zwłaszcza przy użyciu transformacji Fouriera. W tym artykule zgłębimy tajniki tej funkcji, pokażemy przykłady jej użycia oraz wyjaśnimy, jak można ją wykorzystać w różnych dziedzinach, takich jak analiza sygnałów czy obróbka danych.

Co to jest fftfreq?

fftfreq to funkcja dostępna w bibliotece NumPy w Pythonie, która służy do generowania wektora częstotliwości w przestrzeni częstotliwościowej po przeprowadzeniu transformacji Fouriera. Transformacja Fouriera jest podstawowym narzędziem wykorzystywanym do analizy sygnałów, ponieważ pozwala na przedstawienie sygnału w dziedzinie częstotliwości, a nie w czasie. Aby móc zinterpretować wynik tej transformacji, musimy wiedzieć, jakie częstotliwości odpowiadają poszczególnym współczynnym w tej dziedzinie. I tu właśnie przychodzi nam z pomocą fftfreq!

Funkcja fftfreq generuje tablicę częstotliwości, które odpowiadają poszczególnym indeksom wyniku transformacji Fouriera. Dzięki niej możemy poznać, jaka częstotliwość jest przypisana do konkretnego współczynnika w przekształconym sygnale.

Jak działa fftfreq?

Aby zrozumieć działanie funkcji fftfreq, musimy najpierw zrozumieć, czym jest transformacja Fouriera i jak zmienia sygnał. Przy transformacji Fouriera analizujemy sygnał, rozkładając go na składowe częstotliwościowe, które mogą być reprezentowane jako suma sinusoid o różnych częstotliwościach. W wyniku transformacji uzyskujemy współczynniki, które odpowiadają intensywności tych częstotliwości w sygnale.

Funkcja fftfreq przyjmuje dwa główne argumenty:

  • n – liczba próbek w sygnale (czyli długość sygnału).
  • d – czasowy odstęp pomiędzy kolejnymi próbkami (czyli tzw. próbkowanie sygnału).

Na podstawie tych parametrów fftfreq generuje wektor częstotliwości, które odpowiadają współczynnym wyniku transformacji Fouriera. Częstotliwości te są wyrażone w jednostkach odwrotności czasu (Hz), gdzie 1 Hz oznacza jedną cykliczną zmianę na sekundę.

Przykład użycia fftfreq w Pythonie

Aby zobaczyć, jak działa funkcja fftfreq, przygotujmy prosty przykład. Załóżmy, że mamy sygnał o 8 próbkach i czas pomiędzy próbkami wynosi 0,1 sekundy. Chcemy znaleźć odpowiadające im częstotliwości w wyniku transformacji Fouriera. Oto jak można to zrobić:

import numpy as np

# Parametry sygnału
n = 8  # liczba próbek
d = 0.1  # odstęp czasu między próbkami w sekundach

# Generowanie częstotliwości
frequencies = np.fftfreq(n, d)

# Wyświetlenie wyników
print(frequencies)

Wynik tego kodu to:

[ 0.   1.   2.   3.  -4.  -3.  -2.  -1. ]

Jak widać, fftfreq zwrócił wektor częstotliwości, który odpowiada poszczególnym współczynnym w wyniku transformacji Fouriera. Częstotliwości te zaczynają się od 0 Hz, a następnie rosną do wartości dodatnich, a po osiągnięciu połowy częstotliwości Nyquista (czyli połowy częstotliwości próbkowania) przechodzą w wartości ujemne. Dzieje się tak, ponieważ w wyniku transformacji Fouriera uzyskujemy symetrię częstotliwościową – częstotliwości ujemne odpowiadają częstotliwościom wyższej harmonii, które są lustrzanym odbiciem częstotliwości dodatnich.

Interpretacja wyników fftfreq

Interpretacja wyników fftfreq może być nieco myląca na początku, szczególnie jeśli nie mamy doświadczenia z analizą częstotliwościową. Jednak z czasem staje się to bardzo proste. Zauważmy, że częstotliwości, które otrzymujemy, są uporządkowane od najniższej (0 Hz) do najwyższej (częstotliwość Nyquista). Jeśli przeprowadzamy transformację Fouriera na sygnale dyskretnym, to zazwyczaj interesują nas tylko dodatnie częstotliwości (częstotliwości ujemne są po prostu lustrzanym odbiciem częstotliwości dodatnich i nie wnoszą nowych informacji).

Warto również zauważyć, że częstotliwości, które są zwracane przez fftfreq, są w jednostkach Hz, czyli cykli na sekundę. Jeśli nasz sygnał jest próbkowany z określoną częstotliwością, to częstotliwości Nyquista będą wynosiły połowę tej częstotliwości próbkowania.

fftfreq przykłady: zastosowanie w analizie sygnałów

Teraz, gdy mamy już podstawowe zrozumienie tego, jak działa funkcja fftfreq, możemy przejść do przykładów zastosowań w praktyce. Jednym z najczęstszych zastosowań tej funkcji jest analiza sygnałów. Na przykład, w analizie audio możemy użyć fftfreq do uzyskania częstotliwości, które odpowiadają poszczególnym składowym sygnału dźwiękowego.

Załóżmy, że mamy próbkę dźwięku, którą chcemy przeanalizować. Oto jak można to zrobić w Pythonie:

import numpy as np
import matplotlib.pyplot as plt

# Parametry sygnału
n = 1000  # liczba próbek
d = 1/1000  # czas próbkowania (1 ms)

# Tworzenie sztucznego sygnału (sinusoida o częstotliwości 50 Hz)
t = np.arange(0, n) * d
signal = np.sin(2 * np.pi * 50 * t)

# Transformacja Fouriera
fft_result = np.fft.fft(signal)

# Uzyskanie częstotliwości
frequencies = np.fft.fftfreq(n, d)

# Wykres
plt.plot(frequencies[:n // 2], np.abs(fft_result)[:n // 2])
plt.xlabel('Częstotliwość (Hz)')
plt.ylabel('Amplituda')
plt.title('Spektrum częstotliwości sygnału')
plt.show()

W tym przykładzie tworzymy sztuczną sinusoidę o częstotliwości 50 Hz, a następnie obliczamy jej transformację Fouriera. Wykres przedstawia widmo częstotliwościowe, gdzie oś X reprezentuje częstotliwości (uzyskane za pomocą fftfreq), a oś Y przedstawia amplitudę sygnału dla tych częstotliwości. Dzięki temu wykresowi możemy zobaczyć, które częstotliwości dominują w naszym sygnale.

Podsumowanie

Funkcja fftfreq w Pythonie jest niezwykle przydatnym narzędziem w analizie częstotliwościowej. Dzięki niej możemy łatwo uzyskać informacje o częstotliwościach odpowiadających współczynnym w wyniku transformacji Fouriera. Jest to kluczowe w wielu dziedzinach, takich jak analiza sygnałów, przetwarzanie dźwięku, obrazów czy nawet w analizie danych finansowych. Zrozumienie tej funkcji i jej zastosowania pozwala na efektywną pracę z danymi w dziedzinie częstotliwości. Mamy nadzieję, że ten artykuł pomógł Ci lepiej zrozumieć działanie fftfreq i zainspirował do dalszego zgłębiania tematu analizy częstotliwościowej w Pythonie!

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: