USRP实战——3.深入理解调频广播

1.前言

上一篇我们对正交信号的概念进行了解释,现在我们就要使用USRP接收实际信号了。我们将从相对简单的模拟调制信号入手,而在模拟调制信号中,调频广播应该是最常见的一类信号了。虽然调频广播相对来说比较简单,但它其实还有相当丰富的细节,值得认真研究一下,我们将基于对调频广播信号的接收和分析,进一步展示USRP的使用和正交信号的概念。

除了使用UHD接收和存储信号,我们还将使用一些工具(Windows上)来分析这些信号,主要包括:
  • Adobe Auditon
  • Matlab
  • SDR#
Adobe Audition是一个专业的音频编辑软件,我们主要使用它来显示实信号的波形图、时频图和频谱图,另外它还可以将原始的信号文件(.dat)转换为标准wav文件。Audition的一个缺陷是无法直接支持正交信号,而是将正交信号的实部和虚部作为两个实信号来分别对待。SDR#可以直接显示正交信号的频谱图和时频图,可以作为前者的有力补充。
Matlab的强大就不用多说了,我们主要用它来完成信号处理的算法,还会用到它的绘图功能。
所以我们的基本流程如下,1.使用UHD接收并存储.dat信号文件;2.使用Audition导入.dat,观察其波形图和时频图,并转换成.wav文件;3.使用SDR#导入.wav文件,观察正交信号频谱图和时频图;4.使用Matlab读取.wav文件,实现信号处理和数据可视化等操作。

主要参考资料:
  1. 深层概念教学-了解RF无线电广播       National Instruments
  2. what is I/Q Data?                                National Instruments
另外还要单独提一下天线。天线在软件无线电系统中占据着非常重要的地位,用一个好的天线可以极大的提高接收信号的质量,所以不要吝啬在天线上的花费。天线本身就是一个庞大的话题,而且对动手能力要求更高。如果只是写错了代码,大不了不能通过编译。但如果在天线上犯了某些错误,轻的可能损坏设备,严重的还会受伤...

本篇中所用的天线是一个稍大的鞭状天线,长度差不多80cm,某宝一搜一大把。

2.接收信号

还是用uhd自带程序采集信号,命令如下:
rx_samples_to_file --duration 60 --rate 200e3 --freq 106.1e6 --gain 60 --ant RX1 --subdev A:0
在本人所在地(北京),106.1MHz是中央人民广播电台中国之声。这样我们就采集到了一段时长为60s,采样率为200kHz,中心频率为106.1MHz的正交信号。

原始IQ数据的dat文件下载在这里。

3.查看信号

打开Adobe Audition,用File/Import/Raw Data导入刚才生成的数据文件usrp_samples.dat,采样率指定为200000,声道为2,采样位数16bit。然后我们得到了下图。


如前所述,Audition把I路和Q路看做两个独立声道,分别画出波形图和时频图。

用File/Save as命令可以将原始数据转换为标准wav文件。再用SDR#打开刚才存储的wav文件,得到下面的截图。我们可以在SDR#中直接进行WFM的解调,这样就可以听到声音了。现在可以看到FM调制的复基带信号的频谱图和时频图(瀑布图)了。


回到Audition,选择信号的一段(样本1537796~1562454)进行放大观察。这一段附近是广播中短暂的静音,没有声音但是有导频。


精彩的部分来了。我们将用Matlab把复基带信号的样本一个一个描绘在复平面上,我把它称为复平面的“眼图”,因为它跟数字基带系统的眼图有类似之处。

首先要把wav文件读取到Matlab中,m语言脚本如下:

%read in iq data
[y,fs]=wavread('C:\Program Files\UHD\lib\uhd\examples\usrp_samples.dat.wav');
%in-phase
idata=y(:,1);
%quadrature
qdata=y(:,2);
%complex
c=idata+1i*qdata;
然后绘制复数“眼图”:

s=1537796;e=1562454;
%plot 2-D figure of samples from s to e
plot(c(s:e));
grid on;

得到的图像如下。

USRP实战——3.深入理解调频广播_第1张图片

从这个图我们可以看出,随着时间的推移,众多的复基带信号样本点在复平面上画出了一个圆形。这说明复基带信号的幅度(样本点到原点的距离)是不变的,而相位随时间不断变化,这正是角调制的意义。

不过我们只能从这个图看出已调信号是一个角调制信号,无法看出是什么具体的消息信号。这是因为这个“眼图”只有X、Y轴,把时间轴(Z轴)给压扁了。

已调信号的三维图形包含了消息信号的相关信息,下面的代码画出了包含时间要素的复基带信号的三维波形图。

%plot 3-D figure of samples from s to e
plot3(idata(s:e),qdata(s:e),linspace(s,e,e-s+1)); 
grid on;

