在信號處理中,IQ 數據(In-phase and Quadrature)通常表示復數形式的信號,其中實部表示同相分量,虛部表示正交分量。Complex[] data
是一個包含 IQ 數據的數組,每個元素是一個復數,表示一個信號樣本。
為了自動計算每個信號樣本的幅度和相位,可以使用以下方法:
示例代碼
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)
。
希望這個介紹和示例代碼對你有幫助!如果你有其他問題,歡迎隨時提問。