2025年6月,v2版本发布了。将之前五篇文章的内容合并为一篇内容发出,还增加了部分内容。本文接近二万字,能够满足专业人士的学习要求!文章中的代码可以直接转成FPGA实现,成为真正的产品。
这张图能看懂吗?熟悉软件无线电的同学应该不陌生吧?这是曾经持续十几年的研究热点话题。软件无线电的核心思想是对射频模拟信号尽可能的直接数字化,将其变换为适合DSP或计算机处理的数据流,然后通过软件来完成各种功能。在现阶段,由于受各种关键器件,特别是受ADC采样速率、工作带宽和通用DSP处理速度的限制,数字中频软件无线电正成为理想软件无线电的一种经济、适用的折中选择。在目前大多数软件无线电接收机中,一般先经模拟下变频至适当中频,然后在中频用ADC数字化后输出高速数字中频信号,再经数字下变频器(Digital Down Converter)的变频、抽取和低通滤波处理之后变为低速的基带信号,最后将基带信号送给通用DSP作后续的解调、解码、抗干扰、抗衰落、自适应均衡等处理。这样大大降低了对ADC和DSP等器件性能的要求,便于实现和降低成本。数字下变频器起到前端ADC和后端通用DSP器件之间的桥梁作用。因此,数字下变频技术是软件无线电的关键技术之一。
目前国外在DDC产品上技术领先的公司有美国的Intersil公司(前身为Harris公司)、ADI公司和Graychip公司。他们的单通道DDC代表产品有Intersil公司的HSP50016、HSP50214B、AD1公司的AD6620、Graychip公司的GC1011、GC1012等。这些器件都具有较优异的性能参数和较强的功能。许多型号的DDC芯片(如HSP50214B)的功能不仅包括下变频,还包括了成形滤波器、定时同步内插滤波器、重采样NCO、坐标变换、数字AGC(难度不比抽取滤波器小,快充慢放的技术也是一个难点)等功能,其芯片内部的各个功能模块均是可编程的,将其与通用DSP器件结合,便可构成一个标准的数字化多模式软件无线电接收机硬件平台。因此,下变频技术的用途十分广泛!
本系列文章中涉及的抽取滤波器的仿真程序就是来自于本人当年研发HSP50214芯片时写的算法程序,一定会给大家带来很多启发!说到这,就直接可以看程序了,一睹为快!
%%%%%%% 下变频仿真算法 %%%%%%%
%%%%%% File: ddc_sim1.m %%%%%%
%%%%% date: 2021-03-22 author: 算法工匠 %%%%
%%% 程序说明
% 该程序采用以下结构进行仿真。
% 信号源采用多个频率信号的组合!
% 信号源-->混频-->CIC滤波+4倍抽值-->2-32倍半带抽值(5个可选)-->fir滤波-->
% 浮点仿真!算法程序的架构如下图所示。
%%% 仿真环境
% 软件版本:2020a
%%% 改进之处
%
clear all,close all;
%---- 信号源采样 -----
fcarrier = 1401000 ; % 载波频率
fs = 128*9000; % AD采样率
Length = 11520*3; % 产生AD采样信号的数目
signal1 = 0.5*cos(2*pi*fcarrier/fs*(1:Length/3));
signal2 = cos(2*pi*fcarrier/fs*(Length/3+1:2*Length/3));
% signal3 = 0.25*cos(2*pi*fcarrier/fs*(2*Length/3+1:Length));
%%% 信号源
signal = [signal1 signal2];
%----- NCO混频 -----
% 中频1.4MHz
carrier_cos = cos(-2*pi*31/144*(1:length(signal)));
carrier_sin = sin(-2*pi*31/144*(1:length(signal)));
% 产品中使用相位查找表!
% 混频操作
mixed_data_i = signal.* carrier_cos;
mixed_data_q = signal.* carrier_sin;
%----- CIC滤波,完成4-32倍抽取 -----
% 4倍抽取
cic_dec_val = 4;
bitlen = 50; % 数据位宽
CIC_out_i = function_cic_deci(mixed_data_i,cic_dec_val);
CIC_out_q = function_cic_deci(mixed_data_q,cic_dec_val);
必须先在这里停留一段时间。因为出现了函数!这是个自编函数!只有将自编函数的内容学习了,才有继续往下走的可能!学习就需要这样一步一步的前进!
数字下变频的主要功能包括三个方面:第一是变频,数字混频器将数字中频信号和数控振荡器(Numerical Control Oscillator)产生的正交本振信号相乘,生成1/Q两路混频信号,将感兴趣的信号下变频至零中频。第二是低通滤波,滤除带外信号,提取有用信号。第三是采样速率转换,降低采样速率,以利于后续信号处理,大抽取因子范围提供了可设计成宽带或窄带数字信道的能力,并且提供了高的处理增益。
本文章的程序会包含变频和抽取,下面会继续讲解半带滤波器、fir滤波器(都可以作为抽取滤波器,代价不一样而已)。在这里先来了解一下抽取的概念。
上面程序中出现了函数function_cic_deci!这是个自编函数!只有将自编函数的内容学习了,才有继续往下走的可能!这个函数的功能是什么呢?出现了积分梳妆滤波器的概念!先来简单了解一下这个滤波器,再看程序!
这是冲激响应的公式!如何根据这个公式画原理框图呢?
由于CIC滤波器的实现非常简单,只有加减运算,没有乘法运算,在使用FPGA实现时可达到很高的处理速率,因此CIC滤波器非常适合作抽取器前的抗混叠滤波器,通过C1C滤波并抽取后把高的数据率降到较低的数据率,易于后级的HB抽取和FIR滤波。
根据上面的等效架构写程序吧!
function x5 = function_cic_deci(x,decifactor)
%%%%%%%% 程序说明 %%%%%%%%%
% 5级积分梳状滤波器,完成对输入数据decifactor倍抽取。
% CIC的结构为先积分后微分
%%%%%% 变量名定义 %%%%%%
%%% 输出变量
% x5 : CIC抽取滤波后输出数据
%%% 输入变量
% x : 原始输入数据
% decifactor: CIC抽取倍数
%%%%%% 版本升级内容 %%%%%%
%%% 增加内容
%
%%% 删除内容
% 无
%------------- 函数主体 -------------%
%------ 通过CIC滤波器下采样 -----
%---- 滤波器前后所使用的积分部分和梳状部分的数目都为5 ----
%--- 滤波器的积分部分 ---
yout1(1)=0;
yout2(1)=0;
yout3(1)=0;
yout4(1)=0;
yout5(1)=0;
for i=1:length(x)
if i==1
yout1(i)=x(i);
yout2(i)=yout1(i);
yout3(i)=yout2(i);
yout4(i)=yout3(i);
yout5(i)=yout4(i);
else
yout1(i)=yout1(i-1)+x(i);
yout2(i)=yout2(i-1)+yout1(i);
yout3(i)=yout3(i-1)+yout2(i);
yout4(i)=yout4(i-1)+yout3(i);
yout5(i)=yout5(i-1)+yout4(i);
end
end