diff --git a/DFT.cc b/DFT.cc
index fd7b3f220916c0ecb0bcc376ab5a6a00557f89c9..c31c9e9d8aa4baf276ee39c6548b6175e657a5ca 100644
--- a/DFT.cc
+++ b/DFT.cc
@@ -13,75 +13,70 @@ int main()
     const double PI{std::acos(-1)};
 
     // inFile innehåller uHatt data och outFile är resulterande filen
-    std::string inFile{"sinusKoefficenter.txt"};
-    std::string outFile{"sinusFHat.txt"};
+    std::string inFile{"sinus.txt"};
+    std::string outFile{"inversSinusDFT.txt"};
     
     // Perioden för funktionen
     double T{2*PI};
-    // Definerar omega,my och n. (n is the size of the vectors,matrix)
-    double omega{2.0*PI/T};
-    std::complex<double> my{std::exp(1i * omega)};
+ 
     int const n{20};
-
+    std::complex<double> inputFunction[n]; 
     std::complex<double> F[n][n];  
-    std::complex<double> fHat[n];
-    std::complex<double> uHat[n]; 
+    std::complex<double> funcTransf[n];
+    std::complex<double> inverseFuncTransf[n];
 
     std::string dataLine;
-    std::ifstream uHatData (inFile);
+    std::ifstream functionData (inFile);
     
-
-    // while-loop variabel samt element i uHat
+    // while-loop variabel samt element i 
     int loop = 0; 
-    std::complex<double> uHatElement;
+    std::complex<double> element;
 
 
-    if (uHatData.is_open())
+    if (functionData.is_open())
     {
-      while (std::getline (uHatData,dataLine) )
+      while ((std::getline (functionData,dataLine)) && (loop < n) )
       {
         std::istringstream is(dataLine);
-        is >> uHatElement;
-        uHat[loop] = uHatElement; 
+        is >> element;
+        inputFunction[loop] = element; 
         loop++;
       }
-      uHatData.close();
+      functionData.close();
     }
 
-    // Behövs för att skriva få rätt format på raderna i filename2
-    std::ostringstream strConverter;
-    std::string output;
+  for(int i = 0; i<n; i++)
+    {
+        for(int j = 0; j<n; j++)
+        {
+            std::complex<double> exponent = static_cast<double> (i*j);
+            F[j][i] = std::exp(-1.0*T*1i*exponent/(n+1.0));
+            funcTransf[i] = funcTransf[i] + F[j][i]*inputFunction[i];
+        }
+        
+    }
+
+  for(int i = 0; i<n; i++)
+    {
+        for(int j = 0; j<n; j++)
+        {
+            std::complex<double> exponent = static_cast<double> (i*j);
+            F[j][i] = std::exp(1.0*T*1i*exponent/(n+1.0));
+            inverseFuncTransf[i] = inverseFuncTransf[i] + F[j][i]*funcTransf[i];
+        }  
+    }
 
 
     std::ofstream resultFile;
     resultFile.open(outFile);
-
     // Sätter önskad antal decimaler
     resultFile << std::fixed << std::setprecision(10);
-    for(int i = 0; i<n; i++)
+    for (int i=0;i<n;i++)
     {
-        for(int j = 0; j<n; j++)
-        {
-            std::complex<double> exponent = static_cast<double> (i*j);
-            F[j][i] = std::pow(my,exponent);
-            fHat[i] = fHat[i] + F[j][i]*uHat[i];
-            // Skriver ut F matrisen
-            std::cout<<F[j][i]<<" ";
-        }
-        std::cout <<'\n';
-        // Tar bort paranteserna från komplexa talet. Då det blir lättare för PlotData.py
-        strConverter.str("");
-        strConverter << fHat[i];
-        output = strConverter.str().substr(1, strConverter.str().size() - 2);
-        // Skriver in fHat in i resultFile
-        resultFile << output << '\n';    
+      resultFile << inverseFuncTransf[i].real() << "," << inverseFuncTransf[i].imag() << '\n'; 
     }
     resultFile.close();
-    std::cout << "done"<<'\n';
+    std::cout << "DFT done"<<'\n';
     return 0;
 }
 
