<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="static/style.xsl"?><OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"><responseDate>2026-09-23T19:03:05Z</responseDate><request verb="GetRecord" identifier="oai:helda.helsinki.fi:10138/573505" metadataPrefix="dim">https://helda.helsinki.fi/server/oai/request</request><GetRecord><record><header><identifier>oai:helda.helsinki.fi:10138/573505</identifier><datestamp>2026-07-23T15:16:07Z</datestamp><setSpec>com_10138_18086</setSpec><setSpec>com_10138_17738</setSpec><setSpec>col_10138_18093</setSpec></header><metadata><dim:dim xmlns:dim="http://www.dspace.org/xmlns/dspace/dim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doc="http://www.lyncode.com/xoai" xsi:schemaLocation="http://www.dspace.org/xmlns/dspace/dim http://www.dspace.org/schema/dim.xsd">
   <dim:field mdschema="dc" element="contributor" lang="fi">Helsingin yliopisto, Matemaattis-luonnontieteellinen tiedekunta</dim:field>
   <dim:field mdschema="dc" element="contributor" lang="en">University of Helsinki, Faculty of Science</dim:field>
   <dim:field mdschema="dc" element="contributor" lang="sv">Helsingfors universitet, Matematisk-naturvetenskapliga fakulteten</dim:field>
   <dim:field mdschema="dc" element="contributor" qualifier="author">Yliluoma, Joel</dim:field>
   <dim:field mdschema="dc" element="date" qualifier="issued">2024</dim:field>
   <dim:field mdschema="dc" element="identifier" qualifier="uri">URN:NBN:fi:hulib-202403201558</dim:field>
   <dim:field mdschema="dc" element="identifier" qualifier="uri">http://hdl.handle.net/10138/573505</dim:field>
   <dim:field mdschema="dc" element="description" qualifier="abstract" lang="fi">Tässä tutkielmassa selvitetään, kuinka voidaan toteuttaa tietokoneohjelmana sellainen nopea yksiulotteinen Fourier-muunnos (FFT), joka toimii nopeasti kaiken kokoisilla syötteillä. Tutkielman alussa käydään läpi matemaattista teoriaa sekä perusmuotoisesta että diskreetistä Fourier-muunnoksesta (DFT), ja selvitetään, mikä niiden päämäärä on. Diskreetistä Fourier-muunnoksesta käsitellään sekä yksiulotteinen että moniulotteinen versio. Myös diskreettiä kosinimuunnosta (DCT) käsitellään ja tutkitaan sen eroja Fourier-muunnokseen.&#xd;
Tämän jälkeen tutkitaan erilaisia tunnettuja menetelmiä toteuttaa diskreetti Fouriermuunnos niin, että se toimii nopeasti. Erityisesti Cooleyn-Tukeyn menetelmää ja sen eri muotoja tutkitaan sellaisessa tarkkuudessa, että sen toimintaperiaatteen sekä sen syntyyn johtaneen ajatusketjun voi ymmärtää. Lisäksi käsitellään Raderin sekä Bluesteinin FFT-menetelmiä.&#xd;
Teorian käsittelyn jälkeen DFT sekä esitetyt FFT-algoritmit toteutetaan C++-ohjelmointikielellä. Lisäksi laaditaan ja toteutetaan yhdistetty algoritmi, joka pyrkii tapauskohtaisesti valitsemaan optimaalisen yhdistelmän algoritmeja saavuttaakseen nopeimman mahdollisen muunnoksen. C++-kielestä käytetään kirjoitushetkellä tuoreinta standardiversiota, C++20. Toteutettujen menetelmien nopeutta tutkitaan ja verrataan suhteessa toisiinsa sekä tunnettuun FFT-kirjastoon, FFTW. Lisäksi tutkitaan menetelmien laskentatarkkuutta. Lopuksi analysoidaan vertailumenetelmien tarkkuutta ja pätevyyttä, ja pohditaan toteutuksen puutteita sekä mahdollisia parannuskeinoja. Tutkielmassa esitetään myös FFT-muunnoksesta esimerkkisovellus, joka pyrkii selvittämään puheääninäytteestä sen sisältämät vokaaliäänteet.&#xd;
Tutkielman päämääränä on tarjota lukijalle selkeä esimerkkitoteutus kaikista esitetyistä muunnoksista sekä käsitellä kattavasti niiden rajoituksia, heikkouksia ja vahvuuksia. Parhaan hyödyn saamiseksi teoriasta lukijan tulisi ymmärtää differentiaali- ja integraalilaskennan perusteet sekä kompleksilukujen perusteet. Erityisesti summamerkinnän, ∑, sekä Eulerin lauseen ymmärtäminen on tärkeää matemaattisen teorian kannalta. Tietokonetoteutuksen lähdekoodi on laadittu sellaiseksi, ettei sen ymmärtämiksi tarvitse tuntea C++20-standardin yksityiskohtia, tai edes C++-kieltä kunnolla. Kokemus C-ohjelmoinnista on kuitenkin hyödyksi koodia luettaessa.</dim:field>
   <dim:field mdschema="dc" element="description" qualifier="abstract" lang="en">In this thesis we study how to implement the one-dimensional fast Fourier transform (FFT) as a computer program in such a way that it works fast on inputs of all sizes. First we walk through the mathematical theory behind the continuous and the discrete Fourier transform (DFT), and study the motivation behind them. We explore both the one-dimensional and the multi-dimensional versions of the DFT. We also study the discrete cosine transform (DCT) and explore its differences to the Fourier transform.&#xd;
