Skip to content

Commit 8902bef

Browse files
Deprecate welch_pgram without explicitly given window (#581)
1 parent 3c1b783 commit 8902bef

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

src/periodograms.jl

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -530,11 +530,11 @@ end
530530
"""
531531
WelchConfig(s::AbstractArray; n=size(s, ndims(s))>>3, noverlap=n>>1,
532532
onesided=eltype(s)<:Real, nfft=nextfastfft(n),
533-
fs=1, window=nothing)
533+
fs=1, window)
534534
535535
WelchConfig(nsamples, eltype; n=nsamples>>3, noverlap=n>>1,
536536
onesided=eltype<:Real, nfft=nextfastfft(n),
537-
fs=1, window=nothing)
537+
fs=1, window)
538538
539539
Captures all configuration options for [`welch_pgram`](@ref) in a single struct (akin to
540540
[`MTConfig`](@ref)). When passed on the second argument of [`welch_pgram`](@ref), computes the
@@ -559,7 +559,7 @@ julia> wconfig2 = WelchConfig(8, Float64; n=length(x), noverlap=0, window=hannin
559559
"""
560560
function WelchConfig(nsamples, ::Type{T}; n::Int=nsamples >> 3, noverlap::Int=n >> 1,
561561
onesided::Bool=T <: Real, nfft::Int=nextfastfft(n),
562-
fs::Real=1, window::Union{Function,AbstractVector,Nothing}=nothing) where T
562+
fs::Real=1, window::Union{Function,AbstractVector,Nothing}=welch_config_default_window()) where T
563563

564564
onesided && T <: Complex && throw(ArgumentError("cannot compute one-sided FFT of a complex signal"))
565565
nfft >= n || throw(DomainError((; nfft, n), "nfft must be >= n"))
@@ -579,6 +579,12 @@ function WelchConfig(data::AbstractArray; kwargs...)
579579
return WelchConfig(size(data, ndims(data)), eltype(data); kwargs...)
580580
end
581581

