SDR如何产生两个频点(或多个频点multi-tone)RF波形

对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的左边搬移。

 

那怎么理解这个负频率呢? 数据中怎么表示这个负频率呢?这里就要用到复信号了。

这是正频率的信号

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值