Математика

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab - отличный инструмент для множества применений как в научной, так и в инженерной работе. В этой статье будет рассмотрен особый случай БПФ, быстрого преобразования Фурье.

Сначала давайте выясним, что такое быстрое преобразование Фурье и почему вы хотите его использовать. Математика - это все о частотах. Преобразование Фурье - это метод выделения более мелких волн в сложной волне. Это звучало сложно; когда вы слушаете музыку, вы слышите много разных нот певца, инструментов и т. д. Как люди, мы часто слышим гитару сама по себе, но пытаемся выделить ее с помощью технологий в записи, и у вас возникнут проблемы. Современные технологии могут это сделать благодаря различным воплощениям основных уравнений Фурье, которые разрабатывались годами. Современные применения серии Фурье - сжатие изображений и видео, сканирование GPS и МРТ. Все это приближает источник и использует ряд Фурье для экономии памяти и получения более быстрых результатов.

Математик Жан-Батист Жозеф Фурье на самом деле пытался решить уравнение теплопроводности, чтобы можно было вычислить, как тепло распространяется в твердом веществе. То, что он придумал, было гораздо более полезным, хотя его методы позже были улучшены до более формальной версии. Уравнения теперь используются в широком диапазоне областей.

Чтобы выделить конкретную частоту в сложном сигнале, вы можете использовать некоторые вычисления, быстрое преобразование Фурье. Математическое обоснование этого требует некоторой практики. Khan Academy - отличное место для изучения математики.

Когда вам нужно проанализировать какие-либо волны, вы можете использовать синусоидальные функции, чтобы аппроксимировать общую волну и получить все отдельные сигналы из смешанной волны. Или наоборот, можно сделать сложную волну из нескольких синусоид. Это основная идея математики.

Чтобы лучше понять ваши преобразования Фурье, рекомендуется написать их самостоятельно. В Scilab у вас есть простой язык программирования, разработанный с упором на математику.
Различные задачи, которые вам потребуются преобразования Фурье, начинаются с поиска коэффициентов преобразования. Причина в том, что это то, что используется для сжатия картинок и многих других процессов.

Когда вы изучаете основы серии, первое, что вы используете, - это коэффициенты. Уравнения такие:

Код для их решения довольно прост, он начинается с функции. Эта функция реализует преобразование Фурье небольшими частями.
Чтобы определить функцию, вы используете очевидную конструкцию 'function'. Ниже представлен ряд Фурье для прямоугольной волны:

функция y =ж(z)
y = 4 * sin (t) / 1 *% pi + 4 * sin (3 * t) / 3 *% pi + 4 * sin (5 * t) / 5 *% pi + 4 * sin (7 * t) / 7 *% pi
+ 4 * sin (9 * t) / 9 *% пи
конечная функция

Чтобы волна стала еще более квадратной, в конце концов, это приближение, вам нужно постоянно увеличивать количество членов. Когда вы хотите воссоздать узор, скажем, мультфильм, вы используете преобразование Фурье очень похожим образом. Вам просто нужно считать период бесконечным.

Простое право? Ну не без базовых математических знаний. Попробуйте сами несколько примеров, используя scilab.

В этом примере показана простейшая возможная комбинация сигналов; два сигнала разной частоты.

// Выбираем размер выборки
 
N = 100;
 
// Устанавливаем последовательность, это создает массив
 
n = 0: N-1;
 
// Создаем частоту сигналов
 
w1 =% pi / 4
 
w2 =% pi / 8
 
// Делаем дискретизированные сигналы
 
s1 = cos (w1 * n); // Первая составляющая сигнала
 
s2 = cos (w2 * n); // Вторая составляющая сигнала
 
// Объединяем два в один сигнал
// В этом случае мы делаем простой чистый сигнал.
 
f = s1 + s2;
 
// Вот итоговый сигнал, готовый к преобразованию.
 
цифра (0);
участок (е);
 
// Преобразование Фурье этого сигнала должно показывать только частоту компонентов.
 
F = fft (f);
 
F_abs = абс (F);
 
фигура 1);
сюжет (n, F_abs);
 
фигура 2);
участок (F);

Используйте приведенный выше пример, чтобы попрактиковаться в работе преобразования. Убедитесь, что вы изменили его, чтобы фильтровать по-разному.

Совет - использовать консоль Scilab, чтобы увидеть, что переменные содержат на каждом шаге программы, так вы также можете увидеть, что 'F' имеет воображаемое содержимое. Попробуйте изменить äfä другим способом, чтобы получить более правильный результат.

В промышленности наиболее часто используются преобразования Фурье для анализа сигналов. Чтобы отфильтровать частоты из зашумленного сигнала, вам нужно начать с создания или импорта сигнала.  Следующий фрагмент кода создает смешанный сигнал двух частот, 50 и 70 Гц. В коде вы также можете увидеть использование 'grand', это вызов Scilab'а для случайного. Эти случайные значения добавляются, чтобы сделать сигнал немного более шумным, более близким к реальности.

sample_rate = 1000;
t = 0: 1 / частота_выборки: 0.6;
N = размер (t, '*'); // количество образцов
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nor', 0,1);
Теперь вы можете построить s как функцию от t и увидеть, что график выглядит неаккуратно.
>> сюжет (t, s);

Здесь пора опробовать простейшее преобразование Фурье, превратить 'y' в преобразование Фурье s.

y = fft (s);

fft

Если вы построите y как функцию от t, вы получите несколько симметричный узор в диапазоне от 0 до 0.6. Два всплеска - это то, что мы ищем, но теперь мы видим их во временной области. На самом деле произошло то, что результат все еще содержал мнимые значения. Чтобы найти две частоты в частотной области, нам нужно еще несколько операций, чтобы найти только действительные числа. Затем вы берете абсолютное значение результатов. На графике четко указаны исходные частоты.

Вот код:

// s является реальным, поэтому ответ fft сопряженно-симметричен, и мы сохраняем только первый
N / 2 балла
f = частота_выборки * (0: (N / 2)) / N; // связанный частотный вектор
n = размер (f, '*')
clf ()
сюжет (f, absy (1: n)))

Это наиболее распространенное использование преобразования Фурье. Используя эту систему, вы можете найти любую частоту в сложном, зашумленном сигнале. Уравнения сегодня широко используются во многих отраслях промышленности.
Функция fft2 в Scilab - это двумерная версия быстрого преобразования Фурье.

Отличный способ попрактиковаться - выбрать тональные сигналы DTMF, создать одно нажатие кнопки и попросить Scilab определить правильную тональность.

Демоверсии в самом Scilab'е содержат демонстрацию звукового файла, изучите его.

Если вы хотите копнуть глубже, вот несколько ссылок для дальнейшего чтения.

Продвинутая литература:

https: // cnx.org / contents / [адрес электронной почты защищен] / Реализация-БПФ на практике # uid8

Вольфрам…

http: // демонстрации.вольфрам.ru / ComplexAndRealPlanesOfDiscreteFourierTransforms /

Реализация на других языках:

https: // www.Наюки.io / page / как-реализовать-дискретное-преобразование Фурье

Чтобы получить правильное представление о предмете:

https: // betterexplained.ru / article / an-interactive-guide-to-the-fourier-transform /

Как использовать Xdotool для стимулирования щелчков мыши и нажатия клавиш в Linux
Xdotool - это бесплатный инструмент командной строки с открытым исходным кодом для имитации щелчков мыши и нажатия клавиш. В этой статье будет краткое...
5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...