## 5.1 The Spectral Slope

We can use the power spectrum to estimate a **self-affinity parameter**, or scaling exponent.

- Download
`ts1.txt`

,`ts2.txt`

,`ts3.txt`

here. If you use`R`

and have package`rio`

installed you can run this code. It loads the data into a`data.frame`

object directly from`Github`

.

```
library(rio)
TS1 <- rio::import("https://raw.githubusercontent.com/FredHasselman/DCS/master/assignmentData/Fluctuation_PSDslope/ts1.txt")
TS2 <- rio::import("https://raw.githubusercontent.com/FredHasselman/DCS/master/assignmentData/Fluctuation_PSDslope/ts2.txt")
TS3 <- rio::import("https://raw.githubusercontent.com/FredHasselman/DCS/master/assignmentData/Fluctuation_PSDslope/ts3.txt")
# These objects are now data.frames with one column named V1.
# If you want to change the column names
colnames(TS1) <- "TS1"
colnames(TS2) <- "TS2"
colnames(TS3) <- "TS3"
```

- Plot the three ‘raw’ time series.

### 5.1.1 Basic data checks and preparations

For spectral analysis we need to check some data assumptions (see notes on data preparation, Lecture 4).

#### Normalize

- Are the lengths of the time series a power of 2? (Use
`log2(length of var)`

)

- Computation of the frequency domain is greatly enhanced if data length is a power (of 2).

- Are the data normalized? (we will
*not*remove datapoints outside 3SD)- To normalize we have to subtract the mean from each value in the time series and divide it by the standard deviation, the function
`scale()`

can do this for you, but you could also use`mean()`

and`sd()`

to construct your own function.

- To normalize we have to subtract the mean from each value in the time series and divide it by the standard deviation, the function
- Plot the normalized time series.

#### Detrend

Before a spectral analysis you should remove any linear trends (it cannot deal with nonstationary signals!)

- Detrend the normalized data (just the linear trend).
- This can be done using the function
`pracma::detrend()`

. - Extra: Try to figure out how to detrend the data using
`stats::lm()`

or`stats::poly()`

- This can be done using the function
- Plot the detrended data.

#### Get the log-log slope in Power Spectral Density

The function `fd.psd()`

will perform the spectral slope fitting procedure.

- Look at the manual pages to figure out how to call the function. The manual is on blackboard and Github
- Remember, we have already normalized and detrended the data.
- You can also look at the code itself by selecting the function name in
`R`

and pressing`F2`

- Calculate the spectral slopes for the three normalized and detrended time series.
- Call with
`plot = TRUE`

- Compare the results… What is your conclusion?

- Call with