前言
随着探测雷达的研发涉及高速信号处理、精确制导、图像成像处理技技术的不断发展,数字变频技术也越来越重要,在大规模集成电路技术、电子科学技术、控制理论以及信号处理理论的日渐成熟的发展态势下,已经逐步向精细化方向发展本文就介绍数字变频的基础内容。
一、数字变频基本概念
通信系统中的变频,简单说就是与本地振荡器产生的正弦信号(本振)进行混频,来改变信号所处的频段。提高频率则是上变频,降低频率就是下变频。例如卫星通信信号的发射,可以从基带上变频到70MHz位置,再上变频到射频位置例如C波段;而接收过程可以相反,从C波段等射频位置接收后,可以下变频到L波段,再下变频到70MHz。而这其中的70MHz就是中频(中间频率)。
1.数字混频
混频就是把两个不同的频率信号混合,得到第三个频率。在模拟电路中经常见到的就是把接收机接收到的高频信号,经过混频变成中频信号,再进行中频放大,以提高接收机的灵敏度。数字电路中最简单的混频便是两个信号做乘法,可以得到它们的和频信号与差频信号。数字混频在通信的调制、解调、DUC(数字上变频)、DDC(数字下变频)等系统中应用广泛。通常把其中一个信号称为本振信号(local oscillator),另一个信号称为混频器的输入信号。
2.数字下变频(DDC)
DDC用于滤波和降低输出数据速率。DDC的主要目的是经过数字混频将AD采集的中频(IF)数字信号频谱下变频到基带信号,然后完成抽取滤波恢复原始信号,数字下变频时采用数字信号技术来实现下变频的,它包含数字滤波、正交变换、采样、抽取等算法。主要的电路模块由四部分组成:数控振荡、数字混频、采样抽取、数字滤波。
3.数字上变频(DUC)
在无线电发射链路中,数字信号经过DA转换成模拟信号,模拟信号经过混频后得到比原始信号高的期望的射频中心频率,然后信号经过放大到适当的功率电平,最后经过限制带宽后经天线发射出去。这种混频频率向上变化的方式叫做上变频。DUC的主要目的是经过数字混频基带IQ数字信号先插值、滤波,然后上变频到数字中频信号,它包含插值、数字滤波、上变频步骤。设其输入复数信号为Idata和Qdata,其输出信号为实数。
二、数字下变频器设计(DDC)
本文以数字下变频为例进行步骤讲解和实例说明。
1.数字下变频原理
DDC主要由数字控制振荡器(NCO) 、混频器(mixer) 、滤波器(filter)等部分组成 , DDC是将中频信号与数字控制振荡器产生的载波信号进行混频 ,再经过低通滤波器得到基带信号 ,实现了下变频功能。数字下变频的基本原理同模拟下变频一样, 就是把输入信号与本地振荡信号相乘, 将射频信号通过混频, 搬移到中频段, 再进行 ADC采样。DDC的核心是将中频 A /D 采样信号与 DDC中的数字控制振荡器 (NCO )产生的本地数字中频载波信号进行混频 ,将中频信号下变频到基带。
2.数字下变频实现方式
DDC数字处理部分包括数控振荡器NCO、半带抽取滤波器、FIR滤波器、增益级和复数-实数转换模块。各处理模块都有控制线路,能单独使能或者禁用,以便提供所需的处理功能。通过配置数字下变频器,可以输出实数数据或复数数据。
正交数字下变频是将数字化后的实信号分为两路:一路乘以cos(wn),下变频到0中频,形成与原始信号相位相同的信号;另一路乘以sin(wn),下变频到0中频,形成与原信号正交的信号。其数学表达式为:
在工程应用中,通常采用带通滤波算法,先将模拟信号进行数字采样,转换成为数字信号再进行处理。采用数字正交相干检波的方法得到基带 I、Q 信号。带通滤波法仿照了传统的模拟正交采样的实现方法,只是将 A/D 变换置后,直接对中频信号带通采样,混频和滤波都是使用数字方式实现。
三、滤波抽取
经过正交数字下变频之后,得到了零中频的基带复信号,此时信号的采样率仍然是ADC采样频率(即中频信号的采样频率),数据率很高,信号的带宽远小于采样频率,所以滤波抽取(降低采样率)成为了数字下变频的一个必不可少的组成部分。抽取就是从信号中出去高频信息,降低抽样频率而不导致频谱混叠的过程。
这部分内容在之后的博客中会详细介绍。
四、MATLAB仿真实现
利用MATLAB构建某窄带信号的DDC模型,包含数控振荡器NCO生成、CIC半带抽取滤波器实现、FIR滤波器、增益级和复数-实数转换模块。
代码如下(示例):
1.信号读取及参数设置
%数字下变频全过程仿真程序 窄带信号
clear all;
close all;
clc;
fid_wide_i = fopen('data_out_wide_i.txt');
% data_wide_i = fopen('fid_wide_i.txt');
data_wide_i = fscanf(fid_wide_i,'%d');
for i = 2:1199
if data_wide_i(i) > 2^15
data_wide_i(i) = data_wide_i(i) - 2^16;
end
end
fid_wide_q = fopen('data_out_wide_q.txt');
data_wide_q = fscanf(fid_wide_q,'%d');
for i = 1:1199
if data_wide_q(i) > 2^15
data_wide_q(i) = data_wide_q(i) -2^16;
end
end
fid_wide_data_in0 = fopen('wide_data_in0.txt');
fid_wide_data_in1 = fopen('wide_data_in1.txt');
wide_data_in0 = fscanf(fid_wide_data_in0,'%d');
wide_data_in1 = fscanf(fid_wide_data_in1,'%d');
for i = 1:60000
if wide_data_in0(i) > 2^11
wide_data_in0(i) = wide_data_in0(i) - 2^12;
end
if wide_data_in1(i) > 2^11
wide_data_in1(i) = wide_data_in1(i) - 2^12;
end
end
num = 2*length(wide_data_in1);
for i = 1 : num
if(mod(i,2))
wide_data_in(i) = wide_data_in1(fix(i/2)+1);
else
wide_data_in(i) = wide_data_in0(i/2);
end
end
j=sqrt(-1);
fsamp=200e6; %采样频率
f0=250e6; %中频
Ts=1/fsamp;
fc=2e6; %混频解调信号
band=2e6; %带宽
% Tp=220e-6; %脉冲宽度
Tp=600e-6; %脉冲宽度
% Tp=50e-6; %脉冲宽度
N=Tp*fsamp;
n=0:N-1;
u=band/Tp; %u为带宽除以时宽
2.CIC滤波器设计及实现
代码如下:
%CIC滤波器参数
% mfilt.cicdecim或者fdesign.decimator
M=25; %抽取倍数
% DELAY=1;
% wp=1; %通带衰减
% ws=90; %阻带衰减
t=-Tp/2:Tp/N:Tp/2-Tp/N;
figure_i=1;
%信号源 2Mhz带宽 中频250MHZ线性调频波
% xs=cos(2*pi*(f0*t+0.5*u*t.^2)); %信号表达式
% % xs=exp(j*2*pi*(f0*t+0.5*u*t.^2));%.*(abs(t)<=Tp/2);
% xs=awgn(xs,30);
% xs1 = real(xs);
% xs = narrow_data_in';
xs = wide_data_in';
S0=fft(xs);
S1=abs(S0);
S2=(S1); %信号频谱
plot(20*log10(S2/max(S2)));title('输入LPM(2M 50us)信号采样后频谱');
f=0:fsamp/N:fsamp-fsamp/N;
figure(figure_i);
figure_i=figure_i+1;
plot(f,20*log10(S2/max(S2)));title('输入LPM(2M 50us)信号采样后频谱');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
grid on;
3.半带滤波器抽取设计
%--------先进行M倍抽取 使得采样率 200MSPS->8MSPS------------%
% xs_M=zeros(1,N/M);
% for n=1:N/M
% xs_M(n)=xs(n*M);
% end
xs_M=xs(1:M:N);
% S0_M=fft(xs_M,N/M);
S0_M=fft(xs_M);
S1_M=abs(S0_M);
S2_M=(S1_M); %信号频谱
f=0:fsamp/(N):1/M*fsamp-fsamp/(N);
figure(figure_i);
figure_i=figure_i+1;
plot(f,20*log10(S2_M/max(S2_M)));title('M(M=25)倍抽取后频谱');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
grid on;
%----------generate NCO---------%
for t=1:(N/M+1)
t1=(t-1)*Ts*M;
ncoi(t)=cos(2*pi*fc*t1);
end
for t=1:(N/M+1)
t1=(t-1)*Ts*M;
ncoq(t)=sin(2*pi*fc*t1);
end
ncoi=round(ncoi*2^14);
ncoq=round(ncoq*2^14);
f=0:fsamp/N:1/M*fsamp-fsamp/N;
u1=abs(fft(ncoi));
u2=abs(fft(ncoq));
figure(figure_i);
figure_i=figure_i+1;
plot(f,20*log10(u1/max(u1)));title('NCO(I 路(蓝)和Q路(红))');
hold on;
plot(f,20*log10(u2/max(u2)),'r');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
grid on
4.IQ两路混频输出
代码实现如下:
%--------IQ两路混频------------%
for n=1:(N/M+1)
ysi(n)=xs_M(n)*ncoi(n);
ysq(n)=xs_M(n)*ncoq(n);
end
u1=abs(fft(ysi));
u2=abs(fft(ysq));
f=0:fsamp/N:1/M*fsamp-fsamp/N;
figure(figure_i);
figure_i=figure_i+1;
plot(f,20*log10(u1/max(u1)));title('Magnitude Response(dB)(I(Blue) and Q(Red))');
hold on;
plot(f,20*log10(u2/max(u2)),'r');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
grid on
u=abs(fft(ysi+j*ysq));
figure(figure_i);
figure_i=figure_i+1;
plot(f,20*log10(u/max(u)));title('Mixing output (I+JQ)');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
grid on
5.FIR滤波设计
%--------FIR滤波器------------%
fs=fsamp;
band=25e6; %信号带宽
gdd=1e6; %过渡带宽
%wp=(band/2)*2*pi/fs;ws=(band/2+gdd)*2*pi/fs;
tr_width=gdd*2*pi/fs; %过渡带宽
rp=1; %通带波纹小于0.01dB
rs=90; %最小阻带衰减80dB
f=[band/2 band/2+gdd]; %理想低通滤波器的截止频率
a=[1 0]; %Desired amplitudes
dev=[(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)];
[NN,fo,ao,w]=firpmord(f,a,dev,fs); %NN为滤波器长度 Parks-McClellan optimal FIR filter design
fira=firpm(NN,fo,ao,w);
figure(figure_i);
figure_i=figure_i+1;
freqz(fira,1,1024,fs);
title('FIR滤波器');%[hf,f1]=freqz(fira,1,NN,fs);
%}
fira=fir1(30,0.3);%30阶FIR LPF hamming窗 归一化截止频率0.3
ysi1=conv(fira,ysi);
ysq1=conv(fira,ysq);
fs_fir=fsamp/M;
Nu=length(ysi1);
f=0:fs_fir/Nu:fs_fir-fs_fir/Nu;
figure(figure_i);
figure_i=figure_i+1;
adg=abs(fft(ysi1));
plot(f,20*log10(adg/max(adg)));grid;title('FIR1 output Magnitude Response(dB)(I(Blue) and Q(Red)) ');
hold on;
adg=abs(fft(ysq1));
plot(f,20*log10(adg/max(adg)),'r');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
figure(figure_i);
% figure_i=figure_i+1;
ysi_IQ1=ysi1+j*ysq1;
adg=abs(fft(ysi_IQ1));
plot(f,20*log10(adg/max(adg)));grid;title('Frequency spectrum of FIR output signal (I+JQ)');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
6.仿真波形输出
最后就是对仿真波形进行输出,代码如下:
figure(8);
ysi2=ysi1(1:2:end);
ysq2=ysq1(1:2:end);
ysi_IQ2=ysi2+j*ysq2;
adg3=abs(fft(ysi_IQ2));
Nu3=length(ysi2);
f3=0:2e6/Nu3:2e6-2e6/Nu3;
plot(f3,20*log10(adg3/max(adg3)));grid;title('2倍抽取 FIR输出信号频谱(I+JQ)');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
figure(9);
ysi=ysi1(1:4:end);
ysq=ysq1(1:4:end);
ysi_IQ=ysi+j*ysq;
adg1=abs(fft(ysi_IQ));
Nu2=length(ysi);
f2=0:2e6/Nu2:2e6-2e6/Nu2;
plot(f2,20*log10(adg1/max(adg1)));grid;title('4倍抽取 FIR输出信号频谱(I+JQ)');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
%}
figure(10);
Nu2=length(data_wide_i);
f2=0:2e6/Nu2:2e6-2e6/Nu2;
ysi_IQ2=data_wide_i+j*data_wide_q;
adg2=abs(fft(ysi_IQ2));
plot(f2,20*log10(adg2/max(adg2)));grid;title('FPGA FIR输出信号频谱(I+JQ)');
xlabel('frequency (Hz)');
ylabel('Magnitude (dB)');
资源地址:Radar_ddc
链接:https://pan.baidu.com/s/1S6MbyFnT9M-ISHs8ZYL7NQ
提取码:7h69
总结
以上就是今天要讲的内容,本文仅仅简单介绍了数字变频技术的基本概念,工程应用常见的实例方法,以及MATLAB仿真的实现。后面会介绍基于FPGA的变频实现方法,敬请关注。