软件无线电之数字下变频
1 原理
在通信系统中,为了易于信号发射以及实现信道复用,传输的信号发射频率一般很高。
在接收机中,为了降低信号的载波频率或是直接去除载波频率得到基带信号,通常将接收信号与本地振荡器产生的本振信号相乘,然后通过低通滤波器获得变频后的信号,这种技术手段则是下变频。
数字下变频(Digital Down Converter,DDC)指在接收机中对ADC采样信号混频后得到的中频信号比原始信号的频率低的一种混频方式,是软件无线电(Software Defined Radio,SDF)的核心技术之一。
数字下变频的基本流程如下图,大致可分为两个基本的模块——数控振荡器NCO(Nu-merical Control Oscillator)混频模块和抽取滤波模块。其中NCO模块产生正余弦波样本值,然后分别与输入数据相乘,完成混频。
混频后的信号通过低通滤波器和抽取器得到输出信号。
2 实例
阐述原理的时候讨论了复信号的情况,在这儿我们只看一个时域信号数字下变频的例子,复信号只是多一个通道。
假设载波信号频率30MHz
% HIGH FREQUENCY (CARRIER)
f_carrier=30
w_carrier=2*pi*f_carrier;
原始信号频率2MHz
% BASE FREQUENCY (RIDER)
f_rider=2
w_rider=2*pi*f_rider;
接收机采样率80MHz(>2倍载波频率=60MHz,满足类奈奎斯特采样定理)
% SAMPLE RATE
N=60;
fs=80;
f=0:fs/N:fs-fs/N
t=0:1/fs:(N-1)/fs;
所以载波信号是
s_carrier=cos(w_carrier.*t);
ADC采样得到的信号是
s_carrier=cos(w_carrier.*t);
采样信号和本振信号做混频
%% MUL
s_multied=s_input.*s_carrier;
混频前后的频谱分别是
fre_map_input=fft(s_carrier);
fre_map_carrier=fft(s_multied);
figure
subplot(3,1,1)
plot(f,abs(fre_map_input))
title("采样输出频谱")
subplot(3,1,2)
plot(f,abs(fre_map_carrier))
title("本振叉乘输出频谱")
对比两图可知,采样信号和本振信号混频后,原始信号分量在频谱两侧上显现出来。要得到原始信号,只需要再对混频输出做低通滤波
%% FIR
st_filted = lowpass(s_multied,f_rider*4,fs);
fre_map_filted=fft(st_filted);
subplot(3,1,3)
plot(f,abs(fre_map_filted))
title("低通滤波输出频谱")
结果符合预期。
附
完整的MATLAB程序如下
%% PARAMETERS
% HIGH FREQUENCY (CARRIER)
f_carrier=30
w_carrier=2*pi*f_carrier;
% BASE FREQUENCY (RIDER)
f_rider=2
w_rider=2*pi*f_rider;
% SAMPLE RATE
N=60;
fs=80;
f=0:fs/N:fs-fs/N
t=0:1/fs:(N-1)/fs;
%% SIGNAL
s_input=cos(w_carrier.*t+w_rider*t.^2);
s_carrier=cos(w_carrier.*t);
%% MUL
s_multied=s_input.*s_carrier;
fre_map_input=fft(s_carrier);
fre_map_carrier=fft(s_multied);
figure
subplot(3,1,1)
plot(f,abs(fre_map_input))
title("采样输出频谱")
subplot(3,1,2)
plot(f,abs(fre_map_carrier))
title("本振叉乘输出频谱")
%% FIR
st_filted = lowpass(s_multied,f_rider*4,fs);
fre_map_filted=fft(st_filted);
subplot(3,1,3)
plot(f,abs(fre_map_filted))
title("低通滤波输出频谱")