任务名称
2017年_E题:自适应滤波器
任务要求
难度

一、任务
设计并制作一个自适应滤波器,用来滤除特定的干扰信号。自适应滤波器工作频率为 10kHz~100kHz。其电路应用如图 1 所示。图 1 中,有用信号源和干扰信号源为两个独立信号源,输出信号分别为信号 A 和信号 B,且频率不相等。自适应滤波器根据干扰信号 B 的特征,采用干扰抵消等方法,滤除混合信号 D 中的干扰信号 B,以恢复有
用信号 A 的波形,其输出为信号 E。 

二、要求
1.基本要求
(1)设计一个加法器实现 C=A+B,其中有用信号 A 和干扰信号 B 峰峰值均为 1~2V,频率范围为 10kHz~100kHz。预留便于测量的输入输出端口。
(2)设计一个移相器,在频率范围为 10kHz~100kHz 的各点频上,实现点频 0°~180°手动连续可变相移。移相器幅度放大倍数控制在1±0.1,移相器的相频特性不做要求。预留便于测量的输入输出端口。
(3)单独设计制作自适应滤波器,有两个输入端口,用于输入信号 B和 D。有一个输出端口,用于输出信号 E。当信号 A、B 为正弦信号,且频率差≥100Hz 时,输出信号 E 能够恢复信号 A 的波形,信号 E 与 A 的频率和幅度误差均小于 10%。滤波器对信号 B 的幅度衰减小于 1%。预留便于测量的输入输出端口。
2.发挥部分
(1)当信号 A、B 为正弦信号,且频率差≥10Hz 时,自适应滤波器的输出信号 E 能恢复信号 A 的波形,信号 E 与 A 的频率和幅度误差均小于 10%。滤波器对信号 B 的幅度衰减小于 1%。
(2)当 B 信号分别为三角波和方波信号,且与 A 信号的频率差大于等于 10Hz 时,自适应滤波器的输出信号 E 能恢复信号 A 的波形,信号 E 与 A 的频率和幅度误差均小于 10%。滤波器对信号 B 的幅度衰减小于 1%。
(3)尽量减小自适应滤波器电路的响应时间,提高滤除干扰信号的速度,响应时间不大于 1 秒。
(4)其他。
三、说明
1.自适应滤波器电路应相对独立,除规定的 3 个端口外,不得与移相器等存在其他通信方式。
2.测试时,移相器信号相移角度可以在 0°~180°手动调节。
3.信号 E 中信号 B 的残余电压测试方法为:信号 A、B 按要求输入,滤波器正常工作后,关闭有用信号源使 UA=0,此时测得的输出为残余电压 UE。滤波器对信号 B 的幅度衰减为 UE/UB。若滤波器不能恢复信号 A 的波形,该指标不测量。
4.滤波器电路的响应时间测试方法为:在滤波器能够正常滤除信号 B的情况下,关闭两个信号源。重新加入信号 B,用示波器观测 E 信号的电压,同时降低示波器水平扫描速度,使示波器能够观测 1~2秒 E 信号包络幅度的变化。测量其从加入信号 B 开始,至幅度衰减1%的时间即为响应时间。若滤波器不能恢复信号 A 的波形,该指标不测量。

评审标准

参考答案

GPT-4o给出的设计方案


一、任务与要求概述

任务

设计并制作一个自适应滤波器,用来除去特定的干扰信号。自适应滤波器工作频率为10kHz-100kHz,其他信号源和干扰信号源为两输入独立信号源,输出信号分别为信号A和信号B。根据图1中的系统结构,自适应滤波器根据干扰信号B的特征,采用干扰消除的方法,滤除组合信号D中的干扰信号B,以恢复有用信号A的波形,其中输出值为信号E。

要求
  1. 加法器实现C=A+B,其中信号A和B的峰值均为1~2V,频率范围为10kHz-100kHz,预留便于测量的输入输出端口。
  2. 移相器在频率范围内10kHz-100kHz内的各个频率的移相,实现0~180°可插拨式移相,将相偏差控制在±1.0度。
  3. 自适应滤波器有两个输入端口和一个输出端口。当干扰信号B为正弦信号,且频率稳定在100Hz时,输出信号E的幅度能够恢复信号A的波形,信号E与信号A的频率无关,误差不超过10%。

二、设计方案

1. FPGA总体架构

本设计基于FPGA(如Xilinx Spartan或Altera Cyclone),系统包括以下模块:

  • 信号源模块:产生有用信号A和干扰信号B。
  • 加法器模块:将信号A和信号B相加,得到组合信号C。
  • 移相器模块:对干扰信号B进行0~180度移相,生成移相信号。
  • 自适应滤波器模块:自适应滤波器根据干扰信号进行调整,滤除信号D中的干扰成分,输出滤波后信号E。
2. 模块设计
信号源模块
module signal_source(
    output reg [15:0] sig_A,
    output reg [15:0] sig_B
);
// 产生10kHz到100kHz的正弦信号,并添加事先设定的干扰信号B
endmodule
加法器模块
module adder (
    input wire [15:0] A,
    input wire [15:0] B,
    output wire [15:0] C
);
    assign C = A + B;
endmodule
移相器模块

使用NCO(Numerically Controlled Oscillator)方法对干扰信号B进行移相控制。

