With 100 Fourier Transform points, truncating the rest of the spectrum to zero and flippling input to avoid start/end discontinuity (no bells and whistles).

*PS: edited the plot labels to better reflect the data displayed*

```
using DSP, Plots, CSV, FFTW
file_temp = "temp.csv"
if !isfile(file_temp)
run(`curl -L https://datahub.io/core/global-temp/r/1.csv -o $file_temp`)
end
d = reverse(CSV.File(file_temp).Mean) #Starting at year 1880
d1 = [d; reverse(d)] # flip input to join start/end continuously
N = length(d1)
d1_fft = fft(d1)
t = 1:N;
f = LinRange(-0.5, 0.5, N+1)[1:N] # normalized frequency
fs = 1.0; # sampling frequency
fc = 0.01; # frequency cutoff, less than Fnyquist=0.5
filt = digitalfilter(Lowpass(fc,fs=fs), Butterworth(6));
d2 = filtfilt(filt, d1) #filtered signal
d2_fft = fft(d2)
Nc = 100 #Fourier spectrum samples kept (truncated beyond f >= Nc/N)
f0 = (Nc-1)/N # maximum frequency component kept
d3_fft_trunc = [d2_fft[1:Nc]; fill(0.0,N-2Nc+1); conj(d2_fft[Nc:-1:2])]
d3_trunc = real(ifft(d3_fft_trunc)) # time signal from truncated spectrum
p2 = plot(f, abs.(fftshift(d1_fft)), lw=2,lc=:blues,label="Flipped signal (2x3288 points)", xlim=(-0.1,0.1))
plot!(f, abs.(fftshift(d2_fft)), lw=2,lc=:reds,label="Filtered flipped signal",xlabel="Frequency")
plot!(f, abs.(fftshift(d3_fft_trunc)), ls=:dash,lw=1,lc=:black,label="Truncated spectrum (100 points)")
quiver!([-f0,f0],[180,180], quiver=([0,0],[-100,-100]), lc=:blue)
p1 = plot(t[1:NĂ·2], d1[1:NĂ·2], lc=:blues,label="Signal (3288 points)", legend=:topleft)
plot!(t[1:NĂ·2], d2[1:NĂ·2], lc=:reds, lw=3,label="Filtered flipped signal",xlabel="Time")
plot!(t[1:NĂ·2], d3_trunc[1:NĂ·2], ls=:dash,lc=:black, lw=1,label="From truncated spectrum (100 points)")
plot(p1,p2,layout=(2,1), size=(1000,1000))
```