-DFT::DFT()
-{
-}
-
diff --git a/FFTW.cc b/FFTW.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bf85078b5557cb3846eda1f36e04dc9a591948b4
--- /dev/null
+++ b/FFTW.cc
@@ -0,0 +1,98 @@
+#include "Header files/FFTW.h"
+#include <fftw3.h>
+#include <iostream>
+#include <fstream>
+#include <cmath>
+#include <complex>
+#include <string>
+
+// Macro för Re och Im
+#define REAL 0
+#define IMAG 1
+
+int main()
+{
+    // Antal punkter som ska transformeras/inverstransformeras
+    int const n=20;
+
+    // Input funktions data
+    fftw_complex functionData[n];
+
+    // FFTW transformen av datan
+    fftw_complex transfData[n];
+
+    // FFTW invers transform av traData
+    fftw_complex invTransfData[n];
+
+
+    // inFile innehåller funktions data och outFile1 är resulterande filen efter transformen.
+    // outFile2 är resulterande filen efter inverstransformen av transformen
+    std::string inFile{"sinus.txt"};
+    std::string outFile1{"sinusFFTW.txt"};
+    std::string outFile2{"inversSinusFFTW.txt"};
+
+    std::string dataLine;
+    std::ifstream functionDataFile (inFile);
+    
+
+    // while-loop variabel samt element i inFile
+    int loop = 0; 
+    std::complex<double> dataElement;
+
+    if (functionDataFile.is_open())
+    {
+      while ((std::getline (functionDataFile,dataLine) && (loop < n)))
+      {
+        std::istringstream is(dataLine);
+        is >> dataElement;
+        functionData[loop][REAL] = dataElement.real(); 
+        functionData[loop][IMAG] = dataElement.imag(); 
+        loop++;
+      }
+      functionDataFile.close();
+    }
+
+    // Beräknar transformen
+    // FFTW_MEASURE funkar ej för mig... har det med min cpu att göra?
+    fftw_plan transform = fftw_plan_dft_1d(n, functionData, transfData, FFTW_FORWARD, FFTW_ESTIMATE);
+    fftw_execute(transform);
+
+    // Förstör planen
+    fftw_destroy_plan(transform);
+
+    // Öppnar filen som resultatet skrivs in i 
+    // std::ofstream resultFile1;
+    // resultFile1.open(outFile1);
+    // for(int i=0; i<n;i++)
+    // {
+    //     resultFile1 << transfData[i][REAL]<< "," << transfData[i][IMAG] << '\n';   
+    // }
+    // resultFile1.close();
+
+
+    // Tar fram inverstransformen
+    fftw_plan inversTransform = fftw_plan_dft_1d(n, transfData, invTransfData, FFTW_BACKWARD, FFTW_ESTIMATE);
+    fftw_execute(inversTransform);
+
+    // Förstör planen
+    fftw_destroy_plan(inversTransform);
+    fftw_cleanup();
+
+    // Öppnar filen som resultatet skrivs in i 
+    std::ofstream resultFile2;
+    resultFile2.open(outFile2);
+
+    for(int i=0; i<n;i++)
+    {
+        // Divition med 1/n för att får rätt skala
+        resultFile2 << invTransfData[i][REAL]*1/n<< "," << invTransfData[i][IMAG]*1/n << '\n';   
+    }
+    resultFile2.close();
+
+    std::cout<<"fftw is done"<<'\n';
+    return 0;
+}
+
+
+FFTW::FFTW()
+{}
\ No newline at end of file
diff --git a/GenerateData.py b/GenerateData.py
index 2005529045e62b1ce4512dc7f67a569b3ff2be6d..70cd7adb18335f32f804fc0269ffcd44430bf4d2 100644
--- a/GenerateData.py
+++ b/GenerateData.py
@@ -2,14 +2,14 @@ import math
 # Genererar sinus värden för att jämföra med DFT
 
 # välj filnamn
-filename = 'sinus.txt'
+filename = 'x.txt'
 # välj antal datapunkter
 numDataPoints = 20
 
 file = open(filename, 'w')
 # file.write(omega+'\n')
 for i in range(numDataPoints):
-    file.write(str(math.sin(i))+'\n')
+    file.write(str(i)+'\n')
     pass
 file.close()
 print('done')
diff --git a/Header files/DFT.h b/Header files/DFT.h
index 49db810752a1a8af281d0774ee699482cb3cb7a8..0f8bf18c6a63aa5874e20182121085658ea66c8f 100644
--- a/Header files/DFT.h	
+++ b/Header files/DFT.h	
@@ -1,7 +1,7 @@
+#include <complex>
+
 class DFT
 {
 public:
-  DFT();
-
 private:
 };
