Функция irfft
Функция irfft выполняет обратное вещественное быстрое преобразование Фурье над одномерным массивом. Она принимает массив частотных компонентов, полученный после прямого преобразования rfft, и восстанавливает исходный вещественный сигнал. Первым параметром передаётся массив комплексных или вещественных чисел, представляющих частотный спектр. Вторым параметром можно указать желаемую длину выходного сигнала. Третьим параметром задаётся ось, вдоль которой выполняется преобразование.
Синтаксис
np.irfft(a, [n, axis, norm])
Основные параметры
Функция irfft принимает следующие параметры:
- a: array_like - входной массив (частотный спектр)
- n: int, optional - длина выходного сигнала
- axis: int, optional - ось для преобразования (по умолчанию последняя)
- norm: str, optional - режим нормализации ('backward', 'ortho', 'forward')
Пример
Давайте выполним прямое вещественное преобразование Фурье, а затем восстановим исходный сигнал с помощью обратного преобразования:
import numpy as np
# Создаём вещественный сигнал
arr = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0])
print("Original signal:", arr)
# Прямое вещественное преобразование Фурье
spectrum = np.fft.rfft(arr)
print("Spectrum:", spectrum)
# Обратное вещественное преобразование Фурье
restored = np.fft.irfft(spectrum)
print("Restored signal:", restored)
Результат выполнения кода:
Original signal: [1. 2. 3. 4. 5. 6. 7. 8.]
Spectrum: [36. +0.j -4. +9.65685425j -4. +4.j
-4. +1.65685425j -4. +0.j ]
Restored signal: [1. 2. 3. 4. 5. 6. 7. 8.]
Пример
Используем параметр n для задания длины выходного сигнала, отличной от длины исходного:
import numpy as np
# Исходный сигнал
arr = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
print("Original:", arr)
# Прямое преобразование
spectrum = np.fft.rfft(arr)
# Восстанавливаем сигнал длиной 8 (интерполяция)
restored_long = np.fft.irfft(spectrum, n=8)
print("Restored length 8:", restored_long)
# Восстанавливаем сигнал длиной 3 (усечение)
restored_short = np.fft.irfft(spectrum, n=3)
print("Restored length 3:", restored_short)
Результат выполнения кода:
Original: [1. 2. 3. 4. 5.]
Restored length 8: [1. 1.5 2. 2.5 3. 3.5 4. 4.5]
Restored length 3: [1. 2. 3.]
Пример
Применение irfft для двумерного массива вдоль различных осей:
import numpy as np
# Создаём двумерный массив
arr = np.array([[1.0, 2.0, 3.0, 4.0],
[5.0, 6.0, 7.0, 8.0]])
print("Original 2D array:\n", arr)
# Преобразование по строкам (ось 1)
spectrum_rows = np.fft.rfft(arr, axis=1)
restored_rows = np.fft.irfft(spectrum_rows, axis=1)
print("Restored along rows:\n", restored_rows)
# Преобразование по столбцам (ось 0)
spectrum_cols = np.fft.rfft(arr, axis=0)
restored_cols = np.fft.irfft(spectrum_cols, axis=0)
print("Restored along columns:\n", restored_cols)
Результат выполнения кода:
Original 2D array:
[[1. 2. 3. 4.]
[5. 6. 7. 8.]]
Restored along rows:
[[1. 2. 3. 4.]
[5. 6. 7. 8.]]
Restored along columns:
[[1. 2. 3. 4.]
[5. 6. 7. 8.]]
Пример
Использование различных режимов нормализации для восстановления сигнала:
import numpy as np
# Исходный сигнал
arr = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0])
# Прямое преобразование с разными нормами
spectrum_backward = np.fft.rfft(arr, norm='backward')
spectrum_ortho = np.fft.rfft(arr, norm='ortho')
spectrum_forward = np.fft.rfft(arr, norm='forward')
# Обратное преобразование
restored_backward = np.fft.irfft(spectrum_backward, norm='backward')
restored_ortho = np.fft.irfft(spectrum_ortho, norm='ortho')
restored_forward = np.fft.irfft(spectrum_forward, norm='forward')
print("Backward norm:", restored_backward)
print("Ortho norm: ", restored_ortho)
print("Forward norm: ", restored_forward)
Результат выполнения кода:
Backward norm: [1. 2. 3. 4. 5. 6. 7. 8.]
Ortho norm: [1. 2. 3. 4. 5. 6. 7. 8.]
Forward norm: [1. 2. 3. 4. 5. 6. 7. 8.]