Быстрое преобразование Фурье (FFT) входа
DSP System Toolbox/Преобразования
Блок FFT вычисляет быстрое преобразование Фурье (FFT) через первую размерность N-D входного массива, u. Блок использует одну из двух возможных реализаций БПФ. Можно выбрать реализацию на основе библиотеки FFTW или реализацию на основе набора Radix-2 алгоритмов. Чтобы позволить блоку выбрать реализацию, можно выбрать Auto
. Для получения дополнительной информации о реализациях БПФ, см. Алгоритмы.
Для заданных пользователем длин БПФ, не равных P, нулевому заполнению или усечению, или данным по модулю длины переноса происходит перед операцией БПФ. Для БПФ с P ≤ M:
y = fft(u,M) % P ≤ M
Перенос:
y(:,L) = fft(datawrap(u(:,L),M)) % P > M; L = 1,...,N
Усечение:
y (:,L) = fft(u,M) % P > M; L = 1,...,N
Совет
Когда входная длина, P, больше длины БПФ, M, вы можете увидеть увеличения величины в выходе БПФ. Эти увеличения величины происходят, потому что блок FFT использует перенос по модулю M данных, чтобы сохранить все доступные входные выборки.
Чтобы избежать такого увеличения величины, можно обрезать длину входа выборки, P, до длины БПФ, M. Для этого поместите Pad блок перед блоком FFT в свою модель.
Port_1
- Входной сигналВходной сигнал для вычисления БПФ. Блок вычисляет БПФ вдоль первой размерности входного сигнала N-D.
Для получения дополнительной информации о том, как блок вычисляет БПФ, смотрите Описание и Алгоритмы.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
Поддержка комплексного числа: Да
Port_1
- БПФ входаБПФ, вычисленный по первой размерности N-D входного массива. Когда выход блока имеет целое число или тип данных с фиксированной точкой, он всегда подписан.
Вход <reservedrangesplaceholder7> th <reservedrangesplaceholder6> th произвел канал, y (k, L), равняется точке <reservedrangesplaceholder2> th M - указывают дискретное преобразование Фурье (DFT) канала входа <reservedrangesplaceholder0> th:
Для получения дополнительной информации о том, как блок вычисляет БПФ, смотрите Описание и Алгоритмы.
Типы данных: single
| double
| int8
| int16
| int32
| fixed point
Поддержка комплексного числа: Да
FFT implementation
- Реализация БПФAuto
(по умолчанию) | Radix-2
| FFTW
Установите этот параметр равным FFTW
для поддержки входного сигнала произвольной длины. Блок ограничивает сгенерированный код с реализацией FFTW хостов-компьютеров способным запускать MATLAB®.
Установите этот параметр равным Radix-2
для битовой обработки, данных с фиксированной или плавающей точкой или портативной Генерации кода C с помощью Simulink® Coder™. Размерная M M -by N входной матрицы должна быть степенью двойки. Чтобы работать с другими размерами входных параметров, используйте блок Pad, чтобы дополнить или обрезать эти размерности до степеней двойки, или, по возможности, выберите реализацию FFTW. Для получения дополнительной информации об алгоритмах, используемых Radix-2
mode, см. Radix-2 Implementation.
Установите этот параметр равным Auto
чтобы позволить блоку выбрать реализацию БПФ. Для входов с плавающей точкой с длинами преобразования, отличными от мощности двух, автоматически выбирается алгоритм FFTW. В противном случае автоматически выбирается алгоритм Radix-2. Для степени двойки длин преобразования, блок ограничивает сгенерированный код хостов-компьютеров MATLAB.
Output in bit-reversed order
- Выход в обратном битовом порядкеoff
(по умолчанию) | on
Определите порядок элементов выходного канала относительно упорядоченного расположения входных элементов. При установке этого флажка элементы выходного канала появляются в обратном битовом порядке относительно порядка входа. Если снять этот флажок, элементы выходного канала появятся в линейном порядке относительно порядка входа.
Примечание
Блок FFT вычисляет свой выход в обратном битовом порядке. Линейное упорядочивание выхода блока FFT требует дополнительной операции реверсирования бита. Во многих ситуациях можно увеличить скорость блока FFT, установив флажок Output in bit-reversed order.
Для получения дополнительной информации упорядоченное расположение выхода, смотрите Линейный и Bit-Reversed Выхода Order.
Чтобы включить этот параметр, установите FFT implementation равным Auto
или Radix-2
.
Divide output by FFT length
- Разделите вывод на длину БПФoff
(по умолчанию) | on
Когда вы выбираете этот параметр, блок делит выход БПФ на длину БПФ. Эта опция полезна, когда вы хотите, чтобы выход БПФ оставался на той же амплитуде, область значений и его вход. Это особенно полезно при работе с типами данных с фиксированной точкой.
Inherit FFT length from input dimensions
- Наследование длины БПФ от входных размерностейon
(по умолчанию) | off
Выберите для наследования длины БПФ из входа размеров. Когда вы устанавливаете этот флажок, входная длина должна быть степенью двойки.
Когда этот флажок не установлен, становится доступным параметр FFT length для задания длины.
FFT length
- длина БПФ64
(по умолчанию) | целое числоЗадайте длину БПФ как целое число, больше или равное двум.
Когда вы устанавливаете параметр FFT implementation равным Radix-2
или когда вы устанавливаете флажок Output in bit-reversed order, это значение должно быть степенью двойки.
Чтобы включить этот параметр, снимите флажок Inherit FFT length from input dimensions.
Wrap input data when FFT length is shorter than input length
- Обернуть или усечь входon
(по умолчанию) | off
Выберите для переноса или усечения входов зависимости от длины БПФ. Если вы выбираете этот параметр, перенос данных по модулю происходит перед операцией БПФ, когда длина БПФ короче, чем длина входа. При снятии этого флажка перед операцией БПФ происходит усечение входных данных до длины БПФ.
Чтобы включить этот параметр, снимите флажок Inherit FFT length from input dimensions.
Rounding mode
- Метод округленияFloor
(по умолчанию) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
Выберите режим округления для операций с фиксированной точкой.
Значения синусоидальной таблицы не подчиняются этому параметру; вместо этого они всегда округляют до Nearest
.
Параметр Rounding mode не влияет на числовые результаты, когда все эти условия выполняются:
Product output данных Inherit: Inherit via internal rule
.
Accumulator данных Inherit: Inherit via internal rule
.
С этими настройками типа данных блок работает в режиме полной точности.
Saturate on integer overflow
- Насыщение при целочисленном переполненииoff
(по умолчанию) | on
Когда вы выбираете этот параметр, блок насыщает результат своей операции с фиксированной точкой. Когда вы очищаете этот параметр, блок переносит результат своей операции с фиксированной точкой. Для получения дополнительной информации о saturate
и wrap
, см. Режим переполнения для операций с фиксированной точкой.
Параметр Saturate on integer overflow не влияет на числовые результаты, когда все эти условия выполняются:
Product output данных Inherit: Inherit via internal rule
.
Accumulator данных Inherit: Inherit via internal rule
.
С этими настройками типа данных блок работает в режиме полной точности.
Sine table
- Тип данных значений синусоидальной таблицыInherit: Same word length as input
(по умолчанию) | fixdt(1,16)
Выберите способ определения размера слова для значений синусоидальной таблицы. Длина дроби значений синусоидальной таблицы всегда равна размеру слова минус единица. Можно задать этот параметр как:
Правило, которое наследует тип данных, например Inherit: Same word length as input
Выражение, которое вычисляет допустимый тип данных, например fixdt(1,16)
Нажмите кнопку Show data type assistant, чтобы отобразить Data Type Assistant, которая помогает вам задать параметр Sine table.
Дополнительные сведения см. в разделе «Установка типов данных с использованием помощника по типам данных» (Simulink).
Значения синусоидальной таблицы не подчиняются параметрам Rounding mode и Saturate on integer overflow; вместо этого они всегда насыщены и округлены до Nearest
.
Product output
- Тип выходных данных продуктаInherit: Inherit via internal rule
(по умолчанию) | Inherit: Same as input
| fixdt(1,16,0)
Укажите тип выходных данных продукта. Смотрите Типы данных Фиксированной Точки и Умножения для рисунков, описывающих использование типа выходных данных продукта в этом блоке. Можно задать этот параметр как:
Правило, которое наследует тип данных, например Inherit: Inherit via internal rule
. Дополнительные сведения об этом правиле см. в разделе Наследование через внутреннее правило.
Выражение, которое вычисляет допустимый тип данных, например fixdt(1,16,0)
Нажмите кнопку Show data type assistant, чтобы отобразить Data Type Assistant, которая помогает вам задать параметр Product output.
Дополнительные сведения см. в разделе «Установка типов данных с использованием помощника по типам данных» (Simulink).
Accumulator
- Тип данных аккумулятораInherit: Inherit via internal rule
(по умолчанию) | Inherit: Same as input
| Inherit: Same as product output
| fixdt(1,16,0)
Задайте тип данных аккумулятора. Смотрите Fixed Point для рисунков, изображающих использование типа данных аккумулятора в этом блоке. Можно задать этот параметр как:
Правило, которое наследует тип данных, например Inherit: Inherit via internal rule
. Дополнительные сведения об этом правиле см. в разделе Наследование через внутреннее правило.
Выражение, которое вычисляет допустимый тип данных, например fixdt(1,16,0)
Нажмите кнопку Show data type assistant, чтобы отобразить Data Type Assistant, которая помогает вам задать параметр Accumulator.
Дополнительные сведения см. в разделе «Установка типов данных с использованием помощника по типам данных» (Simulink).
Output
- Тип выходных данныхInherit: Inherit via internal rule
(по умолчанию) | Inherit: Same as input
| fixdt(1,16,0)
Задайте тип выходных данных. Рисунки, иллюстрирующие использование типа выходных данных в этом блоке, см. в разделе Фиксированная точка. Можно задать этот параметр как:
Правило, которое наследует тип данных, например Inherit: Inherit via internal rule
.
Когда вы выбираете Inherit: Inherit via internal rule
блок вычисляет выход размера слова и длину дроби автоматически. Уравнения, которые блок использует для вычисления идеальных выходов размера слова и длины дроби, зависят от установки Divide output by FFT length флажка.
Когда вы устанавливаете флажок Divide output by FFT length, идеальное выходное слово и длины дроби те же, что и входное слово и длины дроби.
Когда вы снимаете флажок Divide output by FFT length, блок вычисляет идеальное выходное слово и длины дроби согласно следующим уравнениям:
Используя эти идеальные результаты, внутреннее правило затем выбирает размеры слова и длины дробей, которые подходят для вашего оборудования. Для получения дополнительной информации см. раздел Наследование через внутреннее правило.
Выражение, которое вычисляет допустимый тип данных, например fixdt(1,16,0)
Нажмите кнопку Show data type assistant, чтобы отобразить Data Type Assistant, которая помогает вам задать параметр Output.
Смотрите Типы Данных Управляющего Сигнала (Simulink) для получения дополнительной информации.
Output Minimum
- Блок минимального значения должен выводить[]
(по умолчанию) | скаляромЗадайте минимальное значение, которое должен выдать блок. Значение по умолчанию []
(не определено). Программное обеспечение Simulink использует это значение для выполнения:
Проверка области значений симуляции (см. «Задание диапазонов сигнала» (Simulink))
Автоматическое масштабирование типов данных с фиксированной точкой
Output Maximum
- Блок максимального значения должен выводить[]
(по умолчанию) | скаляромЗадайте максимальное значение, которое должен выдать блок. Значение по умолчанию []
(не определено). Программное обеспечение Simulink использует это значение для выполнения:
Проверка области значений симуляции (см. «Задание диапазонов сигнала» (Simulink))
Автоматическое масштабирование типов данных с фиксированной точкой
Lock data type settings against changes by the fixed-point tools
- Предотвратить переопределение типов данных инструментами с фиксированной точкойoff
(по умолчанию) | on
Выберите этот параметр, чтобы предотвратить переопределение инструментами с фиксированной точкой типов данных, заданных в диалоговом окне блока.
Реализация FFTW обеспечивает оптимизированное вычисление БПФ, включая поддержку длин преобразования «степень двойки» и «степень двойки» как в симуляции, так и в генерации кода. Сгенерированный код с использованием реализации FFTW может запускаться только на компьютерах, способных запускать MATLAB. Тип входных данных должен быть с плавающей точкой.
Реализация Radix-2 поддержек обработку с обращением битов, данные с фиксированной или плавающей точкой и позволяет блоку предоставлять портативную Генерацию кода C, используя Simulink Coder. Размерная M входной матрицы M -by N должна быть степенью двойки. Чтобы работать с другими размерами входных параметров, используйте блок Pad, чтобы дополнить или обрезать эти размерности до степеней двойки, или, по возможности, выберите реализацию FFTW.
Когда Radix-2 выбран, блок реализует один или несколько следующих алгоритмов:
Операция с бабочкой
Сигнал double
Алгоритм половинной длины
Radix-2 алгоритм децимирования во времени (DIT)
Radix-2 алгоритм децимирования в частоте (DIF)
Комплексность входов | Выход Упорядоченного расположения | Алгоритмы, используемые для расчетов БПФ |
---|---|---|
Комплекс | Линейный | Битовая операция и radix-2 DIT |
Комплекс | Бит-реверсированный | Radix-2 DIF |
Реальный | Линейный | Битовая операция и DIT radix-2 в сочетании с алгоритмами половинной длины и сигнала double |
Реальный | Бит-реверсированный | Radix-2 DIF в сочетании с алгоритмами половинной длины и сигнала double |
Эффективность алгоритма БПФ может быть повышена для действительных входных сигналов путем формирования комплексных последовательностей из действительных последовательностей перед расчетом ДПФ. Когда существует 2 N + 1 вещественных входных каналов, блок FFT формирует эти комплексные последовательности путем применения алгоритма двойного сигнала к первым 2 N входным каналам и алгоритма половинной длины к последнему нечетному нумерованному каналу.
Для действительных входных сигналов с типами данных с фиксированной точкой в выходе последнего нечетного канала могут появиться различные числовые результаты, даже когда все входные каналы идентичны. Это численное различие является результатом различий в алгоритме сигнала double и алгоритме половинной длины.
Можно исключить это численное различие двумя способами:
Использование полной арифметики точности для входных сигналов с фиксированной точкой
Изменение типа входных данных на плавающую точку
Для получения дополнительной информации об алгоритме сигнала double см. [2], «Эффективные расчеты ДПФ двух действительных последовательностей» на странице 475. Для получения дополнительной информации об алгоритме половинной длины смотрите [2], «Эффективные расчеты ДПФ 2N-Point действительной последовательности» на странице 476.
В определенных ситуациях алгоритм Radix-2 блока вычисляет все возможные тригонометрические значения коэффициента twiddle
где K - большее значение M или N и . Блок хранит эти значения в таблице и извлекает их во время симуляции. Количество записей в таблице для с фиксированной и с плавающей точками суммировано в следующей таблице:
Количество записей в таблице для N значений | |
---|---|
с плавающей точкой | 3 <reservedrangesplaceholder0>/4 |
фиксированная точка | N |
[1] Orfanidis, S. J. Введение в обработку сигналов. Верхний Седл-Ривер, Нью-Джерси: Prentice Hall, 1996, с. 497.
[2] Проакис, Джон Г. и Димитрис Г. Манолакис. Digital Signal Processing, 3rd ed. Upper Saddle River, NJ: Prentice Hall, 1996.
[3] FFTW (http://www.fftw.org
)
[4] Frigo, M. and S. G. Johnson, «FFTW: An Adaptive Программная Архитектура for БПФ», Труды Международной конференции по акустике, речи и обработке сигналов, Vol. 3, 1998, pp. 1381-1384 .
Указания и ограничения по применению:
Когда применяются следующие условия, исполняемый файл, сгенерированный из этого блока, полагается на предварительно построенные файлы динамической библиотеки (.dll
файлы) в комплекте с MATLAB:
FFT implementation установлено на FFTW
.
Inherit FFT length from input dimensions очищено, и FFT length установлено значение, которое не является степенью двойки.
Используйте packNGo
функция, чтобы упаковать код, сгенерированный из этого блока, и все соответствующие файлы в сжатом zip-файле. Используя эту zip- файла, можно переместить, распаковать и перестроить проект в другой среде разработки, где MATLAB не установлен. Для получения дополнительной информации см. раздел «Как запустить сгенерированный исполняемый файл вне MATLAB».
Когда длина БПФ является степенью двойки, можно сгенерировать автономные C и Код С++ из этого блока.
Следующие схемы показывают типы данных, используемые в блоке FFT для сигналов с фиксированной точкой. Можно задать Sine table, Accumulator, Product output и Output типы данных, отображаемые в схемах в диалоговом окне FFT, как описано в разделе Параметры.
Входы в блок FFT сначала приводятся к типу данных выходов и сохраняются в буфере выхода. Затем каждый каскад бабочки обрабатывает сигналы в типе данных аккумулятора, причем конечный выход бабочки переводится назад в тип выходных данных. Блок умножается в множителе twiddle перед каждым каскадом бабочки в БПФ децимации во времени и после каждого каскада бабочки в БПФ децимации в частоте.
Выход умножителя появляется в типе данных аккумулятора, потому что оба входов в умножитель являются комплексными. Для получения дополнительной информации о выполненном комплексном умножении смотрите Типы данных умножения.
Примечание
Когда вход блока является фиксированной точкой, все внутренние типы данных являются подписанными фиксированной точкой.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.