matlab unwrap文檔
平移相位角 - MATLAB unwrap - MathWorks 中國(guó)
平移相位角
Q = unwrap(P)
展開(kāi)向量 P 中的弧度相位角夫壁。每當(dāng)連續(xù)相位角之間的跳躍大于或等于 π 弧度時(shí),unwrap 就會(huì)通過(guò)增加 ±2π 的整數(shù)倍來(lái)平移相位角眼溶,直到跳躍小于 π叽唱。如果 P 是矩陣慷暂,unwrap 將按列運(yùn)算。如果 P 是多維數(shù)組,unwrap 將對(duì)大小大于 1 的第一個(gè)維度進(jìn)行運(yùn)算般此。
java實(shí)現(xiàn)
/**
* matlab unwrap
*
* @param data_in
* @link https://ww2.mathworks.cn/help/matlab/ref/unwrap.html
*/
public double[] unwrap(double[] data_in) {
int n = data_in.length;
double[] data_out = new double[n];
data_out[0] = data_in[0];
for (int i = 1; i < n; i++) {
double diff = Math.abs(data_in[i] - data_out[i - 1]);
if (diff < Math.PI) {
data_out[i] = data_in[i];
} else {
//連續(xù)相位角之間的跳躍大于等于Math.PI,執(zhí)行增加 ±2π操作
double multiple = diff / (2 * Math.PI);
double remainder = diff % (2 * Math.PI);
int move = (int) Math.floor(multiple);
if (remainder > Math.PI) {
move++;
}
if (data_in[i] > data_out[i - 1]) {
data_out[i] = data_in[i] - move * 2 * Math.PI;
} else {
data_out[i] = data_in[i] + move * 2 * Math.PI;
}
// System.out.println("i:" + i +";multiple:"+multiple+";remainder"+remainder
// + ";move:" + move + ";diff:" + diff
// + ";data_in[i]:" + data_in[i] + "; data_out[i - 1]:" + data_out[i - 1]
// + ";data_out[i]:" + data_out[i]
// );
}
}
return data_out;
}