roj:
参考资料:
http://xialulee.spaces.live.com/blog/cns!4ee324c8acfa82db!1446.entry?wa=wsignin1.0&sa=17584458
2009/3/5
进行iq解调时两通道输出信号的相位
今天又调了调数字下变频芯片gc1012b,它是德州仪器厂生产的。上周参加电路调试培训时就用它来练手。它内部主要的部件是数字振荡器和fir低通滤波器。在它的前面,有一个实现中频采样的ad,采样得到的中频数据输入到gc1012b中,分为两路,一路与振荡器产生的正弦信号相乘,另一路与振荡器产生的余弦信号相乘,之后两路信号经过线性相位的fir低通滤波,输出。据说用了此类中频采样,数字下变频什么的,就是在搞软件无线电,我不知道何谓软件无线电,反正现在弄的就是。
为了调试数字下变频芯片,我在fpga里开辟一个rom,里面装着仿真仿出来的中频采样数据,用一个时钟信号将这里面的数据输送到gc1012b中,然后又在fpga里开了一个ram,用来接收gc1012b的输出。最后,用dsp读出ram的内容,并在集成开发调试环境中(visual dsp++)绘制数据波形。
仿的中频采样数据由下面的matlab代码产生(由一个低频的正弦作为调制信号):
fs=60e6;
fc=15e6;
n=4096;
sig_1=sin(2*pi*(0:n-1)/n);
%sig_2=0.5*cos(2*pi*(0:n-1)/(n/4));
sig=sig_1;
%sig=1;
wave=sin(2*pi*fc/fs*(0:n-1)+pi/8);
trans=sig.*wave;
trans=trans*127;
trans=trans+max(trans);
fid=fopen('sig2.txt','w');
fprintf(fid,'%d\t',int8(trans));
fclose(fid);
将该代码产生的数据文件内容粘贴到rom的存储器初始化文件(.mif)里,然后让硬件跑一下,dsp采到的数据在visual dsp++里绘制出如下的图形:
两根线条分别代表i通道和q通道的输出。可以明显的看出,除了幅度的区别以外,两者的相位几乎完全一致。我以前没有做过实际的iq解调,几乎每一个从我身后经过的人都说:为什么iq两路的相位是一样的呢?众口铄金,我也相信肯定是出了问题。
难道是下变频芯片gc1012b的配置出了问题?在matlab里仿了一下下变频的过程:
firceff=[
-12 -42 -52 7 85 46 -110 -145 82 276 ...
39 -396 -293 434 714 -273 -1400 -409 3115 6462 ...
6462 3115 -409 -1400 -273 714 434 -293 -396 39 ...
276 82 -145 -110 46 85 7 -52 -42 -12 ...
];
fs=60e6;
fc=15e6;
n=4096;
sig=sin(2*pi*(0:n-1)/n);
wave=sin(2*pi*fc/fs*(0:n-1)+pi/8);
swave=sin(2*pi*fc/fs*(0:n-1));
cwave=cos(2*pi*fc/fs*(0:n-1));
trans=sig.*wave;
reci=trans.*cwave;
recq=trans.*swave;
reci=filter(firceff,1,reci);
recq=filter(firceff,1,recq);
figure;
plot(reci,'r');
hold on;
plot(recq,'b');
其中firceff为低通fir滤波器系数,它是从gc1012b的datasheet里取得的,具有线性相位性能。下面是运行的结果:
可以看出,matlab里仿的结果也是如此,两个通道的输出相位一致。
也许大家对于正交的理解都产生了偏差?为了进行分析,我做了如下的推导:
可以看出,由于Φ相当于常数(所以sinΦ和cosΦ也相当于常数),去除高频分量后两个通道的输出仅仅只有幅度的区别,不存在相位的差异。所以上面的实验结果是正确的。
实际上所说的i通道和q通道的输出正交,实际上是指电磁波发射之后,经运动物体表面反射,doppler效应导致的回波载波的频率变化;在载波频率变化的情况下(下变频芯片的数字振荡器频率和接收信号载波不相等),i和q两路输出正交,下面的推导假设调制信号at为直流,以简化分析过程:
可以看出i通道和q通道分别含有sin和cos的项,而且这两项是时间t的函数,此时的输出就可以看出相位的差别,而这种相位的差别,正是判断正负频率的依据,判断目标是靠近还是远离。用下面的代码产生一个载波频率发生变化的信号:
fs=60e6;
%fc=15e6;
fc=14.5e6;
n=4096;
%sig=sin(2*pi*(0:n-1)/n);
sig=1;
wave=sin(2*pi*fc/fs*(0:n-1)+pi/8);
trans=sig.*wave;
trans=trans*127;
trans=trans+max(trans);
fid=fopen('sig2.txt','w');
fprintf(fid,'%d\t',int8(trans));
fclose(fid);
此时,中频信号的载波频率已经从15m变为14.5m(调制信号是直流),但下变频芯片中的数字振荡器依然输出15m的正弦和余弦,将生成的数据文件里的数据粘贴到rom的初始化文件(.mif)里,在硬件上跑了一遍,得到图形:
这就是所谓的正交吧。