Функция fft в матлабе

Функция fft в матлабе

Fast Fourier transform

Syntax

Description

Y = fft( X ) computes the discrete Fourier transform (DFT) of X using a fast Fourier transform (FFT) algorithm.

If X is a vector, then fft(X) returns the Fourier transform of the vector.

If X is a matrix, then fft(X) treats the columns of X as vectors and returns the Fourier transform of each column.

If X is a multidimensional array, then fft(X) treats the values along the first array dimension whose size does not equal 1 as vectors and returns the Fourier transform of each vector.

Y = fft( X , n ) returns the n -point DFT. If no value is specified, Y is the same size as X .

If X is a vector and the length of X is less than n , then X is padded with trailing zeros to length n .

If X is a vector and the length of X is greater than n , then X is truncated to length n .

If X is a matrix, then each column is treated as in the vector case.

If X is a multidimensional array, then the first array dimension whose size does not equal 1 is treated as in the vector case.

Y = fft( X , n , dim ) returns the Fourier transform along the dimension dim . For example, if X is a matrix, then fft(X,n,2) returns the n-point Fourier transform of each row.

Examples

Noisy Signal

Use Fourier transforms to find the frequency components of a signal buried in noise.

Specify the parameters of a signal with a sampling frequency of 1 kHz and a signal duration of 1.5 seconds.

Form a signal containing a 50 Hz sinusoid of amplitude 0.7 and a 120 Hz sinusoid of amplitude 1.

Corrupt the signal with zero-mean white noise with a variance of 4.

Plot the noisy signal in the time domain. It is difficult to identify the frequency components by looking at the signal X(t) .

Compute the Fourier transform of the signal.

Compute the two-sided spectrum P2 . Then compute the single-sided spectrum P1 based on P2 and the even-valued signal length L .

Define the frequency domain f and plot the single-sided amplitude spectrum P1 . The amplitudes are not exactly at 0.7 and 1, as expected, because of the added noise. On average, longer signals produce better frequency approximations.

Now, take the Fourier transform of the original, uncorrupted signal and retrieve the exact amplitudes, 0.7 and 1.0.

Gaussian Pulse

Convert a Gaussian pulse from the time domain to the frequency domain.

Define signal parameters and a Gaussian pulse, X .

Plot the pulse in the time domain.

To use the fft function to convert the signal to the frequency domain, first identify a new input length that is the next power of 2 from the original signal length. This will pad the signal X with trailing zeros in order to improve the performance of fft .

Convert the Gaussian pulse to the frequency domain.

Define the frequency domain and plot the unique frequencies.

Cosine Waves

Compare cosine waves in the time domain and the frequency domain.

Specify the parameters of a signal with a sampling frequency of 1kHz and a signal duration of 1 second.

Create a matrix where each row represents a cosine wave with scaled frequency. The result, X , is a 3-by-1000 matrix. The first row has a wave frequency of 50, the second row has a wave frequency of 150, and the third row has a wave frequency of 300.

Читайте также:  Выпадающий список при наведении css

Plot the first 100 entries from each row of X in a single figure in order and compare their frequencies.

For algorithm performance purposes, fft allows you to pad the input with trailing zeros. In this case, pad each row of X with zeros so that the length of each row is the next higher power of 2 from the current length. Define the new length using the nextpow2 function.

Specify the dim argument to use fft along the rows of X , that is, for each signal.

Compute the Fourier transform of the signals.

Calculate the double-sided spectrum and single-sided spectrum of each signal.

In the frequency domain, plot the single-sided amplitude spectrum for each row in a single figure.

Input Arguments

X — Input array
vector | matrix | multidimensional array

Input array, specified as a vector, matrix, or multidimensional array.

If X is an empty 0-by-0 matrix, then fft(X) returns an empty 0-by-0 matrix.

Data Types: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
Complex Number Support: Yes

n — Transform length
[] (default) | nonnegative integer scalar

Transform length, specified as [] or a nonnegative integer scalar. Specifying a positive integer scalar for the transform length can increase the performance of fft . The length is typically specified as a power of 2 or a value that can be factored into a product of small prime numbers. If n is less than the length of the signal, then fft ignores the remaining signal values past the n th entry and returns the truncated result. If n is 0 , then fft returns an empty matrix.

Example: n = 2^nextpow2(size(X,1))

Data Types: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

dim — Dimension to operate along
positive integer scalar

Dimension to operate along, specified as a positive integer scalar. If no value is specified, then the default is the first array dimension whose size does not equal 1.

fft(X,[],1) operates along the columns of X and returns the Fourier transform of each column.

fft(X,[],2) operates along the rows of X and returns the Fourier transform of each row.

If dim is greater than ndims(X) , then fft(X,[],dim) returns X . When n is specified, fft(X,n,dim) pads or truncates X to length n along dimension dim .

Data Types: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

Output Arguments

Y — Frequency domain representation
vector | matrix | multidimensional array

Frequency domain representation returned as a vector, matrix, or multidimensional array.

If X is of type single , then fft natively computes in single precision, and Y is also of type single . Otherwise, Y is returned as type double .

The size of Y is as follows:

For Y = fft(X) or Y = fft(X,[],dim) , the size of Y is equal to the size of X .

For Y = fft(X,n,dim) , the value of size(Y,dim) is equal to n , while the size of all other dimensions remains as in X .

If X is real, then Y is conjugate symmetric, and the number of unique points in Y is ceil((n+1)/2) .

Data Types: double | single

Читайте также:  Sony walkman nwz w262

More About

Discrete Fourier Transform of Vector

Y = fft(X) and X = ifft(Y) implement the Fourier transform and inverse Fourier transform, respectively. For X and Y of length n , these transforms are defined as follows:

