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

blind-source-separation duet fastica independent-component-analysis

Keywords from Contributors

thread symbolic-computing similarity-search signal-processing predictive-maintenance outlier-detection motif-discovery motif-analysis matrix-profile dsp
Last synced: 5 months ago · JSON representation

Repository

Fast implementations of FastICA and DUET for blind source separation

Basic Info
  • Host: GitHub
  • Owner: baggepinnen
  • License: other
  • Language: Julia
  • Default Branch: master
  • Homepage:
  • Size: 92.8 KB
Statistics
  • Stars: 6
  • Watchers: 2
  • Forks: 0
  • Open Issues: 2
  • Releases: 7
Topics
blind-source-separation duet fastica independent-component-analysis
Created over 5 years ago · Last pushed about 1 year ago
Metadata Files
Readme License

README.md

IndependentComponentAnalysis

Build Status Coverage

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 fun are Tanh(a::Real) and Gaus()
  • If you have also loaded MultivariateStats, a conflict will arise, cauing you to have to qualify fun like this: IndependentComponentAnalysis.Tanh etc. 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.

  • bigdelay indicates whether or not the two microphones are far apart. If true, the delay δ is estimated using the differential method (see the paper sec 8.4.1) and the delay map is smoothed using kernel_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 ``` signals hist

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

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 Email 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

  • Versions: 7
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 9.9%
Average: 36.9%
Dependent packages count: 38.9%
Stargazers count: 45.1%
Forks count: 53.5%
Last synced: 6 months ago