【问题标题】:find peaks from complex values vector从复数值向量中找到峰值
【发布时间】:2013-06-19 14:20:59
【问题描述】:

我想知道是否可以从包含复杂值的数据中找到峰值,例如以下数据:

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{:});

【问题讨论】:

    标签: matlab complex-numbers


    【解决方案1】:

    您必须首先确定在复杂数据中找到峰值意味着什么。对于复平面的二维景观中的“峰值”是什么,并没有一个明确和独特的定义。

    您可以将其定义为实轴上的局部最大值:

    >> 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
    

    【讨论】:

    • 对于峰,我不需要单个值,而是峰向量,谢谢回复
    • 让我们说模数情况?因为所有其他的都是相似的
    • @dato: a 只是你提供的一个例子;它仅包含 1 个峰。当然,其他数据可能会给出更多峰值。只需使用abs() 即可找到模数(这是真实的,您知道如何在其中找到峰值)。
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2021-12-12
    • 1970-01-01
    • 2010-12-07
    • 2018-07-07
    • 1970-01-01
    • 2014-04-24
    • 2019-08-12
    相关资源
    最近更新 更多