# Extracting multiple envelopes from a signal

3 views (last 30 days)

Show older comments

### Accepted Answer

Cedric Wannaz
on 17 Oct 2017

Quick cheap trick gets 2/3. Was going to bed, no time for more but that could be a starting point.

function main

load( 'MultipleSignalEnvelope', 'ITDc0' ) ;

plot( ITDc0, 'b.' ) ;

grid on ;

hold on ;

t = 1 : numel( ITDc0 ) ;

A = 1.2 ;

P = fminsearch( @objective, zeros(3,1) ) ;

plot( A*sin((t+P)/360*2*pi).' ) ;

function mindif = objective( P )

mindif = sum( min( abs( ITDc0-A*sin((t+P)./360*2*pi )))) ;

end

end

%

##### 9 Comments

Cedric Wannaz
on 20 Oct 2017

Edited: Cedric Wannaz
on 20 Oct 2017

You will have to try. Define P as a vector with 6 components instead of 3, the first three being amplitudes and the next three being "phases". In the objective function, replace A with P(1:3) and P with P(4:6). Also, update the initial conditions. Instead of zeros(3,1), try to start e.g.. with three unit amplitudes and three null phases: [ones(3,1);zeros(3,1)].

Note that you could use FMINCON and define constraints, e.g. upper and lower bounds for the amplitude and phases.

Also note that you'd better try to see if you could get help from someone with experience in digital signal processing, because this approach is just a quick trick. If you reword your question in a new thread and nobody answers, you may be able to hire someone for not that much on sites that market freelancers.

### More Answers (1)

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!