我开发了一个频谱范围,可以从 IQ 信号开始绘制信号与频率的关系图。我目前没有办法平衡 IQ 信号,所以我正在寻找各种方法来做到这一点。我遇到了这篇文章,这对我来说相当容易理解,因为我对所有 DSP 都很陌生。我有一个问题是关于一些方程的符号:例如,。代表什么?我在数学符号表中找不到这些参考。
帮助 IQ 平衡方程?
信息处理
信号分析
2022-02-21 21:04:20
3个回答
我根据那篇文章用 Java 编写了代码,但它对我不起作用。Alpha(I 数据标量)计算为左右,而通常计算为一个虚数。有没有人对此有任何运气或可以指出我更好的智商校正算法?
(要清楚:calculateMatrix、a、c和d都是实例变量)
public void correctIQ(int[] data) {
int length = data.length / 2;
// ( I'(t) & Q'(t) )
int[] iData = new int[length];
int[] qData = new int[length];
// Deinterleave IQ data
for (int i = 0; i < length; i++) {
iData[i] = data[i * 2];
qData[i] = data[i * 2 + 1];
}
// ( I''(t) & Q''(t) )
double[] qDataOffset = new double[length];
double[] iDataOffset = new double[length];
// Calculate DC offset
double qOffset = mean(qData);
double iOffset = mean(iData);
// Apply DC offset
for (int i = 0; i < length; i++) {
iDataOffset[i] = iData[i] - iOffset;
qDataOffset[i] = qData[i] - qOffset;
}
// Provided equations calculated on frequency change
if(calculateMatrix) {
double alpha = Math.sqrt(2.0 * multiplyMean(iDataOffset, iDataOffset));
double sinw = (2.0 / alpha) * multiplyMean(iDataOffset, qDataOffset);
double cosw = Math.sqrt(1.0 - (sinw * sinw));
a = 1.0f / alpha;
c = -sinw / (alpha * cosw);
d = 1.0f / cosw;
}
// Replace into interleaved array
for(int i=0;i<length;i++) {
data[i*2]=(int)((iData[i]-iOffset)*a);
data[i*2+1]=(int)((iData[i]-iOffset)*c+(qData[i]-qOffset)*d);
}
}
double mean(int[] values) {
long sum = 0L;
for(int i=0;i<values.length;i++) {
sum+=values[i];
}
return ((double)sum)/values.length;
}
double multiplyMean(double[] values1, double[] values2) {
long sum = 0L;
for(int i=0;i<values1.length;i++) {
sum+=values1[i]*values2[i];
}
return ((double)sum)/values1.length;
}
我没有机会详细阅读这篇文章,但它看起来像是在某个索引变量(在你的情况下)上取 2 个向量之间的内积,如。
其它你可能感兴趣的问题
