【问题标题】:Matlab: How to obtain magnitude and phase of a sinusoidal signalMatlab:如何获得正弦信号的幅度和相位
【发布时间】:2017-02-18 14:08:58
【问题描述】:

给定两个信号:

x1 = A1*exp(j*2*pi*f1*t + Phi1); 
x2 = A1*exp(j*2*pi*f1*t + Phi1) + A2*exp(j*2*pi*f2*t + Phi2);

Matlab 应该可以计算幅值和相位:

abs(x1) = A1;
angle(x1) = Phi1;

abs(x2) = A1+A2;
angle(x2) = Phi1+Phi2;

这是正确的吗?我真的不确定x2。 现在,我得到一个正弦信号:

x3 = A3*cos(2*pi*f3*t + Phi3); 
x4 = A3*cos(2*pi*f3*t + Phi3) + A4*cos(2*pi*f4*t + Phi4);

这些信号的 abs() / angle() 会产生什么结果?

x2 的复包络由下式给出:

A1*exp(j*2*pi*(f1-f2)/2 t + Phi1) + A2*exp(j*2*pi*(f2-f1)/2 t + Phi2) 

假设载波频率在 f1 和 f2 之间。 复包络的幅度和相位应该在某种程度上与原始信号相当。现在我想知道,是吗?

【问题讨论】:

  • 余弦不是线性函数。因此,余弦和的大小不会是余弦大小的和。也不会是阶段。相位实际上没有多大意义,因为您的频率不同(请注意, xi 的角度随时间而变化!)。您尝试解决的问题称为谐波检索(从谐波的采样总和中估计 A_i、f_i 和 Phi_i)。您可以通过傅里叶分析 (DFT) 或高分辨率算法(例如 MUSIC 或 ESPRIT)来解决它。看看那些。无论如何,这不是取角度(x)那么简单,相信我。
  • 谢谢,弗洛里安!我也可以问你这个问题吗:你说不同频率的相位没有意义。但是你能告诉我 x2 的相位吗,假设 f1 = -f2 ?只是 Phi1 + Phi2 吗?
  • 不,是什么让你这么认为?相位仅在您将信号相乘时相加,而不是在您相加时相加。
  • 你说得对,我不知道。我在我的问题中添加了额外的一行。这就是我的问题。也许你能帮忙?我有点迷路了。
  • 我仍然不确定您要做什么。到目前为止,您询问 x2 的幅度/相位是否是其分量的幅度/相位之和。答案显然是否定的。现在您添加了“复包络的幅度和相位应该在某种程度上等同于原始信号”,同样,答案是否定的,例如,x2 的幅度是及时调制的。如果您试图从 x2 中找到 A1、A2、Phi1、Phi2,请参阅我的第一个回复。如果不是,请说明您要执行的操作。

标签: matlab


【解决方案1】:

编辑:我仍然不确定您到底需要什么,但也许这个身份对我有帮助:

cos(a) = [exp(j*a) + exp(-j*a) ] / 2

如果您需要估计(部分)参数 A、f、Phi,请查看离散时间傅里叶变换 (DTFT)。例如这个页面的数学是least squares sinusoidal parameter estimation

【讨论】:

  • 谢谢乔治!我已经编辑了我的问题,但我认为还不清楚。
  • 我更新了我的答案!顺便说一句,您的 x2 示例是错误的:-)
  • 另外,angle(x1) = (2*pi * f * t + Phi1) 模 2*pi,不是 Phi1
  • 好的,对。最后一件事:abs() 和 angle() 给出了复数的幅度和相位,对吧? x2 将给出一个复数。所以至少用 x2 我可以应用这些功能?
  • 是的,我相信你可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多