Skip to content

Commit d9c2a0b

Browse files
authored
Fast extrema computation for Frequencies (#45)
* Fast extrema computation for Frequencies * simplified condition in extrema computation
1 parent 68ce876 commit d9c2a0b

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/definitions.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,10 @@ Broadcast.broadcasted(::typeof(*), x::Number, f::Frequencies) = Broadcast.broadc
421421
Broadcast.broadcasted(::typeof(/), f::Frequencies, x::Number) = Frequencies(f.n_nonnegative, f.n, f.multiplier / x)
422422
Broadcast.broadcasted(::typeof(\), x::Number, f::Frequencies) = Broadcast.broadcasted(/, f, x)
423423

424+
Base.maximum(f::Frequencies) = (f.n_nonnegative - ifelse(f.multiplier >= 0, 1, f.n)) * f.multiplier
425+
Base.minimum(f::Frequencies) = (f.n_nonnegative - ifelse(f.multiplier >= 0, f.n, 1)) * f.multiplier
426+
Base.extrema(f::Frequencies) = (minimum(f), maximum(f))
427+
424428
"""
425429
fftfreq(n, fs=1)
426430
Return the discrete Fourier transform (DFT) sample frequencies for a DFT of length `n`. The returned

test/runtests.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,18 @@ end
114114
@test 2 \ fftfreq(4, 1) === fftfreq(4, 1/2)
115115
@test 2 .\ fftfreq(4, 1) === fftfreq(4, 1/2)
116116
end
117+
118+
@testset "extrema" begin
119+
function check_extrema(freqs)
120+
for f in [minimum, maximum, extrema]
121+
@test f(freqs) == f(collect(freqs)) == f(fftshift(freqs))
122+
end
123+
end
124+
for f in (fftfreq, rfftfreq), n in (8, 9), multiplier in (2, 1/3, -1/7)
125+
freqs = f(n, multiplier)
126+
check_extrema(freqs)
127+
end
128+
end
117129
end
118130

119131
@testset "normalization" begin

0 commit comments

Comments
 (0)