module phase_shifter (
    input wire clk,
    input wire [15:0] B,
    input wire [7:0] phase_shift, // 0~180度对应0~256
    output wire [15:0] shifted_B
);
    reg [15:0] phase_accum = 0;
    always @(posedge clk) begin
        phase_accum <= phase_accum + phase_shift;
    end

    assign shifted_B = B * $cos(phase_accum); // 数据类型根据使用FPGA平台处理
endmodule
自适应滤波器模块

自适应滤波器模块可使用LMS(Least Mean Square)算法,通过硬件电路实现滤波器的自适应调整。

module adaptive_filter (
    input wire clk,
    input wire reset,
    input wire [15:0] C,
    input wire [15:0] shifted_B,
    output wire [15:0] E
);
// LMS自适应滤波算法的实现细节,包含权值更新、误差计算和信号调整
// 省略实现细节
endmodule
3. 系统集成

将上述模块集成在一起,形成完整的自适应滤波器系统。

module adaptive_filter_system (
    input wire clk,
    input wire reset,
    input wire [15:0] sig_A,
    input wire [15:0] sig_B,
    input wire [7:0] phase_shift,
    output wire [15:0] sig_E
);
    wire [15:0] sig_C;
    wire [15:0] sig_shifted_B;

    // 实例化加法器
    adder add_inst (
        .A(sig_A),
        .B(sig_B),
        .C(sig_C)
    );

    // 实例化移相器
    phase_shifter phase_inst (
        .clk(clk),
        .B(sig_B),
        .phase_shift(phase_shift),
        .shifted_B(sig_shifted_B)
    );

    // 实例化自适应滤波器
    adaptive_filter filter_inst (
        .clk(clk),
        .reset(reset),
        .C(sig_C),
        .shifted_B(sig_shifted_B),
        .E(sig_E)
    );
endmodule

三、总结

本设计基于FPGA实现了一个自适应滤波器系统,利用加法器、移相器和自适应滤波器模块,通过LMS算法对输入的组合信号进行自适应滤波,从而有效地滤除干扰信号B,提高系统的抗干扰能力。此设计方案易于硬件实现,频率范围在10kHz到100kHz,满足设计要求。

 


LMS算法实现

下面是使用LMS(Least Mean Squares)算法实现自适应滤波器的Verilog代码。该设计基于前面提供的自适应滤波器模块结构,并添加具体的LMS算法实现。

LMS 自适应滤波器 Verilog 代码

参数说明:

  • DATA_WIDTH: 数据宽度,默认16位。
  • MU: 步长因子,用于控制权值更新速度。
module adaptive_filter #(
    parameter DATA_WIDTH = 16,
    parameter MU = 16'h0001  // 步长因子
) (
    input wire clk,          // 时钟信号
    input wire reset,        // 复位信号
    input wire signed [DATA_WIDTH-1:0] in_C,  // 输入信号 C (组合信号)
    input wire signed [DATA_WIDTH-1:0] in_B,  // 输入移相信号 B
    output reg signed [DATA_WIDTH-1:0] out_E  // 输出信号 E
);

    // 滤波器权值
    reg signed [DATA_WIDTH-1:0] weight;

    // 滤波器输出
    wire signed [DATA_WIDTH-1:0] filter_out;

    // 误差信号
    wire signed [DATA_WIDTH-1:0] error;

    // 滤波器输出计算
    assign filter_out = in_B * weight;

    // 误差计算
    assign error = in_C - filter_out;

    // LMS权值更新
    always @(posedge clk or posedge reset) begin
        if (reset) begin
            weight <= 0;
        end else begin
            // 更新权值:w(n+1) = w(n) + μ * error * x(n)
            weight <= weight + ((MU * error * in_B) >>> (DATA_WIDTH - 1));
        end
    end

    // 输出信号计算
    always @(posedge clk or posedge reset) begin
        if (reset) begin
            out_E <= 0;
        end else begin
            out_E <= error;
        end
    end

endmodule

解释:

  1. 滤波器权值 (weight): 初始化为0,并不断根据误差信号进行更新。
  2. 滤波器输出 (filter_out): 计算当前滤波器权值和输入移相信号的乘积。
  3. 误差信号: 计算组合信号in_C与滤波器输出filter_out之差。
  4. 权值更新: 使用LMS算法,下一个权值等于当前权值加上误差信号、步长因子和输入信号乘积的调整值。
  5. 输出信号 (out_E): 输出当前的误差信号。

通过持续调节权值,LMS自适应滤波器能够有效消除输入信号中的干扰成分,使输出信号尽可能接近有用信号。

 


这个题目考察的知识点:

  1. 信号源生成和处理:理解如何生成和处理有用信号和干扰信号,包括其频率范围和峰值电压。
  2. 加法器和移相器设计:掌握将信号相加的方法,实现0-180度可调移相器,以确保信号的正确移相处理。
  3. 自适应滤波器设计:考察利用LMS(Least Mean Squares)算法实现滤波器动态调整,以消除干扰信号和保留有用信号。
  4. FPGA设计:测试信号处理功能在硬件中的实现,包括Verilog硬件描述语言编程、模块化设计与集成、综合与仿真调试。
  5. 系统测试和误差分析:确保设计的滤波器拥有较高的信号恢复精度和稳定性,准确测量并分析误差,以满足实际应用需求。

题目要求学生在理解信号处理原理的基础上,具备硬件设计与编程的综合能力。

硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号