Aliases for analysis
and synthesis
.
Function `stft` as an alias for `analysis`. Function `istft` as an alias for `synthesis`. `stft` and `istft` are exported. Documentation update.
This commit is contained in:
parent
f4d28dfeec
commit
0e1f17badf
3 changed files with 51 additions and 13 deletions
|
@ -1,7 +1,7 @@
|
|||
name = "STFT"
|
||||
uuid = "58bb99bf-048b-48b7-93e7-1cbf3ee61509"
|
||||
authors = ["Szymon M. Woźniak"]
|
||||
version = "0.1.0"
|
||||
version = "1.0.0"
|
||||
|
||||
[deps]
|
||||
FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
|
||||
|
@ -9,5 +9,5 @@ FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
|
|||
|
||||
[compat]
|
||||
|
||||
FFTW = "1.4.6"
|
||||
julia = "1.7"
|
||||
FFTW = "1.4"
|
||||
julia = "1.6"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
[![](https://img.shields.io/badge/docs-stable-blue.svg)](https://docs.zymon.org/STFT.jl/)
|
||||
|
||||
`STFT.jl` is a julia package implementing Short-Time Fourier Transform routines.
|
||||
`STFT.jl` is a Julia package implementing Short-Time Fourier Transform (STFT) routines.
|
||||
It provides signal analysis (time-domain signal to STFT-domain signal; stft)
|
||||
and signal synthesis (STFT-domain siganl to time-domain signal; istft).
|
||||
|
||||
|
|
56
src/STFT.jl
56
src/STFT.jl
|
@ -2,16 +2,20 @@ module STFT
|
|||
|
||||
using FFTW
|
||||
|
||||
export stft, istft
|
||||
|
||||
_fft(x::AbstractMatrix{<:Real}, d) = rfft(x, d)
|
||||
_fft(x::AbstractMatrix{<:Complex}, d) = fft(x, d)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
doc_analysis = """
|
||||
analysis(x::Vector, w::Vector, L=0, N=length(w)) -> Matrix
|
||||
analysis(x::Array{Vector}, w::Vector, L=0, N=length(w)) -> Array{Matrix}
|
||||
|
||||
stft(x::Vector, w::Vector, L=0, N=length(w)) -> Matrix
|
||||
stft(x::Array{Vector}, w::Vector, L=0, N=length(w)) -> Array{Matrix}
|
||||
|
||||
|
||||
Analyse discrete time-domain signal ``\\mathrm{x}[n]``
|
||||
using Short-Time Fourier Transform given by
|
||||
|
@ -68,9 +72,26 @@ L = W - H # Overlap
|
|||
|
||||
X = STFT.analysis(x, w, L) # Analysis
|
||||
```
|
||||
|
||||
```julia
|
||||
using STFT
|
||||
|
||||
x = rand(100) # Generate mock signal
|
||||
W = 64 # Window length
|
||||
w = ones(W) # Rectangular analysis window
|
||||
H = 4 # Hop
|
||||
L = W - H # Overlap
|
||||
|
||||
X = stft(x, w, L) # Analysis
|
||||
```
|
||||
|
||||
"""
|
||||
function analysis()
|
||||
end
|
||||
|
||||
"$doc_analysis"
|
||||
function analysis() end
|
||||
|
||||
"$doc_analysis"
|
||||
stft(x, w, L=0, N=length(w)) = analysis(x, w, L, N)
|
||||
|
||||
function analysis(
|
||||
x::AbstractVector{T},
|
||||
|
@ -102,10 +123,11 @@ end
|
|||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
doc_synthesis = """
|
||||
synthesis(X::Matrix, w::Vector, L=0, N=length(w)) -> Vector
|
||||
|
||||
istft(X::Matrix, w::Vector, L=0, N=length(w)) -> Vector
|
||||
|
||||
Syntesise discrete time-domain signal ``y[n]`` from STFT-domain signal
|
||||
``Y_w[sH, n]``.
|
||||
An arbitrary STFT-domain signal ``Y_w[sH, n]``, in general, is not a valid STFT
|
||||
|
@ -163,6 +185,20 @@ X = STFT.analysis(x, w, L) # Analysis
|
|||
xr = STFT.synthesis(X, w, L) # Synthesis
|
||||
```
|
||||
|
||||
```julia
|
||||
using STFT
|
||||
|
||||
x = rand(100) # Generate mock signal
|
||||
W = 64 # Window length
|
||||
w = ones(W) # Rectangular analysis window
|
||||
H = 4 # Hop
|
||||
L = W - H # Overlap
|
||||
|
||||
X = stft(x, w, L) # Analysis
|
||||
xr = istft(X, w, L) # Synthesis
|
||||
```
|
||||
|
||||
|
||||
# References
|
||||
1. D. Griffin and J. Lim, “Signal estimation from modified short-time
|
||||
Fourier transform,” IEEE Transactions on Acoustics, Speech, and
|
||||
|
@ -171,8 +207,12 @@ xr = STFT.synthesis(X, w, L) # Synthesis
|
|||
\\[[IEEE Xplore](https://ieeexplore.ieee.org/abstract/document/1164317),
|
||||
[pdf](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.331.7151&rep=rep1&type=pdf)\\]
|
||||
"""
|
||||
function synthesis()
|
||||
end
|
||||
|
||||
"$doc_synthesis"
|
||||
function synthesis() end
|
||||
|
||||
"$doc_synthesis"
|
||||
isftf(X, w, L=0, N=length(w)) = synthesis(X, w, L, N)
|
||||
|
||||
function synthesis(
|
||||
X::AbstractMatrix{<:Complex},
|
||||
|
@ -200,6 +240,4 @@ function synthesis(
|
|||
xn ./ xd # Normalize
|
||||
end
|
||||
|
||||
|
||||
|
||||
end # module
|
||||
|
|
Loading…
Reference in a new issue