自适应滤波器LMS、RLS matlab代码实现
自适应滤波器 · 系统辨识
1.系统框图
2. 实验步骤
3.实验代码
3.1 生成未知系统
-
假设FIR系统(阶数设置为M)
利用fir1函数生成FIR滤波器,用stem画出系统时域的冲激响应图,利用freqz和unwrap函数画出系统频域的幅度和相位响应
% step1 定义未知系统(FIR滤波器)的阶数和截止频率 M = 32; % 滤波器阶数 h_true = fir1(M, 0.3); % 生成未知系统 % 分析频率响应 figure(1); subplot(3,1,1); stem(h_true); title('未知系统的冲激响应'); grid on; % 绘制相位响应 subplot(3, 1, 2); [H,w] = freqz(h_true, 1); plot(w/pi,abs(H)); grid on; title('未知系统的幅度响应'); ylabel('幅度'); subplot(3,1,3); plot(w/pi, unwrap(angle(H))); grid on; title('未知系统的相位响应'); ylabel('弧度');
3.2 产生输入白噪声信号
% step2 产生随机输入的白噪声信号
N_filter = M + 10; % 估计自适应滤波器阶数
N = 1000; % 信号长度
x = randn(N, 1); % 生成输入信号
3.3 初始化LMS自适应滤波器
% step3 初始化自适应滤波器
P = sum(x.^2)/N; % 输入信号功率
mu = 1/(N_filter*P);
mu = mu /10;
d = filter(h_true, 1, x); % 生成期望信号
w_lms = zeros(N_filter, 1);
mse_values = zeros(N-N_filter+1, 1);
err_lms = zeros