After that, we explore various known methods for implementing the fast Fourier transform. We focus especially on the Cooley-Tukey algorithm and its different forms in enough detail, that one can understand both how it works and how it was conceived. We also explore Rader’s and Bluestein’s FFT algorithms.&#xd;
After the theory we implement the DFT and the FFTs using the C++ programming language. We also devise and implement a combined algorithm, which seeks to provide the fastest possible transformation by choosing the optimal combination of algorithms in each case. We use C++20, which is the most recent standard version of C++ at the time of writing. We analyze the speed of the implemented methods, comparing them against each others and also compared to a famous FFT library, FFTW. In addition, we analyze the numeric accuracy of the implementations. Then we analyze the accuracy and applicability of the analysis methods and study the shortcomings and possible approaches for improving the implementations. We also present a simple example application of FFT, where the program attempts to identify the vowel sounds present in a voice sample.&#xd;
The purpose of this thesis is to offer the reader a clear example implementation of all the presented transforms and to thoroughly explore their limitations, weaknesses and strengths. For best value, the reader is expected to understand the basics of calculus and the basics of complex numbers. Especially the sum notation, ∑, and Euler’s formula are vital for understanding the mathematical theory. The computer source code is designed in such way that the reader does not need to know the details of the C++20 standard, or indeed even the C++ language, but experience in C programming will help.</dim:field>
   <dim:field mdschema="dc" element="language" qualifier="iso">fin</dim:field>
   <dim:field mdschema="dc" element="publisher" lang="fi">Helsingin yliopisto</dim:field>
   <dim:field mdschema="dc" element="publisher" lang="en">University of Helsinki</dim:field>
   <dim:field mdschema="dc" element="publisher" lang="sv">Helsingfors universitet</dim:field>
   <dim:field mdschema="dc" element="subject">nopea Fourier-muunnos</dim:field>
   <dim:field mdschema="dc" element="subject">C++20</dim:field>
   <dim:field mdschema="dc" element="subject">Cooleyn-Tukeyn algoritmi</dim:field>
   <dim:field mdschema="dc" element="subject">Raderin algoritmi</dim:field>
   <dim:field mdschema="dc" element="subject">Bluesteinin algoritmi</dim:field>
   <dim:field mdschema="dc" element="subject">C++</dim:field>
   <dim:field mdschema="dc" element="subject">optimointi</dim:field>
   <dim:field mdschema="dc" element="subject">optimization</dim:field>
   <dim:field mdschema="dc" element="subject">fftw</dim:field>
   <dim:field mdschema="dc" element="subject">fft</dim:field>
   <dim:field mdschema="dc" element="subject">dft</dim:field>
   <dim:field mdschema="dc" element="subject">dct</dim:field>
   <dim:field mdschema="dc" element="subject">pienimmän neliösumman menetelmä</dim:field>
   <dim:field mdschema="dc" element="subject">Bluestein</dim:field>
   <dim:field mdschema="dc" element="subject">Cooley-Tukey</dim:field>
   <dim:field mdschema="dc" element="subject">Rader</dim:field>
   <dim:field mdschema="dc" element="subject">algorithm</dim:field>
   <dim:field mdschema="dc" element="subject">fftw3</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="specialization" lang="fi">Matematiikan opettaja</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="specialization" lang="en">Teacher in Mathematics</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="specialization" lang="sv">Lärare i matematik</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="degreeprogram" lang="fi">Matematiikan, fysiikan ja kemian opettajan maisteriohjelma</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="degreeprogram" lang="en">Master&amp;apos;s Programme for Teachers of Mathematics, Physics and Chemistry</dim:field>
   <dim:field mdschema="dc" element="subject" qualifier="degreeprogram" lang="sv">Magisterprogrammet för ämneslärare i matematik, fysik och kemi</dim:field>
   <dim:field mdschema="dc" element="title" lang="es">Nopea Fourier-muunnos – Teoria ja toteutus modernilla C++:lla</dim:field>
   <dim:field mdschema="dc" element="title" qualifier="alternative" lang="en">Fast Fourier Transform – Theory and implementation in modern C++</dim:field>
   <dim:field mdschema="dc" element="type" qualifier="ontasot" lang="fi">pro gradu -tutkielmat</dim:field>
   <dim:field mdschema="dc" element="type" qualifier="ontasot" lang="en">master&amp;apos;s thesis</dim:field>
   <dim:field mdschema="dc" element="type" qualifier="ontasot" lang="sv">pro gradu-avhandlingar</dim:field>
   <dim:field mdschema="dct" element="identifier" qualifier="urn">URN:NBN:fi:hulib-202403201558</dim:field>
   <dim:field mdschema="others" element="access-status">open.access</dim:field>
</dim:dim></metadata></record></GetRecord></OAI-PMH>