我想知道是否可以从包含复杂值的数据中找到峰值,如下列数据:
x = [1 2+3i 4 5+6i 0.1+0.2i 10 -1+9i]
要在真实数据中找到峰值,我们可以在MATLAB中轻松使用findpeaks
函数。示例:
>> 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{:});
答案 0 :(得分: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