Y ( k ) = ∑ j = 1 n X ( j ) W n ( j − 1 ) ​ ( k − 1 ) X ( j ) = 1 n ∑ k = 1 n Y ( k ) W n − ( j − 1 ) ​ ( k − 1 ) ,

W n = e ( − 2 π i ) / n

is one of n roots of unity.

The execution time for fft depends on the length of the transform. Transform lengths that have only small prime factors are significantly faster than those that are prime or have large prime factors.

For most values of n , real-input DFTs require roughly half the computation time of complex-input DFTs. However, when n has large prime factors, there is little or no speed difference.

You can potentially increase the speed of fft using the utility function, fftw . This function controls the optimization of the algorithm used to compute an FFT of a particular size and dimension.

Algorithms

The FFT functions ( fft , fft2 , fftn , ifft , ifft2 , ifftn ) are based on a library called FFTW [1] [2].

References

[2] Frigo, M., and S. G. Johnson. “FFTW: An Adaptive Software Architecture for the FFT.” Proceedings of the International Conference on Acoustics, Speech, and Signal Processing. Vol. 3, 1998, pp. 1381-1384.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

For MEX output, MATLAB ® Coder™ uses the library that MATLAB uses for FFT algorithms. For standalone C/C++ code, by default, the code generator produces code for FFT algorithms instead of producing FFT library calls. To generate calls to a specific installed FFTW library, provide an FFT library callback class. For more information about an FFT library callback class, see coder.fftw.StandaloneFFTW3Interface .

For simulation of a MATLAB Function block, the simulation software uses the library that MATLAB uses for FFT algorithms. For C/C++ code generation, by default, the code generator produces code for FFT algorithms instead of producing FFT library calls. To generate calls to a specific installed FFTW library, provide an FFT library callback class. For more information about an FFT library callback class, see coder.fftw.StandaloneFFTW3Interface .

Using the Code Replacement Library (CRL), you can generate optimized code that runs on ARM ® Cortex ® -A processors with Neon extension. To generate this optimized code, you must install the Embedded Coder ® Support Package for ARM Cortex-A Processors (Embedded Coder Support Package for ARM Cortex-A Processors). The generated code for ARM Cortex -A uses the Ne10 library. For more information, see Ne10 Conditions for MATLAB Functions to Support ARM Cortex-A Processors (Embedded Coder Support Package for ARM Cortex-A Processors).

Using the Code Replacement Library (CRL), you can generate optimized code that runs on ARM Cortex -M processors. To generate this optimized code, you must install the Embedded Coder Support Package for ARM Cortex-M Processors (Embedded Coder Support Package for ARM Cortex-M Processors). The generated code for ARM Cortex -M uses the CMSIS library. For more information, see CMSIS Conditions for MATLAB Functions to Support ARM Cortex-M Processors (Embedded Coder Support Package for ARM Cortex-M Processors).

Читайте также:  Canon eos 700d kit 18 135

GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

Usage notes and limitations:

The output Y is always complex even if all the imaginary parts are zero.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

Usage notes and limitations:

For distributed arrays, instead of using a parallel FFT algorithm, fft gathers vectors on a single worker to perform prime length FFTs. For large prime-length vector FFTs, out-of-memory errors can result.

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

В MATLAB R2013a встроенная функция fft теперь работает быстрее на процессорах, поддерживающих набор инструкций AVX. Давайте проверим? 🙂

Содержание

Описание тестбенча

Я написал небольшую функцию:

Эту функцию я запустил в MATLAB R2012b, и в MATLAB R2013a. Часть кода я позаимствовал отсюда: http://www.mathworks.com/matlabcentral/fileexchange/40097-sprint-race-for-fast-butterflies. Функция очень простая. Мы запускаем fft над входными векторами различной длины — от 2^10 до 2^25, причем делаем это 10 раз (чтобы потом усреднить результаты). Мы измеряем время выполнения каждого вызова функции fft (которых всего у нас получается 160: 10 итераций над 16-ью векторами) и сохраняем в файлы.

Далее мы запускаем следующую функцию для того, чтобы построить графики:

И вот что у нас получается:

Выводы

В зависимости от размера вектора, увеличение эффективности (скорости) функции fft может достигать 40%. По-моему, очень неплохо! А какие результаты получаются у вас?

Миллионы инженеров и ученых во всем мире используют MATLAB ® , чтобы анализировать и разработать системы и продукты, преобразовывающие наш мир. Матричный язык MATLAB является самым естественным способом в мире выразить вычислительную математику. Встроенная графика облегчает визуализацию и понимание данных. Окружение рабочего стола способствует экспериментированию, исследованиям и открытиям. Эти средства MATLAB и возможности все строго протестированы и разработаны, чтобы работать совместно.

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

Создание приложений

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

Внешние интерфейсы языка

Внешние интерфейсы к языкам и библиотекам, включая Python ® , Java ® , C, C++.NET и веб-сервисы

Среда и настройки

Предпочтения и настройки, различия между платформами, добавление оборудования и дополнительные функции

Ссылка на основную публикацию
Установить gvlk ключ что это
В связи с недавним выходом окончательной RTM версии пакета Microsoft Office 2016, корпоративные заказчики уже могут начинать переход на новую...
Топ вай фай адаптеров для пк
На заре развития интернета люди пользовались только проводным трафиком. После этого в «моду» начали входить модемы, которые подключались к беспроводному...
Топ дешевых наушников с хорошим звуком
Проводные наушники должны умереть! Так решил мобильный рынок и производители смартфонов, стремительно избавляющиеся от устаревшего 3,5 мм джека. Стоит ли...
Установить openal32 dll для windows 7
Данная библиотека задействуется во многих процессах во время работы компьютера. Например, она используется в играх, мультимедиа и различных программах. Иногда...
Adblock detector