数字变频技术及MATLAB仿真实现

前言

随着探测雷达的研发涉及高速信号处理、精确制导、图像成像处理技技术的不断发展,数字变频技术也越来越重要,在大规模集成电路技术、电子科学技术、控制理论以及信号处理理论的日渐成熟的发展态势下,已经逐步向精细化方向发展本文就介绍数字变频的基础内容。


一、数字变频基本概念

通信系统中的变频,简单说就是与本地振荡器产生的正弦信号(本振)进行混频,来改变信号所处的频段。提高频率则是上变频,降低频率就是下变频。例如卫星通信信号的发射,可以从基带上变频到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的变频实现方法,敬请关注。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值