USRP实战——3.深入理解调频广播_第2张图片

这就是此段复基带信号的“波形”。一个单频率正弦波经过FM调制后形成的已调信号,跟这种形状非常类似。下面的代码仿真了一个单音正弦波的FM调制信号。

t=linspace(1,2,500*2);
plot3(cos(4*cos(2*t)),sin(4*cos(2*t)),t);

立体声广播里有一个19kHz的正弦波导频,我们选取的这段已调信号就是由单音导频经过FM调制后形成的吗?

不是!

我们再把这段放大到足够程度,可以看到更细微的高频振动。

USRP实战——3.深入理解调频广播_第3张图片

用三维波形图显示更能说明问题。

USRP实战——3.深入理解调频广播_第4张图片

可以看到样本点在复平面上缓慢转动(这是一个低频信号调频后的效果)的同时,还在平衡位置附近做高速振动(这个才是19kHz正弦波调频后的效果)。所以,这一段复基带信号所对应的消息信号是一个低频信号和19kHz导频信号的叠加。

下面的动图展示了样本点在复平面上的运动轨迹。用Matlab生成视频的代码如下。

%animation plot
s=1537796;
for n=1:800
    plot(c(s+n:s+n+1),'x');
    axis([-0.1 0.1 -0.1 0.1]);
    axis square;
    set(gca,'XTick',[-0.1,0,0.1],'YTick',[-0.1,0,0.1]);
    grid on;
    M(n)=getframe;
end
%create video
wo=VideoWriter('d.mp4','MPEG-4');
open(wo);
writeVideo(wo,M);
close(wo);

USRP实战——3.深入理解调频广播_第5张图片

我们再来看一段普通的语音信号频率调制后生成的复基带信号的效果。

USRP实战——3.深入理解调频广播_第6张图片

USRP实战——3.深入理解调频广播_第7张图片

我们可以直接在Matlab的Figure窗口中旋转这个3d图形,当旋转到俯视角度时,就得到了二维波形图。

USRP实战——3.深入理解调频广播_第8张图片

4.FM解调

我们把FM调制的已调信号公式列出来,这个公式在任何一本讲到模拟调制的书里面都能找到。

USRP实战——3.深入理解调频广播_第9张图片

其中m(t)是消息信号。

我们再把上一篇中得到的实带通信号和对应复基带信号的转换公式写出来。

USRP实战——3.深入理解调频广播_第10张图片

可见实带通信号中的θx(t)项就等于复基带信号的相角。所以为了求出消息信号,我们只要先求出复基带信号的相角θx(t),再对其求微分即可(连续域的微分运算等效于离散域的减法运算)。

这个方法原理上非常好理解,但在实现上有个问题。我们求相角要用到atan(q/i),而atan的定义域只在-pi/2~pi/2,还需要进行相位展开,才能进行下一步运算。所以在实践中都采用另外一种算法。即先求tan(θn-θn-1),再求相角差。前者可以用当前样本点和上一个样本点的共轭相乘得到,即:

[cos(θn)+jsin(θn)]*[cos(θn-1)+jsin(θn-1)] = cos(θn-θn-1)+jsin(θn-θn-1)

具体代码如下

%demodulation of FM
%get conj of c and delay for one element
d=[0;conj(c)];
%discard the last element to get same dimension of c
d=d(1:length(c));
%[cos(theta2)+j*sin(theta2)]*[cos(theta1)-j*sin(theta1)]=cos(theta2-theta1)+j*sin(theta2-theta1)
ta=c.*d;
%so theta2-theta1=atan(imag(ta)/real(ta))
message=angle(ta);
message=message/max(message);
wavwrite(message,fs,32,'fmmmm.wav');
这样就得到了消息信号。该信号是一个实信号,采样率为200kHz。用Audition打开。


从频谱上可以看出这个立体声调频广播的消息信号不是简单的语音,而是由多个信号合成的复合信号。最低频部分40Hz~15kHz是左右声道之和(L+R),然后是19kHz的导频,23kHz~53kHz是L-R在38kHz载频上进行DSB-SC调制产生的信号,57kHz附近是RDS信号,这个也是DSB-SC调制。最上部是附加信道,也叫副信道,看频谱形状应该是一个调频信号。再看一下频谱图(Audition中Alt+z)。

USRP实战——3.深入理解调频广播_第11张图片

现在再把消息信号经过一个15kHz低通滤波器,就能得到单声道广播了。如果要听立体声广播,还需要对DSB-SC调制的L-R信号进行相干解调,这就需要用PLL对导频倍频并锁相,以得到同频同相的38kHz载波信号。

调频广播和FM模拟调制方式暂时说到这里,下一篇将讨论AM模拟调制。

你可能感兴趣的:(电子)