From ea793384751f0c0345ce2ca04e27f74a232e31b6 Mon Sep 17 00:00:00 2001 From: Heitor Pascoal de Bittencourt Date: Wed, 8 May 2019 13:14:38 -0300 Subject: [PATCH 1/5] Docs: add example --- docs/make.jl | 1 + docs/src/examples.md | 42 ++++++++++++++++++++++++++++++++++++++++ docs/src/img/1D60Hz.png | Bin 0 -> 18734 bytes 3 files changed, 43 insertions(+) create mode 100644 docs/src/examples.md create mode 100644 docs/src/img/1D60Hz.png diff --git a/docs/make.jl b/docs/make.jl index b0905b6..5214cbd 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -8,6 +8,7 @@ makedocs( pages = Any[ "Home" => "index.md", "API" => "fft.md", + "Examples" => "examples.md", ], ) diff --git a/docs/src/examples.md b/docs/src/examples.md new file mode 100644 index 0000000..020e868 --- /dev/null +++ b/docs/src/examples.md @@ -0,0 +1,42 @@ +# Examples + +Here you can find a list of examples to help you quick start using this +library. + + +# 1D signal + +A simple real ``60 Hz`` with the first harmonics: + +```julia +using Plots +using FFTW +using DSP + +# Number of points +N = 2^12 - 1 +# Sample spacing +Ts = 1 / (1.1 * N) +# Sample rate +fs = 1 / Ts +# Start time +t0 = 0 +tmax = t0 + N * Ts + +# time coordinate +t = t0:Ts:tmax + +signal = sin.(2π * 60 * t) + .5 * sin.(2π * 120 * t) + +# Fourier Transform of it +F = fft(signal) |> fftshift +freqs = fftfreq(length(t), fs) |> fftshift + +# Plot +time_domain = plot(t, signal, title="Signal", xlims=(0, 4 / 60), xlabel="time (s)", label="") +freq_domain = plot(freqs, abs.(F), title="Spectrum", xlims=(0, 200), xlabel="frequency (Hz)", label="") +plot(time_domain, freq_domain, layout = 2) +savefig("Wave.pdf") +``` + +![](img/1D60Hz.png) diff --git a/docs/src/img/1D60Hz.png b/docs/src/img/1D60Hz.png new file mode 100644 index 0000000000000000000000000000000000000000..772afd7098fef277ae8ad5ac0bbd6782daf053db GIT binary patch literal 18734 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 Date: Wed, 8 May 2019 17:07:25 -0300 Subject: [PATCH 2/5] Accept @ararslan suggestions --- docs/src/examples.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/examples.md b/docs/src/examples.md index 020e868..8498a4d 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -29,8 +29,8 @@ t = t0:Ts:tmax signal = sin.(2π * 60 * t) + .5 * sin.(2π * 120 * t) # Fourier Transform of it -F = fft(signal) |> fftshift -freqs = fftfreq(length(t), fs) |> fftshift +F = fftshift(fft(signal)) +freqs = fftshift(fftfreq(length(t), fs)) # Plot time_domain = plot(t, signal, title="Signal", xlims=(0, 4 / 60), xlabel="time (s)", label="") From 4dceb975b185f1472d00a095b86a9c59c08120bd Mon Sep 17 00:00:00 2001 From: Heitor de Bittencourt Date: Sat, 18 May 2024 19:48:25 -0300 Subject: [PATCH 3/5] Apply suggestions from code review Co-authored-by: Alex Arslan --- docs/src/examples.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/src/examples.md b/docs/src/examples.md index 8498a4d..c7c7353 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -1,17 +1,15 @@ # Examples -Here you can find a list of examples to help you quick start using this -library. +Here you can find some basic examples of how to use this package. -# 1D signal +## Spectrum of a 1D Signal -A simple real ``60 Hz`` with the first harmonics: +This example shows how to obtain and plot the spectrum of a simple, real-valued signal with a second-order harmonic using FFTW and [Plots](https://github.com/JuliaPlots/Plots.jl). ```julia using Plots using FFTW -using DSP # Number of points N = 2^12 - 1 From 8a787b24b993fba71bc5a5ba5b441a28dce6a357 Mon Sep 17 00:00:00 2001 From: Heitor de Bittencourt Date: Sat, 18 May 2024 20:22:59 -0300 Subject: [PATCH 4/5] Update docs/src/examples.md --- docs/src/examples.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/src/examples.md b/docs/src/examples.md index c7c7353..a8bbf0f 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -26,7 +26,11 @@ t = t0:Ts:tmax signal = sin.(2π * 60 * t) + .5 * sin.(2π * 120 * t) -# Fourier Transform of it +# The `fft` function calculates the (discrete) Fourier transform of its input. +# The first half of the returned array contains the positive frequencies, while +# the second half contains the negative ones. For visualization purposes, we +# rearrange the array to have the zero-frequency at the center. + F = fftshift(fft(signal)) freqs = fftshift(fftfreq(length(t), fs)) From 89fb111099b8e892d8d4815427f55db34e10f5d3 Mon Sep 17 00:00:00 2001 From: Heitor de Bittencourt Date: Thu, 23 May 2024 08:38:54 -0300 Subject: [PATCH 5/5] Update docs/src/examples.md Co-authored-by: Alex Arslan --- docs/src/examples.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/src/examples.md b/docs/src/examples.md index a8bbf0f..c54e98d 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -24,6 +24,11 @@ tmax = t0 + N * Ts # time coordinate t = t0:Ts:tmax +# The underlying signal here is the sum of a sine wave at 60 cycles per second +# and its second harmonic (120 cycles per second) at half amplitude. We have +# discrete observations (samples) of this signal at each time `t`, with `fs` +# samples per second. + signal = sin.(2π * 60 * t) + .5 * sin.(2π * 120 * t) # The `fft` function calculates the (discrete) Fourier transform of its input.