Математика

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab е чудесен инструмент за много приложения както в научната, така и в инженерната работа. Тази статия ще разгледа специалния случай на БПФ, бързо преобразуване на Фурие.

Първо нека изясним какво е бързо преобразуване на Фурие и защо искате да го използвате. Математиката е свързана с честотите. Преобразуването на Фурие е метод за отделяне на по-малки вълни в сложна вълна. Това звучеше сложно; когато слушате музика, чувате много различни ноти от певеца, инструменти и т.н. Като хора ние често можем да чуваме китарата сама, но се опитваме да я отделим с технология в запис и се сблъсквате с проблеми. Съвременните технологии могат да го направят, благодарение на различните въплъщения на основните уравнения на Фурие, които са разработени през годините. Съвременните приложения на серията Fourier са компресиране на картини и видео, GPS и MRI сканиране. Всичко това прави приближение на източника и използва серия от Фурие, за да спести памет и да получи по-бързи резултати.

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

За да отделите конкретна честота в сложен сигнал, можете да използвате някои изчисления, Бързите преобразувания на Фурие. Математическата основа за това изисква известна практика. Khan Academy е хубаво място за изучаване на математика.

Когато трябва да анализирате някакви вълни, можете да използвате синусоидални функции, за да приближите общата вълна и да получите всички отделни сигнали от смесената вълна. Или обратното, можете да направите сложна вълна от няколко синусоиди. Това е основната идея зад математиката.

За да разберете по-добре своите преобразувания на Фурие, добра практика е да ги напишете сами. В Scilab имате прост език за програмиране, проектиран с акцент върху математиката.
Различните задачи, от които ще се нуждаете, преобразуването на Фурие започват с намирането на коефициентите на преобразуване. Причината е, че именно това се използва за компресиране на картини и много други процеси.

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

Кодът за тяхното решаване е доста прост, започва с функция. Тази функция реализира преобразуването на Фурие на малки парчета.
За да дефинирате функция, използвате очевидната конструкция „функция“. По-долу има серия на Фурие за квадратна вълна:

функция 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 *% pi
крайна функция

За да направите вълната още по-квадратна, това все пак е приблизително, трябва да продължите да увеличавате броя на членовете. Когато търсите да пресъздадете модел, да речем карикатура, използвате преобразуването на Фурие по много подобен начин. Просто трябва да считате периода за безкраен.

Просто вдясно? Е, не без основните познания по математика. Опитайте няколко примера сами, използвайки 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 hz. В кода можете да видите и използването на „grand“, това е извикването на scilab към произволно. Тези произволни стойности се добавят, за да направят сигнала малко по-шумен, по-близо до реалността.

sample_rate = 1000;
t = 0: 1 / sample_rate: 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 / [email protected] / Implementing-FFTs-in-Practice # uid8

Wolfram ..

http: // демонстрации.вълкрам.com / ComplexAndRealPlanesOfDiscreteFourierTransforms /

Внедряване на други езици:

https: // www.наюки.io / page / как да приложим-дискретната-трансформация на Фурие

За да получите правилното усещане за темата:

https: // по-добреобяснено.com / статии / интерактивно ръководство за трансформация на Фурие /

Безплатни и игри с отворен код за разработване на Linux игри
Тази статия ще обхване списък с безплатни двигатели за игри с отворен код, които могат да се използват за разработване на 2D и 3D игри на Linux. Същес...
Урок Сянка на Tomb Raider за Linux
Shadow of the Tomb Raider е дванадесетото допълнение към поредицата Tomb Raider - франчайз за екшън-приключенска игра, създаден от Eidos Montreal. Игр...
Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...