在信号处理中,IQ 数据(In-phase and Quadrature)通常表示复数形式的信号,其中实部表示同相分量,虚部表示正交分量。Complex[] data
是一个包含 IQ 数据的数组,每个元素是一个复数,表示一个信号样本。
为了自动计算每个信号样本的幅度和相位,可以使用以下方法:
示例代码
cs
using System;
using System.Numerics; // 引入复数支持
public class SignalProcessor
{
public static void CalculateMagnitudeAndPhase(Complex[] data, out double[] magnitudes, out double[] phases)
{
int length = data.Length;
magnitudes = new double[length];
phases = new double[length];
for (int i = 0; i < length; i++)
{
// 计算幅度
magnitudes[i] = data[i].Magnitude;
// 计算相位
phases[i] = Math.Atan2(data[i].Imaginary, data[i].Real);
}
}
}
public class Program
{
public static void Main()
{
// 示例 IQ 数据
Complex[] data = new Complex[]
{
new Complex(3, 4),
new Complex(1, 1),
new Complex(-1, 1),
new Complex(-1, -1),
new Complex(1, -1)
};
// 计算幅度和相位
double[] magnitudes;
double[] phases;
SignalProcessor.CalculateMagnitudeAndPhase(data, out magnitudes, out phases);
// 输出结果
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine($"Sample {i + 1}: Magnitude = {magnitudes[i]}, Phase = {phases[i]} radians");
}
}
}
输出示例
假设输入的 IQ 数据为:
Complex[] data = new Complex[]
{
new Complex(3, 4),
new Complex(1, 1),
new Complex(-1, 1),
new Complex(-1, -1),
new Complex(1, -1)
};
输出结果将是:
Sample 1: Magnitude = 5, Phase = 0.9272952180016122 radians
Sample 2: Magnitude = 1.4142135623730951, Phase = 0.7853981633974483 radians
Sample 3: Magnitude = 1.4142135623730951, Phase = 2.356194490192345 radians
Sample 4: Magnitude = 1.4142135623730951, Phase = -2.356194490192345 radians
Sample 5: Magnitude = 1.4142135623730951, Phase = -0.7853981633974483 radians
说明
-
幅度:表示信号的强度,单位通常为伏特(V)或分贝(dB)。
-
相位 :表示信号的角度,单位为弧度(radians)。如果需要转换为度数,可以使用
phases[i] * (180 / Math.PI)
。
希望这个介绍和示例代码对你有帮助!如果你有其他问题,欢迎随时提问。