---
# System prepended metadata

title: Deconvolution of CESM LME data
tags: [' Notes', Showcase]

---

---
tags: Showcase, Notes
---

# Deconvolution of CESM LME data

[![hackmd-github-sync-badge](https://hackmd.io/j4L-EIhRQqGdl5KmiIZ-_w/badge)](https://hackmd.io/@engeir/Sy1iHzrgs)
[![view-on-github](https://img.shields.io/badge/View%20on-GitHub-yellowgreen)](https://github.com/engeir/hack-md-notes/blob/main/cesm_lme_deconvolution.md)

## Data

The data is from a series of CESM simulations of the last millennium, part of the CESM
last millennium ensemble (LME) project.

The forcing used is the _net solar flux at the top of the atmosphere_ while the
temperature used is the _reference height temperature_. From the CESM LME set of
simulations, an ensemble of five runs was performed where volcanoes were the only
external forcing.

## All ensemble members averaging

We use all ensemble members to average over, where each ensemble run has been smoothed
before averaging by removing frequencies in the Fourier domain. This includes the
seasonal variability and some overtones found at multiples of the seasonal frequency.

After this, the time series are flipped (multiplied by -1), then shifted and scaled to
have a mean of zero and unit standard deviation. Finally, the time series are again
shifted vertically to have the mean equilibrium value at zero, where the mean
equilibrium value is calculated from the first 200 years.

![Forcing of all ensembles with
averaging](<https://raw.githubusercontent.com/engeir/hack-md-notes/bc886d14675a7adf135447fdcaa8683dd90fdb97/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_ensall_mean_10000_forcing.png>
"Forcing of all ensembles with averaging" =45%x)
![Temperature of all ensembles with
averaging](<https://raw.githubusercontent.com/engeir/hack-md-notes/bc886d14675a7adf135447fdcaa8683dd90fdb97/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_ensall_mean_10000_temperature.png>
"Temperature of all ensembles with averaging" =45%x)

Below are three estimates of the response function, where the variation is in the number
of iterations allowed for the deconvolution algorithm.

![Response from deconvolution of the forcing and temperature signals above, 100
iterations](https://raw.githubusercontent.com/engeir/hack-md-notes/bc886d14675a7adf135447fdcaa8683dd90fdb97/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_ensall_mean_100-respnse.png
"Response from deconvolution of the forcing and temperature signals above, 100
iterations")
![Response from deconvolution of the forcing and temperature signals above, 1000
iterations](https://raw.githubusercontent.com/engeir/hack-md-notes/bc886d14675a7adf135447fdcaa8683dd90fdb97/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_ensall_mean_1000-respnse.png
"Response from deconvolution of the forcing and temperature signals above, 1000
iterations")
![Response from deconvolution of the forcing and temperature signals above, 10000
iterations](https://raw.githubusercontent.com/engeir/hack-md-notes/bc886d14675a7adf135447fdcaa8683dd90fdb97/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_ensall_mean-10000_respnse.png
"Response from deconvolution of the forcing and temperature signals above, 10000
iterations")

## Using delta pulse forcing

From [Deconvolution of strange data](/FFrnfgKrRTmOC8BqAiVgEA) it is evident that the
forcing with some duration time on all peaks, a decaying part, is much harder to
deconvolve than a forcing that only contains arrival times and amplitude. Therefore, we
instead find the raw volcanic forcing used in CESM1 to make the CESM LME simulations and
deconvolve this with the temperature.

![Forcing](<https://raw.githubusercontent.com/engeir/hack-md-notes/main/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_delta_1000_forcing.png>
"With 1000 iterations: forcing" =45%x)
![Temperature](<https://raw.githubusercontent.com/engeir/hack-md-notes/main/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_delta_1000_temperature.png>
"With 1000 iterations: temperature" =45%x)

The first response shown below is when running the algorithm for 1000 iterations, while
the bottom is from using 10000 iterations. The shape is robust.

![With 1000 iterations:
response](https://raw.githubusercontent.com/engeir/hack-md-notes/main/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_delta_1000-respnse.png
"With 1000 iterations: response")
![With 10000 iterations:
response](https://raw.githubusercontent.com/engeir/hack-md-notes/main/assets/pic/deconv-cesm-lme/cesm_lme_deconvolution_delta_10000-respnse.png
"With 10000 iterations: response")

## Noise

### Method

The following analysis uses the bootstrapping method to look at the noise level in the
original response function we obtain from the deconvolution algorithm using the CESM LME
data sets, all shown above.

Creating the time series then consists of the following steps:

1. Let $F$ and $T$ be the de-seasonalized forcing and temperature time series from the
   CESM LME data set.
2. Deconvolution gives the estimates shown in the plots above for the response function,
   $R$.
3. We then create a new response function by setting all values to zero after a given
   year, for example after year 20, and denote this $R_{\mathrm{cut}}$.
4. From a control run in the CESM LME data set we have a temperature time series
   $T_{\mathrm{ctrl}}$, representing internal noise, then let
   $\widetilde{T}_{\mathrm{ctrl}}$ be that temperature time series but with randomized
   phase.
5. A new forced temperature time series is created as
   $T_{\mathrm{cut}}=F\ast{}R_{\mathrm{cut}}+\widetilde{T}_{\mathrm{ctrl}}$.
6. A new estimate of the response function is then created as
   $\widehat{R}_{\mathrm{cut}}=f(T_{\mathrm{cut}}, F)$, where $f()$ represents the
   deconvolution algorithm.
7. Repeat steps 5 and 6 to get any number of new estimates of the response function.
   Importantly, the random phase temperature is re-generated each time.

### Plots

Three different cut-offs, with the same x-axis.

![Cut off after 3
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut3-iter50.png
"Cut off after 3 years") ![Cut off after 20
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut20-iter50.png
"Cut off after 20 years") ![Cut off after 70
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut70-iter50.png
"Cut off after 70 years")

Cut-off after 90 years.

![Cut off after 90
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut90-iter50.png
"Cut off after 90 years")

Cut-off after 90 and 200 years, zoomed in on the year 194.

![Cut off after 90
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut90-iter50-example194.png
"Cut off after 90 years") ![Cut off after 200
years](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut200-iter50-example194.png
"Cut off after 200 years")

Cut-off after 8 years, zoomed in on the initial peak.

![Cut off after 8 years, zoomed in on year
6](https://raw.githubusercontent.com/engeir/hack-md-notes/aaa8494525cd9b2e50ae76219b22a48f84611a10/assets/pic/deconv-cesm-lme/cesm-lme-cut8-iter50-example6.png
"Cut off after 8 years, zoomed in on year 6")

Instead of cutting off at a specified index, we now use an exponentially decaying
response function.

![Exponential response
function](https://raw.githubusercontent.com/engeir/hack-md-notes/5b997428db1314129d6f170956dc9a9258d5cc1e/assets/pic/deconv-cesm-lme/cesm-lme-cutexp-iter50.png
"Exponential response function")

And a function with algebraic decay.

![Algebraic response
function](https://raw.githubusercontent.com/engeir/hack-md-notes/c34e802bb40472fa4c38a7c8c99e6057423498b9/assets/pic/deconv-cesm-lme/cesm-lme-cutpow-iter50.png
"Algebraic response function")

### Aligning volcanic forcing

There are some spikes in the noise that likely are due to the most prominent volcanic
forcing events. As a quick check, we roll the forcing such that the largest eruption
sits at the response time lag equal to zero, in the hope that the other eruptions will
line up with the spikes in the response function.

![Full height aligned forcing and response function, positive time
lag](https://raw.githubusercontent.com/engeir/hack-md-notes/ec30afc13b104eb83d60dd714f005a2c7b07e226/assets/pic/deconv-cesm-lme/cesm-lme-cutpow-iter10-aligned_forcing.png
"Full height aligned forcing and response function, positive time lag")

![Adjusted height, aligned forcing and response function, positive time
lag](https://raw.githubusercontent.com/engeir/hack-md-notes/ec30afc13b104eb83d60dd714f005a2c7b07e226/assets/pic/deconv-cesm-lme/cesm-lme-cutpow-iter10-aligned_forcing-zoom.png
"Adjusted height, aligned forcing and response function, positive time lag")

From this, it is clear that the deconvolution is affected by the different peaks in the
forcing time series. In year 194, the largest spike appears, but also between 300 and
400 years there are several spikes, as well as near the end at a time lag of almost 600
years.
