diff --git a/matlab/peak_detect.m b/matlab/peak_detect.m index 3e10209..d91c7cc 100644 --- a/matlab/peak_detect.m +++ b/matlab/peak_detect.m @@ -28,29 +28,32 @@ function retval = peak_detect () N = 1024 Nh = N/2; kn = 0.1 - -close all; -figure +ks = 0.1; pa = 0.3; d_max = 30; +am = 0.1; +as = 0.9; +Ad = 10; +Cm = 1; + s = zeros(1, Nh); a = zeros(1, Nh); Xm = zeros(1, Nh); Xs = zeros(1, Nh); peak_count = zeros(1, Nh); -am = 0.1; -as = 0.9; -for k=1:64 +close all; +figure +for k=1:128 % Peak generation - f = fix(N/2*rand()); - k = f + 1; + + k = fix(Nh*rand() + 1); if (rand() < pa) if (s(k) == 0) - a(k) = 1.0; + a(k) = ks; s(k) = fix(d_max*rand()); end end @@ -58,7 +61,8 @@ for k=1:64 for n = 1:Nh if s(n) > 0 s(n) = s(n) - 1; - x = x + a(n)*cos(2*pi*n*(0:N-1)/N); + f = 0.5-rand() + n; + x = x + a(n)*cos(2*pi*f*(0:N-1)/N); end end X = abs(fft(x))/sqrt(N); @@ -67,9 +71,9 @@ for k=1:64 % Peak detection Xs = (1-as)*Xs + as*X; - Xm_gate = Xs > (10+Xm); + Xm_gate = Xs > (Ad+Xm); peak_count = Xm_gate.*peak_count + Xm_gate; - peak = peak_count > 1; + peak = peak_count > Cm; % Update Xm at no-peak bins Xm = (1-peak) .* ((1-am)*Xm + am*X) + peak.*Xm;