diff --git a/Header files/FFTW.h b/Header files/FFTW.h
new file mode 100644
index 0000000000000000000000000000000000000000..e69d3da843bd53912a444f15e695dc63c9fe462f
--- /dev/null
+++ b/Header files/FFTW.h	
@@ -0,0 +1,6 @@
+class FFTW
+{
+public:
+  FFTW();
+private:
+};
diff --git a/AdaptivKvadratur.cc b/Legacy code/AdaptivKvadratur.cc
similarity index 100%
rename from AdaptivKvadratur.cc
rename to Legacy code/AdaptivKvadratur.cc
diff --git a/Header files/AdaptivKvadratur.h b/Legacy code/AdaptivKvadratur.h
similarity index 100%
rename from Header files/AdaptivKvadratur.h
rename to Legacy code/AdaptivKvadratur.h
diff --git a/Legacy code/Figure_1.png b/Legacy code/Figure_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cbe35a39f975aed231a4e5976fb871b38a7dad2
Binary files /dev/null and b/Legacy code/Figure_1.png differ
diff --git a/Legacy code/FlopPlot.py b/Legacy code/FlopPlot.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc2a7343a29157efb7a424a7a5fff4c5cf62a759
--- /dev/null
+++ b/Legacy code/FlopPlot.py	
@@ -0,0 +1,30 @@
+import matplotlib.pyplot as plt
+import numpy as np
+import math 
+
+n=11
+Y1 = list(range(n))
+X1 = list(range(1,len(Y1) + 1))
+
+Y2 = list(range(n))
+X2 = list(range(1,len(Y2) + 1))
+
+for i in range(1,n):
+    Y1[i] = i**2
+    pass
+
+plt.scatter(X1, Y1)
+plt.plot(X1, Y1, label = "O(n^2)")
+
+for i in range(1,n):
+    Y2[i] = i*math.log2(i)
+    pass
+
+plt.scatter(X2, Y2)
+plt.plot(X2, Y2, linestyle='dashed', label = "O(nlog2(n))")
+
+plt.legend()
+plt.xlabel('n')
+plt.ylabel('flops')
+plt.show()
+print('Plot is done')
diff --git a/PlotData.py b/PlotData.py
index 79a3940810966da44de5e3f631e72fd796dd5800..e8754785ef91680081cf748e69c8c175fe1a34d9 100644
--- a/PlotData.py
+++ b/PlotData.py
@@ -1,23 +1,35 @@
 import matplotlib.pyplot as plt
 import numpy as np
 
-filename1 = 'sinus.txt'
-filename2 = 'sinusFHat.txt'
+filename0 = 'sinus.txt'
+filename1 = 'inversSinusDFT.txt'
+filename2 = 'inversSinusFFTW.txt'
 
-# Tar fram data och plotar datan i filename1 mot x=1...len()
-Y = np.loadtxt(filename1, unpack=True)
+name0 = filename0[:len(filename0)-4]
+name1 = filename1[:len(filename1)-4]
+name2 = filename2[:len(filename2)-4]
+
+# Tar fram data och plotar datan i filename0 mot x=1...len()
+Y = np.loadtxt(filename0, unpack=True)
 X = list(range(0,len((Y))))
 plt.scatter(X, Y)
-plt.plot(X, Y)
+plt.plot(X, Y, label = name0)
+
+# Tar fram data och plotar datan i filename1 mot xHat1=1...len()
+YHat1,Imaginary = np.loadtxt(filename1, delimiter =',',unpack=True)
+XHat1 = list(range(0,len((YHat1))))
+plt.plot(XHat1, YHat1, label = name1)
+plt.scatter(XHat1, YHat1)
 
-# Tar fram data och plotar datan i filename2 mot xHat=1...len()
-YHat,Imaginary = np.loadtxt(filename2, delimiter =',',unpack=True)
-XHat = list(range(0,len((YHat))))
-plt.plot(XHat, YHat)
-plt.scatter(XHat, YHat)
+# Tar fram data och plotar datan i filename2 mot xHat2=1...len()
+YHat2,Imaginary = np.loadtxt(filename2, delimiter =',',unpack=True)
+XHat2 = list(range(0,len((YHat2))))
+plt.plot(XHat2, YHat2, label = name2, color='k')
+plt.scatter(XHat2, YHat2, color='k')
 
-plt.title(filename1)
+plt.legend()
+plt.title(name0)
 plt.xlabel('X')
 plt.ylabel('Y')
 plt.show()
