说明
根据《模拟调制解调通用过程》,假设IQ已经做了AFC。
SSB-SC表示单边带抑制载波,即调制信号中完全没有载波项,因为是通过IQ调制的。
IQ-USB
其中\(\delta \phi\)为IQ与解调系统中的本地NCO的相位偏差。
IQ-LSB
其中\(\delta \phi\)为IQ与解调系统中的本地NCO的相位偏差。
SSB解调说明
SSB解调一般有如下几种方式:
相干同步检测-synchronous detection(中频同步解调,SDR不支持),
移相法-phasing method(希尔伯特变换法),
维弗法-Weaver method(也叫third method),
滤波器法-filtering method(FFT滤波器)。
主要提供如下解调方式:
- 移相法
- 维弗法
- 滤波器法
移相法
原理如图:
①移相法解调原理
将Q路信号进行希尔伯特滤波,将信号相位滞后90°,为了匹配Q路滤波器带来的延迟,I路进行同样的延时。
然后:如果是USB信号则用I-Q;如果是LSB信号则用I+Q。
② USB
- IQ转三角表达式
IQ因为:
基带信号为:
故:
- 对Q做HT
- I-Q得到基带信号
故:
③ LSB
- IQ转三角表达式
IQ因为:
基带信号为:
故:
- 对Q做HT
- I+Q得到基带信号
故:
④ 说明
-
关于幅度补偿
结果为\(cos(2\pi f_m n+\phi_m±\delta\phi)\)的2倍,这是移相法的优点:幅度补偿。由于某些中频NCO没有2倍的补偿,所以中频之后信号幅度衰减一半,移相法后幅度恢复到与基带信号一致; -
关于结果可行度
为什么可以认为\(2*cos(2\pi f_m n+\phi_m±\delta\phi)\)就是恢复的基带信号呢?
AFC之后,\(\delta\phi\)可能是恒定,也可能是细小变化的,这个值影响的是基带信号\(cos(2\pi f_m n+\phi_m)\)的相位变化,对于音频信号这影响可能会非常小。
根据:https://www.dsprelated.com/blogs.php?searchfor=SSB
可知4KHz带宽的音频信号,小于150Hz的频偏,人耳是可以容忍的。当频偏过大,音频将变形像“唐老鸭”的声音。
然后这么大的频偏是无法通过AFC的,故对于音频信号而言,SSB是没什么压力的。
如图频偏小于0会让边带重叠,频偏大于0会让边带远离DC。
- 关于I路信号
执行了AFC之后的I路信号为:
可以看到,这与经过了移相法之后恢复的信号差了2倍关系,所以即使不做移相法,我们直接取I路信号似乎就是我们想要的结果,所以移相法唯一的作用似乎就是对I路信号乘了2?
其实,除了移相法是同时利用了I、Q两路的数据,可以认为相比于只用I路数据,IQ都利用更能抗干扰。【个人理解,无参考依据】
- 关于SSB与DSB的对比
由于双边带里的相偏因素\(\delta \phi\)直接作用到了基带信号的幅度,
AM:
DSB:
一旦这个频偏的为0或者趋近于0,那么基带信号无法被恢复,所以一定需要一些手段将其去掉,很幸运的是,我们根据双边带的特性,使用了一些PLL可以来实现这个目的。
然而:
SSB里的相偏因素\(\delta \phi\)是作用在基带信号的相位里的,这给信号的幅度变换带来了一定的缓冲,相偏变化后并不会像DSB那样立即影响到幅度;根据SSB的特性,我们似乎也无法找到合适的环来去掉这个相偏,只能通过同步技术AFC尽量使信号与接收机频率同步,以此来提高误码率。
然而对于其他对误码率要求高的通信方式,SSB是远没有双边带或频率调制表现好的,因为我们似乎永远无法消除这里的\(\delta \phi\)(不要陷入如何使用PLL去除偏移的牛角尖,因为根本不可能,这也是SSB可靠性低的原因)。
SSB不受欢迎的另一个原因就是解调电路太复杂了,正如这篇文章一样复杂。
例子1-refer from liquid
int FIRHILB(_c2r_execute)(FIRHILB() _q,
T complex _x,
T * _y0,
T * _y1)
{
T * r; // buffer read pointer
T yi; //
T yq; //
if (_q->toggle == 0) {
// push samples into appropriate buffers
WINDOW(_push)(_q->w0, crealf(_x));
WINDOW(_push)(_q->w1, cimagf(_x));
// compute delay branch
WINDOW(_index)(_q->w0, _q->m-1, &yi);
// compute filter branch
WINDOW(_read)(_q->w3, &r);
DOTPROD(_execute)(_q->dpq, r, &yq);
} else {
// push samples into appropriate buffers
WINDOW(_push)(_q->w2, crealf(_x));
WINDOW(_push)(_q->w3, cimagf(_x));
// compute delay branch
WINDOW(_index)(_q->w2, _q->m-1, &yi);
// compute filter branch
WINDOW(_read)(_q->w1, &r);
DOTPROD(_execute)(_q->dpq, r, &yq);
}
// adjust state
_q->toggle = 1 - _q->toggle;
// set return value
*_y0 = yi + yq; // lower side-band
*_y1 = yi - yq; // upper side-band
return LIQUID_OK;
}
注意:以上代码主要是用FIR实现了希尔伯特滤波器。
例子1-refer from gnuraido
-
USB
-
LSB
link:https://jeremyclark.ca/wp/telecom/rtl-sdr-for-ssb-on-gnu-radio/
注意:grc里是将I路进行的希尔伯特,Q路没变,所以USB是加,LSB是减。
维弗法
原理如图:
link:https://wiki.gnuradio.org/index.php/Simulation_example:_Single_Sideband_transceiver
①维弗法解调原理
在本地产生中频频率为\(\frac{B_n}{2}\)的正交信号,\({B_n}\)为基带信号带宽,然后分别与IQ信号相乘后相加或相减就是DSB或LSB信号,对于音频信号,这个值常取1.5KHz。
这里主要推导过程,不结合SDR实现。
②实信号推导过程
- 输入信号\(f_{rf}\)
\(\omega_c\)为载波频率,\(\omega_m\)为基带信号频率,\(\phi_n\)为基带出相
- 中频正交分解
- LPF
- 基带正交分解
三角变换后:
- 结果相加得到USB
只需要调节\(\omega_s=\omega_c-\omega_0\),即可完全得到基带信号\(cos(\omega_mt+\phi_n)\)
- 结果相减得到LSB
只需要调节\(\omega_s=\omega_c+\omega_0\),即可完全得到基带信号\(cos(\omega_mt+\phi_n)\)
由于需要对于信号带宽进行估计,不一定适用于所有的调制信号,故不对这个方法展开。
link:WeaverDocument.pdf
滤波器法
这里也简单说明,不做实现。
Gnuradio里使用Freq-xlating-filter(频移滤波器)来将有频偏的SSB移动到DC,然后滤除带宽外的噪声,然后使用。
link:
滤波器法.pdf
http://www.csun.edu/~skatz/katzpage/sdr_project/sdr/grc_tutorial4.pdf
注意:由于SSB可靠性不是很好,一般要结合AGC使用