一、任务
设计并制作一个自适应滤波器,用来滤除特定的干扰信号。自适应滤波器工作频率为 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。
本设计基于FPGA(如Xilinx Spartan或Altera Cyclone),系统包括以下模块:
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
将上述模块集成在一起,形成完整的自适应滤波器系统。
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算法实现。
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
in_C
与滤波器输出filter_out
之差。通过持续调节权值,LMS自适应滤波器能够有效消除输入信号中的干扰成分,使输出信号尽可能接近有用信号。
这个题目考察的知识点:
题目要求学生在理解信号处理原理的基础上,具备硬件设计与编程的综合能力。