-print('done')
+print('Plot is done')
diff --git a/a.out b/a.out
index 11763863664236e1947120e4d0f288b821f02fa9..634c2f9334a48227c91bb4fc0d65bfa8266b8775 100755
Binary files a/a.out and b/a.out differ
diff --git a/inversSinusDFT.txt b/inversSinusDFT.txt
new file mode 100644
index 0000000000000000000000000000000000000000..936556e578e0d655c6b739af2e08970c999ff6e9
--- /dev/null
+++ b/inversSinusDFT.txt
@@ -0,0 +1,20 @@
+0.0000000000,0.0000000000
+0.8414709848,-0.0000000000
+0.9092974268,0.0000000000
+0.1411200081,-0.0000000000
+-0.7568024953,-0.0000000000
+-0.9589242747,0.0000000000
+-0.2794154982,-0.0000000000
+0.6569865987,0.0000000000
+0.9893582466,-0.0000000000
+0.4121184852,0.0000000000
+-0.5440211109,-0.0000000000
+-0.9999902066,-0.0000000000
+-0.5365729180,-0.0000000000
+0.4201670368,0.0000000000
+0.9906073557,-0.0000000000
+0.6502878402,-0.0000000000
+-0.2879033167,-0.0000000000
+-0.9613974919,-0.0000000000
+-0.7509872468,0.0000000000
+0.1498772097,0.0000000000
diff --git a/inversSinusFFTW.txt b/inversSinusFFTW.txt
new file mode 100644
index 0000000000000000000000000000000000000000..631549b66535e625f863c8e407a8a1467798e0c6
--- /dev/null
+++ b/inversSinusFFTW.txt
@@ -0,0 +1,20 @@
+0,0
+0.841471,1.67914e-19
+0.909297,-6.86156e-18
+0.14112,-1.42613e-17
+-0.756802,0
+-0.958924,1.11022e-17
+-0.279415,1.79638e-17
+0.656987,-3.70247e-18
+0.989358,0
+0.412118,6.69364e-18
+-0.544021,-2.22045e-17
+-0.99999,1.67914e-19
+-0.536573,0
+0.420167,-1.42613e-17
+0.990607,1.79638e-17
+0.650288,1.11022e-17
+-0.287903,0
+-0.961397,-3.70247e-18
+-0.750987,-6.86156e-18
+0.149877,6.69364e-18
diff --git a/sinusFHat.txt b/sinusFHat.txt
deleted file mode 100644
index f435a06c569f8bfcfd4005d6296b70ce04d19fc0..0000000000000000000000000000000000000000
--- a/sinusFHat.txt
+++ /dev/null
@@ -1,20 +0,0 @@
--5.35179,0
-0.128618,-0.419678
-0.471065,0.0251305
--0.00337691,0.299632
--0.223093,-0.132737
-0.0820078,-0.174555
--0.785837,-0.17028
--0.328153,0.495687
--0.365077,-0.378147
-0.203529,-0.333906
-0.128914,0.0825593
-0.018315,-0.00991071
-0.549578,0.737994
-1.02951,-1.14958
-0.161698,0.376965
--0.303066,0.0827178
--0.0466722,-0.0801996
--0.110187,0.0509128
-0.022323,-0.675769
--5.82281,0.874292
diff --git a/sinusKoefficenter.txt b/sinusKoefficenter.txt
deleted file mode 100644
index 34ba38710a26184446dd98cc42d9e15058dd780c..0000000000000000000000000000000000000000
--- a/sinusKoefficenter.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-(-0.2675897034,0.0000000000)
-(0.0852312069,-0.3773186557)
-(0.4327528535,-0.0421730761)
-(0.0643636349,0.2955946212)
-(-0.3080274028,-0.0740207123)
-(0.0277376003,-0.4390337963)
-(0.3617780138,-0.0877454965)
-(-0.0156795662,0.2689983932)
-(-0.3921622667,-0.0799871230)
-(-0.0552578280,-0.4239994274)
-(0.2850822747,-0.0526451122)
-(-0.0813070464,0.3219824211)
-(-0.4426410892,-0.0124137418)
-(-0.0874494641,-0.3460380783)
-(0.2731793450,0.0308569456)
-(-0.0721812031,0.4058334340)
-(-0.4130538737,0.0665727764)
-(-0.0392404662,-0.2768270540)
-(0.3370127234,0.0859892698)
-(0.0033077054,0.4434591973)
-(-0.3306029697,0.0843525910)
-(0.0450460354,-0.2799986509)
-(0.4178942962,0.0620634560)
-(0.0757555249,0.4002667578)
-(-0.2710933581,0.0245790224)
-(0.0879174198,-0.3526369175)
-(0.4414619183,-0.0189232131)
-(0.0785540641,0.3159670451)
-(-0.2892379013,-0.0577923860)
-(0.0499579339,-0.4279585665)
diff --git a/x.txt b/x.txt
new file mode 100644
index 0000000000000000000000000000000000000000..19df0a2d8aeab0e8737c2c84bae50ff92cb31d28
--- /dev/null
+++ b/x.txt
@@ -0,0 +1,20 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19