https://github.com/baggepinnen/independentcomponentanalysis.jl
Fast implementations of FastICA and DUET for blind source separation
https://github.com/baggepinnen/independentcomponentanalysis.jl
Science Score: 23.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
✓Academic publication links
Links to: researchgate.net -
○Committers with academic emails
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.6%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
Fast implementations of FastICA and DUET for blind source separation
Basic Info
Statistics
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 2
- Releases: 7
Topics
Metadata Files
README.md
IndependentComponentAnalysis
ICA
This package modifies the implementation of the FastICA algorithm from MultivariateStats.jl to make it more than 5x faster. This comes at the expense of taking an additional dependency, on LoopVectorization.jl and some additional compilation time.
This package also modifies the interface to the algorithm slightly, use it like this:
```julia using IndependentComponentAnalysis X = randn(4,100) k = 2 # Number of components to extract ica = fit(ICA, X, k, alg = FastICA(); fun = Tanh(), do_whiten = true, maxiter = 100, tol = 1e-6, mean = nothing, winit = nothing )
Xt = transform(ica, X) ```
- The options for
funareTanh(a::Real)andGaus() - If you have also loaded MultivariateStats, a conflict will arise, cauing you to have to qualify
funlike this:IndependentComponentAnalysis.Tanhetc. If this PR is merged, this package will work better together with MultivariateStats.
DUET
DUET (Degenerate Unmixing Estimation Technique) is an algorithm for blind source separation. It works on stereo mixtures and can separate any number of sources as long as they do not overlap in the time-frequency domain. The interface looks like this:
julia
est, H = duet( x1, x2, n_sources, n = 1024;
p = 1, # amplitude power used to weight histogram
q = 0, # delay power used to weight histogram
amax = 0.7,
dmax = 3.6,
abins = 35,
dbins = 50,
kernel_size = 1, # Controls the smoothing of the histogram.
bigdelay = false,
kernel_sizeδ = 1,
window = hanning,
kwargs..., # These are sent to the stft function
)
The returned values are est::Matrix(time, n_sources) and H::DUET.
H can be plotted plot(H), which shows the delay/amplitude histogram and the identified peaks. This can be used to tweak the input parameters.
bigdelayindicates whether or not the two microphones are far apart. Iftrue, the delayδis estimated using the differential method (see the paper sec 8.4.1) and the delay map is smoothed usingkernel_sizeδ.
Example:
```julia t = 0:0.1:2000 x1 = sin.(t) x2 = @. 1.3 * sign(sin(2t + 0.2) ) + 0.001 * randn() W = [0.3 0.7; 0.6 0.4] # Mixing matrix R = W * [x1 x2]' r1, r2 = R[1, :], R[2, :]
est, H = duet( r1, r2, 2, 1024, dmax = 3.5, amax = 2.8, kernel_size = 1, )
plotinds = 10000:10200 plot(plotinds, est[plotinds,:], lab = "Estimated components", c = :blue) plot!(plotinds, [x1 x2][plotinds,:], lab = "True signal", c = :black) plot!(plotinds, [r1 r2][plotinds,:], lab = "Received signal", c = :orange) |> display
plot(H) |> display
```
Creating mixture signals
julia
mix = mixture(signals, amps, [delays::Vector{Int}])
mixes = mixture(signals, amps::Vector{Vector}, [delays::Vector{Vector{Int}}])
Mixes together signals using amplitudes amps and delays (delays is specified in samples). If amps and the optional delays are vectors of vectors, then a vector of mixtures is returned. A vector of vectors is converted to a matrix using M = reduce(hcat, mixes).
Owner
- Name: Fredrik Bagge Carlson
- Login: baggepinnen
- Kind: user
- Location: Lund, Sweden
- Website: baggepinnen.github.io
- Twitter: baggepinnen
- Repositories: 59
- Profile: https://github.com/baggepinnen
Control systems, system identification, signal processing and machine learning
GitHub Events
Total
- Delete event: 1
- Push event: 2
- Pull request event: 2
- Create event: 1
Last Year
- Delete event: 1
- Push event: 2
- Pull request event: 2
- Create event: 1
Committers
Last synced: almost 3 years ago
All Time
- Total Commits: 39
- Total Committers: 3
- Avg Commits per committer: 13.0
- Development Distribution Score (DDS): 0.333
Top Committers
| Name | Commits | |
|---|---|---|
| Fredrik Bagge Carlson | c****b@u****g | 26 |
| github-actions[bot] | 4****]@u****m | 10 |
| Fredrik Bagge Carlson | b****n@g****m | 3 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 9 months ago
All Time
- Total issues: 2
- Total pull requests: 26
- Average time to close issues: less than a minute
- Average time to close pull requests: 20 days
- Total issue authors: 2
- Total pull request authors: 2
- Average comments per issue: 8.5
- Average comments per pull request: 0.46
- Merged pull requests: 15
- Bot issues: 0
- Bot pull requests: 24
Past Year
- Issues: 0
- Pull requests: 1
- Average time to close issues: N/A
- Average time to close pull requests: 2 days
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 1
- Bot issues: 0
- Bot pull requests: 1
Top Authors
Issue Authors
- JuliaTagBot (1)
- baggepinnen (1)
Pull Request Authors
- github-actions[bot] (25)
- baggepinnen (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 7
juliahub.com: IndependentComponentAnalysis
Fast implementations of FastICA and DUET for blind source separation
- Documentation: https://docs.juliahub.com/General/IndependentComponentAnalysis/stable/
- License: MIT
-
Latest release: 0.1.6
published about 3 years ago