which algorithms can be used to extrapolate non-linear data? I have a dataset, where target value changes in time in following way: 



I need to predict target value for upcoming month, however I struggle to find a method to extrapolate the function that defines target. It is certainly not linear. 

I tried to extrapolate the max/min peaks separately using linear regression, but not sure what to do with all other values.
That function can be decomposed into composite components:


General trend
Repeated frequencies (looks like there are 3 major cycles)
Random noise


A Fourier transform can decompose a function into its constituent frequencies.