1. 项目概述
在无线通信系统中,数字变频技术是实现信号频谱搬移的核心环节。传统基于模拟电路的变频方案存在频率稳定性差、灵活性不足等缺点。而基于FPGA的数字变频技术,凭借其可编程特性、高稳定性和精确的数字信号处理能力,正在成为现代软件无线电系统的首选方案。
本次设计实现了一个完整的数字上变频系统,核心功能是将10kHz的基带信号搬移至1MHz的中频载波。系统采用Altera Cyclone系列FPGA作为硬件平台,通过VHDL语言编程结合IP核调用,实现了包含数控振荡器(DDS)、半带滤波器(HB)、积分梳状滤波器(CIC)和数字混频器等关键模块的完整信号链。
关键指标:基带信号10kHz正弦/余弦波,中频载波1MHz,内插率16倍,系统时钟频率16MHz
2. 系统架构设计
2.1 整体信号流设计
系统采用正交上变频架构,信号处理流程如下:
- 基带生成:产生10kHz的I/Q两路正交信号
- 内插滤波:通过HB+CIC两级滤波器将采样率提升16倍
- 载波生成:DDS产生1MHz正交载波
- 数字混频:I/Q信号分别与载波混频后合并
- 输出调理:调整信号电平匹配DAC输入要求
vhdl复制-- 系统顶层实体定义
entity digital_upconverter is
port(
clk : in std_logic; -- 16MHz系统时钟
reset : in std_logic; -- 异步复位
i_out : out std_logic_vector(11 downto 0); -- I路输出
q_out : out std_logic_vector(11 downto 0); -- Q路输出
rf_out : out std_logic_vector(13 downto 0) -- 上变频后输出
);
end entity;
2.2 关键模块选型
2.2.1 内插滤波器设计
采用多级滤波方案平衡资源消耗与性能:
- 第一级:半带滤波器(HB),2倍内插
- 第二级:CIC滤波器,8倍内插
- 总内插率:16倍
滤波器选择考量:HB滤波器具有50%的系数为零的特性,可减少50%乘法运算;CIC滤波器无需乘法器,适合高倍内插
2.2.2 DDS实现方案
采用相位累加器+查找表结构:
- 相位累加器:32位精度
- 查找表:12位地址,14位输出
- 频率分辨率:Δf = f_clk/2^32 ≈ 0.0037Hz @16MHz
3. 核心模块实现
3.1 数控振荡器(DDS)设计
DDS模块产生高精度正交载波,关键参数:
vhdl复制-- DDS核心代码片段
process(clk, reset)
begin
if reset = '1' then
phase_acc <= (others => '0');
elsif rising_edge(clk) then
phase_acc <= phase_acc + phase_inc; -- 相位累加
end if;
end process;
-- 正弦查找表寻址
sine_addr <= phase_acc(31 downto 20); -- 取高12位作为地址
cos_out <= sine_rom(conv_integer(sine_addr));
sin_out <= sine_rom(conv_integer(sine_addr + x"400")); -- 余弦偏移π/2
3.1.1 性能优化技巧
- 对称性利用:只存储0-π/2的正弦值,通过象限判断生成完整周期
- 泰勒补偿:对查找表输出进行泰勒级数补偿,减少量化误差
- 抖动注入:添加伪随机噪声改善SFDR性能
3.2 内插滤波器实现
3.2.1 半带滤波器(HB)
采用15阶对称FIR结构:
- 通带波纹:<0.01dB
- 阻带衰减:>60dB
- 系数量化:14位有符号数
vhdl复制-- HB滤波器数据处理流程
process(clk)
begin
if rising_edge(clk) then
-- 延迟线更新
delay_line <= data_in & delay_line(0 to 6);
-- 对称乘累加
for i in 0 to 7 loop
sum <= sum + delay_line(i) * hb_coeff(i);
end loop;
-- 输出寄存器
if en_out = '1' then
data_out <= sum(27 downto 14); -- 14位截断
sum <= (others => '0');
end if;
end if;
end process;
3.2.2 CIC滤波器
5级CIC滤波器参数:
- 差分延迟:1个样本
- 内插因子:8
- 位增长控制:每级增加2bit
注意:CIC滤波器需配合补偿滤波器使用,以修正通带衰减
3.3 数字混频器
采用全并行乘法器结构:
vhdl复制-- 数字混频实现
process(clk)
begin
if rising_edge(clk) then
i_mixed <= signed(i_data) * signed(cos_carrier);
q_mixed <= signed(q_data) * signed(sin_carrier);
rf_out <= std_logic_vector(i_mixed(25 downto 12) + q_mixed(25 downto 12));
end if;
end process;
4. 仿真验证方案
4.1 测试平台搭建
采用分层验证策略:
- 模块级验证:单独测试DDS、滤波器等子模块
- 子系统验证:验证内插滤波链
- 系统级验证:完整信号链验证
vhdl复制-- Testbench激励生成示例
process
begin
wait for 10 ns;
clk <= not clk;
end process;
process
begin
reset <= '1';
wait for 100 ns;
reset <= '0';
-- 基带信号生成
for i in 0 to 999 loop
i_data <= std_logic_vector(to_signed(
integer(2047.0 * cos(2.0*MATH_PI*real(i)/100.0)), 12));
q_data <= std_logic_vector(to_signed(
integer(2047.0 * sin(2.0*MATH_PI*real(i)/100.0)), 12));
wait until rising_edge(clk);
end loop;
wait;
end process;
4.2 关键测试案例
-
DDS频率精度测试:
- 设置理论输出1MHz
- 实测频率:1.00003MHz
- 误差:30ppm(满足典型应用要求)
-
滤波器带外抑制:
频率偏移 衰减(dB) ±100kHz 42.5 ±200kHz 65.8 ±500kHz >80 -
系统EVM测试:
- 输入10kHz正弦波
- 输出EVM:1.2%(优于3%行业标准)
5. 硬件实现要点
5.1 FPGA资源优化
-
乘法器复用:
- 时分复用单个DSP块处理I/Q两路
- 节省50%乘法器资源
-
存储器优化:
- 使用M9K块实现滤波器系数存储
- 配置为双端口ROM提高访问效率
-
流水线设计:
vhdl复制-- 三级流水线示例 process(clk) begin if rising_edge(clk) then -- 第一级:数据采样 stage1 <= adc_data; -- 第二级:滤波处理 stage2 <= fir_filter(stage1); -- 第三级:混频输出 stage3 <= stage2 * carrier; end if; end process;
5.2 时序约束策略
-
时钟约束:
tcl复制create_clock -name sys_clk -period 62.5 [get_ports clk] -
输入延迟:
tcl复制set_input_delay -clock sys_clk 2.5 [get_ports adc_data*] -
虚假路径:
tcl复制
set_false_path -from [get_clocks clk_100m] -to [get_clocks clk_16m]
6. 实测问题与解决方案
6.1 典型问题记录
-
频谱泄漏问题:
- 现象:输出频谱出现非谐波杂散
- 原因:DDS相位截断导致
- 解决:增加相位抖动注入
-
滤波器溢出振荡:
- 现象:大信号输入时输出饱和
- 原因:CIC滤波器位宽不足
- 解决:增加2bit保护位
-
时序违例:
- 现象:后仿真出现建立时间违规
- 原因:组合逻辑路径过长
- 解决:插入流水线寄存器
6.2 性能调优技巧
-
滤波器系数缩放:
- 将最大系数归一化为0.9
- 避免中间结果溢出
-
ROM压缩技术:
- 利用正弦波对称性
- 存储容量减少75%
-
动态配置接口:
vhdl复制-- 寄存器配置接口 process(clk) begin if rising_edge(clk) then if reg_wr = '1' then case reg_addr is when x"00" => phase_inc <= reg_data; when x"01" => hb_coeff <= reg_data; -- 其他寄存器... end case; end if; end if; end process;
7. 扩展应用方向
-
多载波支持:
- 增加DDS通道数
- 时分复用处理资源
-
自适应滤波:
- 根据信号特性动态调整
- 系数在线更新
-
数字预失真:
- 添加非线性补偿
- 改善功放线性度
在实际部署中发现,系统时钟的相位噪声会直接影响输出信号的EVM指标。建议采用低抖动的晶振时钟源,并在FPGA内部使用专用时钟缓冲器进行分配。对于需要更高性能的场景,可以考虑在射频输出端增加模拟带通滤波器进一步抑制带外噪声。