Индексация и перестановка спектральных отсчетов дискретного преобразования Фурье

Введение
(1)
(1)
Расчет ДПФ и ОДПФ ведется на основе индексов временных и частотных отсчетов без учета частоты дискретизации.
Таким образом, можно использовать выражения для ДПФ и ОДПФ при любой частоте дискретизации, не меняя вычислительную программу.
В данном разделе мы рассмотрим, как привязать индексы ДПФ к значениям частоты , выраженной в Герц, или к значениям циклической частоты рад/c.
Индексация спектральных отсчетов
При рассмотрении ДПФ мы говорили, что спектр дискретного сигнала , , это периодическая функция с периодом рад/c, где частота дискретизации исходного сигнала (Гц).
Соответственно период повторения спектра дискретного сигнала , , для частоты , выраженной в Герц, равен частоте дискретизации Гц.
ДПФ получается путем дискретизации периодической функции на одном периоде повторения с шагом
(2)
(2)
Таким образом, ый спектральный отсчет соответствует частоте
(3)
(3)
или
(4)
(4)
Пример 1. При частоте дискретизации , при , первый спектральный отсчет соответствует частоте .
Пример 2. При частоте дискретизации , при , спектральный отсчет с номером , соответствует частоте .



Перестановка спектральных отсчетов ДПФ
Пусть входной сигнал , , является комплексным и состоит из одной комплексной экспоненты с частотой Гц:
(5)
(5)
Зададим частоту дискретизации равной Гц и возьмем отсчетов исходного сигнала.
Рассчитаем ДПФ , , данного сигнала и получим амплитудный спектр, как это показано на рисунке 1.
Рисунок 1. Амплитудный спектр сигнала
Как можно заметить на рисунке 1, в спектре сигнала присутствует только одна компонента с индексом что согласно (4) соответствует частоте
(6)
(6)
что может показаться странным, потому что мы задавали частоту исходного сигнала Гц.
Однако ничего особенного в этом нет, если вспомнить, что спектр нашего дискретного сигнала является периодической функцией с периодом Гц, т.е. для нашего дискретного сигнала спектр состоит из бесконечного числа гармоник с частотами , как это показано на рисунке 2.
Из рисунка 2 следует, что при дискретизации спектра на одном периоде повторения от 0 до Гц (на рисунке 2 обозначено как период ДПФ) в выборку попадает периодическая гармоника на частоте 100 Гц. При этом спектр в интервале частот от Гц до Гц периодически повторяет спектр в интервале частот от Гц до Гц.
Рисунок 2. Периодический спектр сигнала
Таким образом, мы можем произвести перестановку спектральных отсчетов ДПФ для анализа спектра сигнала в интервале частот от до Гц.
Сделаем важное замечание. Частотная компонента, соответствующая частоте Гц, в силу периодичности спектра дискретного сигнала, также соответствует частоте Гц. При перестановке мы будем относить эту компоненту к частоте Гц.
Перестановка спектральных отсчетов ДПФ для четного
В случае четного спектральный отсчет , согласно (4), соответствует частоте Гц. Как мы отметили выше, этот же отсчет соответствует частоте Гц. Тогда можно записать спектр после перестановки для четного в виде:
(7)
(7)
ый спектральный отсчет после перестановки соответствует частоте
(8)
(8)
или
(9)
(9)
Таким образом, отсчет соответствует частоте Гц, отсчет соответствует частоте Гц и отсчет соответствует частоте Гц.
Перестановка спектральных отсчетов для четного показана на рисунке 3.
Рисунок 3. Перестановка спектральных отсчетов для четного



