1 简介 递推最小二乘算法在信号处理领域应用非常广泛,该算法具有强大的目标参数跟踪能力和函数收敛快等优点,随着时间的增加,最小二乘算法的矩阵维度会急剧增加,导致计算量
1 简介
递推最小二乘算法在信号处理领域应用非常广泛,该算法具有强大的目标参数跟踪能力和函数收敛快等优点,随着时间的增加,最小二乘算法的矩阵维度会急剧增加,导致计算量骤增,RLS可以解决随着时间的推移,矩阵维度增加,计算量骤增的缺点;RLS的算法其本质是利用前一时刻的参数估计值和修正项来预测下一时刻的参数估计值,不需要任何的先验统计特性,通过不断的预测(Predict)和更新(Update)2个阶段来实现其时间域状态空间的参数状态方程的估计和预测更新[9],更新如图1所示。
2 部分代码
% RLS自适应语音降噪close all;clear all; clc;
filedir= []; % 设置路径
filename='1.wav'; % 设置文件名
fle=[filedir filename]; % 构成完整的路径和文件名
% [s, fs, bits] = wavread(fle); % 读入数据文件
[s, fs] = audioread(fle); % 读入数据文件
s=s-mean(s); % 消除直流分量;mean求平均值;直流分量即信号的均值,因此将原始数据直接减去其均值可消去。
s=s/max(abs(s)); % 幅值归一
N=length(s); % 语音长度
time=(0:N-1)/fs; % 设置时间刻度
SNR=5; % 设置信噪比
r2=randn(size(s)); % 产生随机噪声
b=fir1(31,0.5); % 设计FIR滤波器,代替H
r21=filter(b,1,r2); % FIR滤波
[ r1,r22]=add_noisedata(s,r21,fs,fs,SNR);% 产生带噪语音,信噪比为SNR
M=50; % 设置M和Lambda
Lambda = 0.1; % 遗忘因子
snr1=SNR_singlech(s,r1); % 计算初始信噪比
% RLS滤波
[y,~,e]=RLS(r2,r1,M,Lambda);
output=e; % RLS滤波输出
snr2=SNR_singlech(s,output); % 计算滤波后的信噪比
snr=snr2-snr1;
SN1=snr1; SN2=snr2; SN3=snr;
fprintf('原始语音信号snr1=%5.4f 带噪语音信号snr2=%5.4f RLS滤波输出语音信号snr=%5.4f\n',snr1,snr2,snr);
% wavplay(r1,fs); % 从声卡发声比较
% pause(1)
% wavplay(output,fs);
% 作图
subplot 311; plot(time,s,'k'); ylabel('幅值')
ylim([-1 1 ]); title('原始语音信号');
subplot 312; plot(time,r1,'k'); ylabel('幅值')
ylim([-1 1 ]); title('带噪语音信号');
subplot 313; plot(time,output,'k');
ylim([-1 1 ]); title('RLS滤波输出语音信号');
xlabel('时间/s'); ylabel('幅值')
3 仿真结果
4 参考文献
[1]洪锋, 鲁昌华, 刘茹茹,等. 基于递推最小二乘和扩展卡尔曼滤波的开放光路红外光谱去噪[J]. 池州学院学报, 2019, 33(3):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
https://download.csdn.net/download/qq_59747472/85170013