在数字信号处理中常常用到DDC,这是因为在雷达数字信号处理中运算速度是一个非常关键的指标,虽然我们可以在中频直接对信号进行处理,但是这样就会造成一个不好的影响就是运算量大、FPGA消耗的资源多相应的产品成本也就高了(这就是一切的初衷)。
首先呢,我会从matlab仿真来看各个信号的波形,在上FPGA实现的波形。
好了废话不多说了我们首先上图,首先是模拟的一个雷达回波,这个回波的参数是带宽是9M、频率是60M的线性调频,时常是10ms,采样频率是80M,时域波形如下图。
他的频域呢如下图所示。至于为啥有负频率自行百度哈。
回波信号IQ分开后,I路波形图如下图所示(什么是IQ信号?为啥要分为IQ信号?各位可以自行思考一下哈)。
看到了吗,这就是IQ后的其中一路信号,那么肯定有人就问了,你给出了I路,哪Q路信号张啥样啊,哎,,,,本着大公无私的精神本人贴上代码,自己仿真想看啥看啥去吧(其实我是懒不想上图了)。代码中f0啦、B啦、fs啦、Ts啦、Tadd啦啥的这些参数根据你自己的需求更改就可以了。
%%%%回波信号生成
t=-Ts(3)/2+1/fs:1/fs:Ts(3)/2;
bw=cos(2*pi*(f0+B(floor(3/2+0.5))/Ts(3)*t/2).*t);
t1=1/fs:1/fs:Tadd+Ts(3);
bw = [bw,zeros(1,floor(Tadd*fs)),];
figure,plot(t1,bw); xlabel('时域回波bw');
w=-fs/2+fs/length(t1):fs/length(t1):fs/2;
BW=fftshift(fft(bw));
figure,plot(w,abs(BW));xlabel('频域回波BW');
%%%%
%%%%数字下变频%%%%
bwI = bw.*cos(2*pi*f0*t1);
bwQ = -bw.*sin(2*pi*f0*t1); %%下变频,
BWI=fftshift(fft(bwI));
figure,plot(w,bwI);xlabel('I波形时域波形');
这下呢,你们就可以开开心心的开每一处的时域波形或者频谱了。哈哈~
说了这么多,理论部分说完了,现在就是实现部分啦,好看下面的代码———不对啊不应该是先上图吗,呃因为写这个博客的时候没有带板卡所以没得图(这次是真的),所以还是看代码吧。
wire DDS_tvalid;
wire[31:0] nco_tdata;
dds_compiler_nco dds_compiler_nco_i (
.aclk(clk), // input wire aclk
.aresetn(Rcv_Gate), // input wire aresetn
.m_axis_data_tvalid(DDS_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(nco_tdata), // output wire [31 : 0] m_axis_data_tdata
.m_axis_phase_tvalid(), // output wire m_axis_phase_tvalid
.m_axis_phase_tdata() // output wire [15 : 0] m_axis_phase_tdata
);
// I Q converter this is I converter mult cos
wire [31:0] P_I,P_Q;
mult_nco mult_nco_I (
.CLK(clk), // input wire CLK
.A(nco_tdata[15:0]), // input wire [15 : 0] A cos
.B(adc_idata), // input wire [15 : 0] B
.P(P_I) // output wire [31 : 0] P
);
// I Q converter this is I converter mult -sin and complement +1
mult_nco mult_nco_Q (
.CLK(clk), // input wire CLK
.A((~nco_tdata[31:16])+1), // input wire [15 : 0] A -sin
.B(adc_idata), // input wire [15 : 0] B
.P(P_Q) // output wire [31 : 0] P
);
这么简单?对就这么简单,用了两个IP就完成了,剩下的部分就是和你板卡有关系的了,比如说:adc_idata就是你采集到的模拟信号,我这是16bit的你根据自己的情况更改即可,Rcv_Gate是你的采样门开启信号等一些其他信号,这样就是输出了雷达信号的IQ信号啦(关于IP的使用自己问度娘吧或者看官方手册),各位可以抓各个点的波形来和matlab的对比应该是一样的才对哦——当然你的输入信号必须是干净的,不能叠加噪声啥的。
这才是雷达数字信号处理万里长征的第一步了,后面还有好多的,如滤波、降采样、FFT、匹配滤波、IFFT、截取、加窗函数等等等等的一些算法,这一篇肯定是写不完的,以后慢慢写,,,欲知后事如何,请看下篇博客。拜拜!