Перестановка спектральных отсчетов ДПФ для нечетного
В случае нечетного спектральный отсчет , согласно (4), соответствует частоте Гц, а спектральный отсчет соответствует частоте Гц.
Спектр после перестановки для нечетного :
(10)
(10)
ый спектральный отсчет после перестановки соответствует частоте
(11)
(11)
или
(12)
(12)
После перестановки спектральных отсчетов, в случае нечетного , спектральный отсчет , согласно (12), соответствует частоте Гц, спектральный отсчет соответствует частоте Гц и последний отсчет соответствует частоте Гц.
Перестановка спектральных отсчетов для нечетного показана на рисунке 4.
Рисунок 4. Перестановка спектральных отсчетов для нечетного
Пример перестановки спектральных отсчетов
Произведем перестановку спектральных отсчетов для корректного отображения отрицательных частот для приведенного выше примера (рисунок 1).
Количество отсчетов в приведенном примере , значит, мы можем воспользоваться выражением (7) для получения . Тогда после перестановки спектральные отсчеты будут соответствовать частотам (9).
На рисунке 5 приведен амплитудный спектр после перестановки, а также значения частоты (Гц), которой соответствуют спектральные отсчеты .
Рисунок 5. Амплитудный спектр
после перестановки и соответствующие
значения частоты
Как можно видеть на рисунке 5, после перестановки спектральных отсчетов компонента соответствует частоте Гц, как мы и задавали для исходного сигнала.
Заинтересованные читатели могут самостоятельно повторить приведенные примеры выполнив скрипт dft_indexation.py (см. приложение).
Выводы
В данном разделе мы рассмотрели вопрос индексации и перестановки спектральных отсчетов на выходе ДПФ.
Были приведены выражения для перестановки спектральных отсчетов для четного и нечетного для корректного отображения отрицательных частот после ДПФ.
Более детально свойства ДПФ будут рассмотрены в следующих разделах.



Список литературы
[1] Сергиенко А.Б. Цифровая обработка сигналов. Питер, 2002.

[2] Оппенгейм А., Шафер Р. Цифровая обработка сигналов. Техносфера, 2006.

[3] Гольденберг Л.М., Матюшкин Б.Д., Поляк М.Н. Цифровая обработка сигналов. Радио и связь, 1985.

[4] Bracewell R.N. The Fourier Transform and its Applications. McGraw Hill, 2000.

[5] Oppenheim Alan V. and Schafer Ronald W. Discrete-Time Signal Processing. Second Edition. Prentice-Hall, New Jersey, 1999.

[6] Robert J. Marks II The Joy of Fourier: Analysis, Sampling Theory, Systems, Multidimensions, Stochastic Processes, Random Variables, Signal Recovery, Pocs, Time Scales, & Applications. Baylor University, 2006.

[7] Nussbaumer Henri J. Fast Fourier Transform and Convolution Algorithms. Second Corrected and Updated Edition. Springer-Verlag, 1982.
Приложение
					
						# -*- coding: utf-8 -*-
"""
 Скрипт расчета данных для построения рисунков 1 и 4 раздела
 Индексация и перестановка спектральных отсчетов дискретного преобразования Фурье
 @author: Бахурин Сергей
 www.dsplib.org
"""
import numpy as np

# Размерность ДПФ
N = 30

# Частота сигнала Hz
f0 = -20.0

# Частота дискретизации Hz
Fs = 120.0

n = np.linspace(0, N, N, endpoint = False, dtype = 'float64')
f = n / N * Fs

# Исходный сигнал
s = np.exp(2j * np.pi * n * f0 / Fs)

# ДПФ исходного сигнала
S = np.abs(np.fft.fft(s))

# Перестановка ДПФ
S_sh = np.fft.fftshift( S )
f_sh = f - Fs/2.0

# Сохранение данных в текстовые файлы для дальнейшего построения графиков
# системой Latex
np.savetxt('dat/dft_freq_fig1.txt', np.transpose([n, S]))
np.savetxt('dat/dft_freq_fig4.txt', np.transpose([n, S_sh]))


# Построение графиков.
# Раскомментруйте этот блок чтобы произвести построение графиков
# по рассчитанным данным
"""
import matplotlib.pyplot as plt

plt.figure(1)
plt.stem(f, np.abs(S))
plt.xlabel('f, Hz')
plt.ylabel('|S(f)|')

plt.figure(2)
plt.stem(f_sh, np.abs(S_sh))
plt.xlabel('fsh, Hz')
plt.ylabel('|Ssh(fsh)|')

plt.show()

"""