2013-06-19 2 views
1

Я хотел бы знать, если это возможно, чтобы найти пиков из данных, которые содержат комплексные значения, как и следующие данные:найти пики из комплексных значений вектора

x = [1 2+3i 4 5+6i 0.1+0.2i 10 -1+9i] 

Чтобы найти пики в реальных данных, мы может легко использовать функцию findpeaks в MATLAB. Пример:

>> data = [2 12 4 6 9 4 3 1 19 7];  
>> pks = findpeaks(data); 

pks = 

    12  9 19 

Но мне интересно, как я могу определить, какие критерии должны быть пиками в сложных данных? Это модуль? Например, если два комплексных переменных задаются

x = 3+4i 
y = 2+3i 

затем

|x| = sqrt(3*3+4*4) = 5 
|y| = sqrt(4+9) = 3.605551275 

явно |y|<|x|, делает это имеет смысл? Я попытался следующий код, но он дает мне ошибку

a = [1 2+3i 4+5i -1 0.1+0.2i]; 
>> a 

a = 

    Columns 1 through 3 

    1.0000    2.0000 + 3.0000i 4.0000 + 5.0000i 

    Columns 4 through 5 

    -1.0000    0.1000 + 0.2000i 

>> findpeaks(a) 
??? Error using findpeaks 
Expected X to be real. 

??? Error in findpeaks>parse_inputs (line 54) 
validateattributes(X,{'numeric'},{'nonempty','real','vector'},... 

??? Error in findpeaks (line 43) 
[X,Ph,Pd,Th,Np,Str,infIdx] = parse_inputs(X,varargin{:}); 

ответ

1

Вы должны сначала решить, что значит найти пики в сложных данных. Не существует четкого и уникального определения того, что «пик» находится в 2D-ландшафте сложной плоскости.

Вы могли бы определить его как локальный максимум на действительной оси:

>> a = [1 2+3i 4+5i -1 0.1+0.2i]; 
>> findpeaks(real(a)) 
ans = 
    4 

или мнимой оси:

>> findpeaks(imag(a)) 
ans = 
    5 

или модуля:

>> findpeaks(abs(a)) 
ans = 
    6.403124237432849e+00 

или угол :

>> findpeaks(angle(a)) 
ans = 
    9.827937232473291e-01  3.141592653589793e+00 
+0

для пиков мне не нужен только один vlaue, но вектор пиков, спасибо за ответ –

+0

let say для модульного случая? Потому что все остальные будут похожими –

+0

@dato: 'a' - это только пример, который вы предоставили; он содержит только 1 пик. Разумеется, другие данные могут дать больше пиков. Просто используйте 'abs()', чтобы найти модуль (который является реальным, и вы знаете, как найти пики). –

Смежные вопросы