582+
function welch_config_default_window()
583+
# deprecation added in 0.8, TODO for 0.9: replace with just `hanning`
584+
Base.depwarn("Omitting `window` is deprecated; specify `window=nothing` for the old behaviour or `window=hanning` for the future default.", :WelchConfig)
585+
return nothing
586+
end
587+
582588
# Compute an estimate of the power spectral density of a signal s via Welch's
583589
# method. The resulting periodogram has length N and is computed with an overlap
584590
# region of length M. The method is detailed in "The Use of Fast Fourier Transform
@@ -587,7 +593,7 @@ end
587593
# vol AU-15, pp 70-73, 1967.
588594
"""
589595
welch_pgram(s::AbstractVector, n=div(length(s), 8), noverlap=div(n, 2); onesided=eltype(s)<:Real,
590-
nfft=nextfastfft(n), fs=1, window=nothing)
596+
nfft=nextfastfft(n), fs=1, window)
591597
592598
Computes the Welch periodogram of a signal `s` based on segments with `n` samples
593599
with overlap of `noverlap` samples, and returns a [`Periodogram`](@ref) object.
@@ -601,24 +607,26 @@ See [`periodogram`](@ref) for description of optional keyword arguments.
601607
```jldoctest
602608
julia> x = rect(10; padding=20);
603609
604-
julia> power(welch_pgram(x)) # 1-sided periodogram
610+
julia> power(welch_pgram(x; window=nothing)) # 1-sided periodogram
605611
2-element Vector{Float64}:
606612
0.9523809523809523
607613
0.04761904761904761
608614
609-
julia> power(welch_pgram(x; onesided=false)) # 2-sided periodogram
615+
julia> power(welch_pgram(x; onesided=false, window=nothing)) # 2-sided periodogram
610616
3-element Vector{Float64}:
611617
0.9523809523809523
612618
0.023809523809523805
613619
0.023809523809523805
614620
615-
julia> power(welch_pgram(x, 5; onesided=false)) # 5 samples segment
621+
622+
julia> power(welch_pgram(x, 5; onesided=false, window=hanning)) # 5 samples segment
616623
5-element Vector{Float64}:
617-
1.488888888888889
618-
0.04444444444444444
619-
0.044444444444444446
620-
0.044444444444444446
621-
0.04444444444444444
624+
0.8888888888888888
625+
0.3807834425694269
626+
0.008105446319461968
627+
0.008105446319461968
628+
0.3807834425694269
629+
622630
```
623631
welch_pgram with ``x = sin(2π(100)t) + 2sin(2π(150)t) + noise ``
624632
```jldoctest

test/periodograms.jl

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,31 +106,37 @@ end
106106
4.0,
107107
13.656854249492380]
108108
@test power(periodogram(data, onesided=false)) data0
109-
@test power(welch_pgram(data, length(data), 0, onesided=false)) data0
109+
@test power(@test_deprecated welch_pgram(data, length(data), 0, onesided=false)) data0
110+
@test power(welch_pgram(data, length(data), 0, onesided=false, window=nothing)) data0
110111
@test power(spectrogram(data, length(data), 0, onesided=false)) data0
111112
@test power(periodogram(complex.([data;], [data;]), onesided=false)) data0*2
112-
@test power(welch_pgram(complex.([data;], [data;]), length(data), 0, onesided=false)) data0*2
113+
@test power(@test_deprecated welch_pgram(complex.([data;], [data;]), length(data), 0, onesided=false)) data0*2
114+
@test power(welch_pgram(complex.([data;], [data;]), length(data), 0, onesided=false, window=nothing)) data0*2
113115
@test power(spectrogram(complex.([data;], [data;]), length(data), 0, onesided=false)) data0*2
114116

115117
# # ~~~~~~~~ Tests with no window ~~~~~~~~~~~~~~~~~~~
116118
# Matlab: p = pwelch(0:7, [1, 1], 0, 2, 1, 'twosided')
117119
expected = Float64[34.5, 0.5]
118-
@test power(welch_pgram(data, 2, 0; onesided=false)) expected
120+
@test power(@test_deprecated welch_pgram(data, 2, 0; onesided=false)) expected
121+
@test power(welch_pgram(data, 2, 0; onesided=false, window=nothing)) expected
119122
@test mean(power(spectrogram(data, 2, 0; onesided=false)), dims=2) expected
120123

121124
# Matlab: p = pwelch(0:7, [1, 1, 1], 0, 3, 1, 'twosided')
122125
expected = Float64[25.5, 1.0, 1.0]
123-
@test power(welch_pgram(data, 3, 0; onesided=false)) expected
126+
@test power(@test_deprecated welch_pgram(data, 3, 0; onesided=false)) expected
127+
@test power(welch_pgram(data, 3, 0; onesided=false, window=nothing)) expected
124128
@test mean(power(spectrogram(data, 3, 0; onesided=false)), dims=2) expected
125129

126130
# Matlab: p = pwelch(0:7, [1, 1, 1], 1, 3, 1, 'twosided')
127131
expected = Float64[35.0, 1.0, 1.0]
128-
@test power(welch_pgram(data, 3, 1; onesided=false)) expected
132+
@test power(@test_deprecated welch_pgram(data, 3, 1; onesided=false)) expected
133+
@test power(welch_pgram(data, 3, 1; onesided=false, window=nothing)) expected
129134
@test mean(power(spectrogram(data, 3, 1; onesided=false)), dims=2) expected
130135

131136
# Matlab: p = pwelch(0:7, [1, 1, 1, 1], 1, 4, 1, 'twosided')
132137
expected = Float64[45, 2, 1, 2]
133-
@test power(welch_pgram(data, 4, 1; onesided=false)) expected
138+
@test power(@test_deprecated welch_pgram(data, 4, 1; onesided=false)) expected
139+
@test power(welch_pgram(data, 4, 1; onesided=false, window=nothing)) expected
134140
@test mean(power(spectrogram(data, 4, 1; onesided=false)), dims=2) expected
135141

136142
# ~~~~~~~~~~~ This one tests periodogram ~~~~~~~~~~~~
@@ -189,7 +195,8 @@ end
189195
2
190196
]
191197
@test power(periodogram(data; nfft=32)) expected
192-
@test power(welch_pgram(data, length(data), 0; nfft=32)) expected
198+
@test power(@test_deprecated welch_pgram(data, length(data), 0; nfft=32)) expected
199+
@test power(welch_pgram(data, length(data), 0; nfft=32, window=nothing)) expected
193200
@test power(spectrogram(data, length(data), 0; nfft=32)) expected
194201

195202
# Padded periodogram with window

0 commit comments

Comments
 (0)