`basic_2dft.Rmd`

The code of `fft2d()`

, `bin()`

and `Hann2D()`

is for the most part a port from Matlab to `R`

of the code from 2DSpecTools: A 2D spectral analysis toolkit for Matlab by J. Taylor Perron et al. In consequence, a great introduction to this code is reading Perron, Kirchner, and Dietrich (2008) paper in which the authors apply spectral analysis to two examples in California (USA).

First, we load a raster corresponding to one of the two examples from Perron, Kirchner, and Dietrich (2008), the one located near Gabilan Mesa in California.

```
library("statisticalRoughness")
library("rayshader")
library("raster")
gabilan_mesa <- raster(file.path(system.file("extdata/rasters/", package = "statisticalRoughness"), "gabilan_mesa.tif"))
```

First, we detrend the DEM using `detrend_dem()`

and convert it to a `matrix`

.

```
summary(gabilan_mesa)
#> gabilan_mesa
#> Min. 215.8804
#> 1st Qu. 290.5542
#> Median 311.2366
#> 3rd Qu. 331.4969
#> Max. 381.4826
#> NA's 0.0000
gabilan_mesa <- gabilan_mesa %>% detrend_dem()
summary(gabilan_mesa)
#> gabilan_mesa
#> Min. -82.600540
#> 1st Qu. -18.781493
#> Median 2.099804
#> 3rd Qu. 20.267014
#> Max. 59.039808
#> NA's 0.000000
```

Here is what the area looks like. We can clearly see the imprint of Perron, Kirchner, and Dietrich (2008)’s Fig. 3a.

```
gabilan_mesa %>%
raster_to_matrix() %>%
sphere_shade(texture = "desert") %>%
add_shadow(ray_shade(gabilan_mesa %>% raster_to_matrix(), sunaltitude = 45), max_darken = 0.3) %>%
add_shadow(ambient_shade(gabilan_mesa %>% raster_to_matrix()), 0) %>%
plot_map()
```

As `gabilan_mesa`

is already a `matrix`

that we can pass directly to `fft2d()`

with a Hann window (`Hann = TRUE`

ensures that `Hann2d()`

is called). We also bin the power spectrum using `bin()`

and visualize the results with `spectrum_plot()`

. For convenience, we report as a vertical line the rolloff frequency identified in Perron, Kirchner, and Dietrich (2008)’s Fig. 4a.

```
raster_resolution <- 9.015
FT2D <- fft2D(raster::as.matrix(gabilan_mesa), dx = raster_resolution, dy = raster_resolution, Hann = TRUE)
view_matrix(log10(Re(FT2D$spectral_power_matrix)), ply = FALSE)
```

While produced with different underlying data, this plot passes the sanity check against Perron, Kirchner, and Dietrich (2008)’s example. We can assess the break point and sloeps with `get_beta()`

. In the graph below, the solid line corresponds to 180 m as in Perron, Kirchner, and Dietrich (2008) while the dashed-line is the change point of a segmented regression on the binned power spectrum.

Perron, J. Taylor, James W. Kirchner, and William E. Dietrich. 2008. “Spectral Signatures of Characteristic Spatial Scales and Nonfractal Structure in Landscapes.” *Journal of Geophysical Research: Earth Surface* 113 (F4): n/a–n/a. https://doi.org/10.1029/2007JF000866.