
递推最小二乘算法在信号处理领域应用非常广泛,该算法具有强大的目标参数跟踪能力和函数收敛快等优点,随着时间的增加,最小二乘算法的矩阵维度会急剧增加,导致计算量骤增,RLS可以解决随着时间的推移,矩阵维度增加,计算量骤增的缺点;RLS的算法其本质是利用前一时刻的参数估计值和修正项来预测下一时刻的参数估计值,不需要任何的先验统计特性,通过不断的预测(Predict)和更新(Update)2个阶段来实现其时间域状态空间的参数状态方程的估计和预测更新[9],更新如图1所示。
2 部分代码3 仿真结果 4 参考文献% 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滤波器,代替Hr21=filter(b,1,r2); % FIR滤波[ r1,r22]=add_noisedata(s,r21,fs,fs,SNR);% 产生带噪语音,信噪比为SNRM=50; % 设置M和LambdaLambda = 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('幅值')
[1]洪锋, 鲁昌华, 刘茹茹,等. 基于递推最小二乘和扩展卡尔曼滤波的开放光路红外光谱去噪[J]. 池州学院学报, 2019, 33(3):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。部分理论引用网络文献,若有侵权联系博主删除。
5 代码下载欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)