Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中动态窗口的高效生成_Matlab_Sorting_Signal Processing - Fatal编程技术网

MATLAB中动态窗口的高效生成

MATLAB中动态窗口的高效生成,matlab,sorting,signal-processing,Matlab,Sorting,Signal Processing,有人能帮我提供一种有效的方法,或者帮我执行提供代码,以尽可能少的步骤获得相同的结果吗。我将感谢你 我有一个原始数组: A = [1 1 1 4.3 4.5 4 4.3 3 1 0 0 2 6.2 6.3 6 6.2 7.4 8 7.2 2 2 3 3 2]; 输出如下所示: A = [1 1 1 4 4 4 4 3 1 0 0 2 6 6 6 6 6 7 7 2 2 3 3 2]; 在收到一些新数组之后,我应用了一些限制,并从局部极大值数组中删除了一些值 Yposlocfiltered =

有人能帮我提供一种有效的方法,或者帮我执行提供代码,以尽可能少的步骤获得相同的结果吗。我将感谢你

我有一个原始数组:

A = [1 1 1 4.3 4.5 4 4.3 3 1 0 0 2 6.2 6.3 6 6.2 7.4 8 7.2 2 2 3 3 2];
输出如下所示:

A = [1 1 1 4 4 4 4 3 1 0 0 2 6 6 6 6 6 7 7 2 2 3 3 2];
在收到一些新数组之后,我应用了一些限制,并从局部极大值数组中删除了一些值

Yposlocfiltered = [6    15    23];
idx             = [4     6     3];
Yneglocfiltered = [2     9    20];
idx_neg         = [1     1     2];
在哪里我会找到idx(局部最大值),我会检查后面和前面的值是否更大,从而形成一个窗口

范例

If I will find 4 and 4.5, 4.3 is greater than 4 include it in backward window 
4.3 is greater than 4 include it in forward window.
我需要找到本地最大值后面和前面的本地最大值的范围

我曾尝试编写一段工作正常的代码,但问题是代码太长。

有人能给我一个想法,以最小的步骤和更快的方式执行此操作吗

我只提供了正局部极大值的代码,而负局部极大值的代码只是它的复制品

代码:仅适用于正局部最大值

 clc
 clear all

 A = [1 0 1 4.3 4.5 5 4.3 3 0 0 0 2 6.2 6.3 7 6.2 7.4 8  7.2 1 2 3 4 2];
 Yposlocfiltered = [ 6    15    23];
 idx = [4     6     3];
 Yneglocfiltered = [2     9    20];
 idx_neg = [1     1     2];

 for b = 1: numel(idx)
 for c = 1:numel(A)
 f = Yposlocfiltered(1,b)-c ;
 g = Yposlocfiltered(1,b)+c ;

 %   if (f > 0 && g <= numel(X))
 if(f > 0)   
 if  (A(Yposlocfiltered(1,b)-c))> idx(1,b)

 else 
   d= f+1;
   z(b)= d;
   backward_window = z;
  break
 end        

 end

 end 

 end 

 for r = 1: numel(idx)
 for s = 1:numel(A)
 u = Yposlocfiltered(1,r)-s ;
 v = Yposlocfiltered(1,r)+s ;

 %   if (f > 0 && g <= numel(X))
 if(v <=numel(A))   
 if  (A(Yposlocfiltered(1,r)+s))> idx(1,r)

 else 
   w= v-1;
   y(r)= w;
   forward_window = y;
 break
 end        

 end

 end 

end 

n=4
for i=1:length(backward_window)
range = backward_window(i): forward_window(i);
p = range 
if n <= numel(p)
        p = range(1:n)
         A( p) = idx(i);
else
%   if (size(range)<= 3)
A( p) = idx(i);
end 
end
clc
清除所有
A=[1 0 1 4.3 4.5 5 4.3 3 0 0 2 6.2 6.3 7 6.2 7.4 8 7.2 1 2 4 2];
Yposlocfiltered=[6 15 23];
idx=[4 6 3];
Yneglocfiltered=[2 9 20];
idx_neg=[12];
对于b=1:numel(idx)
对于c=1:numel(A)
f=Yposlocfiltered(1,b)-c;
g=Yposlocfiltered(1,b)+c;
%如果(f>0&&g 0)
如果(A(Yposlocfiltered(1,b)-c))>idx(1,b)
其他的
d=f+1;
z(b)=d;
向后_窗口=z;
打破
结束
结束
结束
结束
对于r=1:numel(idx)
对于s=1:numel(A)
u=Yposlocfiltered(1,r)-s;
v=Yposlocfiltered(1,r)+s;

%如果(f>0&&g从第一次查看代码开始,我相信您可以将前两个for循环组合为一个

sA = numel(A);
sI = numel(idx);

for i = 1:sI
    f = Yposlocfiltered(i) - [1:sA];
    g = Yposlocfiltered(i) + [1:sA];
    f(f<1) = [];
    g(g>sA) = [];
    backward_window(i) = f(find(A(f) <= idx(i), 1)) + 1;
    forward_window(i) = g(find(A(g) <= idx(i), 1)) - 1;
end

Anthony首先很抱歉,因为我不在电脑旁,所以回复有点晚。非常感谢您如此出色、准确和成熟的回复。它非常适合我。感谢您为我节省时间和精力。
sA = numel(A);
sI = numel(idx);

n=4;
for i = 1:sI
    f = Yposlocfiltered(i) - [1:sA];
    g = Yposlocfiltered(i) + [1:sA];
    f(f<1) = [];
    g(g>sA) = [];
    backward_window(i) = f(find(A(f) <= idx(i), 1)) + 1;
    forward_window(i) = g(find(A(g) <= idx(i), 1)) - 1;
    range = backward_window(i) : forward_window(i);
    if n <= numel(range)
        A(range(1:n)) = idx(i);
    else
        A(range) = idx(i);
    end
end