对RF 的基础理论不太熟,所以想把最近遇到的一些问题和自己的理解记录下来,也不知对错,反正是自己的领悟。
其实这是一个很基础的东西,题目应该这样叫会比较好:how to generate multi-tone in IQ RF system.
现在的SDR基本都是采用IQ的方法来产生射频信号,就是下图这种结构,先不考虑什么调制解调之类的,仅仅是考虑如何产生两个频点的或多个频点的RF信号。
RF=ACos(2πft+φ) = A*Cos(2πft)Cos(φ) - A*Sin(2πft)Sin(φ)
I=A*Cos(φ)
Q=A*Sine(φ)
RF=I*Cos(2πft) - Q*ASin(2πft)
单频点的RF信号如何产生
要产生一个单频点的RF信号,只要让I或者Q其中一个为常量,而另一个为0即可。
比如:I=1, Q=0
所以当I=1, Q=0时, RF= Cos(2πft), 这是一个纯正弦的单频RF载波信号,频率为f,就是本振LO的频率。
我们看一下真实的代码,以及其所产生的真实信号。由于篇幅有限,截取了部分代码,附件是完整的代码,硬件是LimeSDR,本振频率设置为500MHz, 采样率为20MS/s, 这个tx_buffer的数据是这样的:IQIQIQIQIQIQIQ.....
const double sampleRate = 20e6;
const int tx_size = 8196 * 256;
float tx_buffer[2 * tx_size];
。。。。
std::cout << "SetSampleRate\n";
if (LMS_SetSampleRate(device, sampleRate, 0) != 0) error();
std::cout << "SetLOFrequency\n";
if (LMS_SetLOFrequency(device, LMS_CH_TX, 0, 500e6) != 0) error();
。。。。
for (int i = 0; i <tx_size; i++)
{
tx_buffer[2 * i] =1; // I data
tx_buffer[2 * i + 1] = 0 ; //Q data
}
另外一种产生单频点的情况:
如果限定LO=F, 产生一个频率为 f2 = F + f1 的单频信号, 如何做呢?
其实这时只要输入的IQ数据代表的信号的频率为 f1 即可,IQ调制器最基本的功能是做频谱搬移(先不要考虑他的调制功能),如果 f1 为正频率, 往F 频点的右边搬移,如果 f1 为负频率, 往F的左边搬移。
那怎么理解这个负频率呢ÿ