滤波器如何去除系统中的白噪音如何去除

滤波器如何去除系统中的白噪音如何去除,第1张

七种滤波去噪⽅式

1.巴特沃斯低通滤波器去噪

从图上可以看出巴特沃斯低通滤波器对信号⼀的滤波效果还是可以的,主要是因为有效的信号最⾼频率才30Hz,本程序将50Hz以上的信号全部滤除,通过的频率成分中仍然是有⽩噪声的。

对于信号⼆,滤波后的信号与没有加噪声的信号相⽐就有失真了,上升沿和下降沿的⾼频信号被滤除了。

2.FIR低通滤波器去噪

3. 移动平均滤波去噪

从上图可以看出,⽆论是对信号⼀还是对信号⼆,中值滤波的滤波效果都是很不错,特备是对于信号⼆,上升沿和下降失真⽐较的⼩。5. 维纳滤波去噪

维纳滤波器属于现代滤波器,传统的滤波器只能滤除信号和⼲扰频带没有重叠的情况,当信号和⼲扰频带有重叠的时候传统滤波器将⽆能为⼒,这时就需要⽤到现代滤波器,现代滤波器利⽤信号和⼲扰的统计特征(如⾃相关函数、功率谱等)导出⼀套最佳估值算法,然后⽤硬件或软件予以实现。

维纳滤波是以均⽅误差最⼩( LMS(Least MeanSquare) 为准则的,它根据过去观测值和当前观测值来估计信号的当前值,因此它的解

6. ⾃适应滤波去噪

维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于⾮平稳随机信号。然⽽,只有在信号和噪声的统计特

本程序是基于LMS算法的⾃适应滤波,从上图可以看出,滤波效果也是很不错的,特别是对于信号⼆,上升沿有失真,下降沿保持还可以,最要的是得到的波形⼗分的平滑。由此可见⾃适应滤波极具使⽤价值。

7. ⼩波去噪

对于信号⼆,⼩波的去噪效果⾮常不错,虽然得到波形不是很平滑,但是上升沿和下降沿保持的⾮常⾼,基本可以看到棱⾓.

firLen = 160定义了滤波器的长度

mu = 0.8定义了学习因子的大小,也是自适应算法的迭代步长

a = zeros(1,firLen)这句产生了一个1行160列的零向量。

clc

clear

% ref =wavread('in.wav')% Load near end

ref = wgn(1,1024,0).'% 我加了这句,因为我没有你的音频文件,不妨碍功能验证和你对程序原理的理解

apm = 0.1 %噪声幅度

firLen = 160% 定义了滤波器的长度

mu = 0.8% 学习因子

a = zeros(1,firLen)

dataLen = length(ref)% 获取了ref信号向量的长度

eout = zeros(1,dataLen)% 产生1行dataLen列的行向量

bbeout = zeros(1,dataLen)% 同上

firIn = zeros(1,firLen)% 同a

firIntwo = zeros(1,firLen)% 同上

noise = apm*rand(1,dataLen)% 产生随机噪声,用来干扰语音信号,实际上我这里也用噪声作为语音信号

near = ref'+noise% 产生含加性噪声的语音信号,表示语音信号被噪声污染了

%%%自适应滤波学习bbe模型

for i=1:dataLen

for j = firLen-1:-1:1

firIn(j+1) = firIn(j)

end % 这个for循环让firIn向量的后一个值等于前一个值

firIn(1) = noise(i)% 第一个值等于噪声

firOut = a*firIn' %fir滤波 这一步实现的是横向滤波器的 *** 作

e = near(i)-firOut %求误差信号

a = a+e*mu*firIn %lms 系数更新

eout(i) = e

end

% wavwrite(eout,16000,'out.wav')

figure(1)

subplot(411)

plot(ref)

title('原始信号')

subplot(412)

plot(near)

title('语音加噪信号')

subplot(413)

plot(noise)

title('噪声信号')

subplot(414)

plot(eout)

title('自适应消噪信号')

figureplot(abs(ref.' - eout))

最后一句是我加上的,想看看你的程序去噪能力怎么样,你也可以自己看看,我觉得你的程序算法那块怪怪的,你在确认下算法有没有问题

基于RLS算法和LMS的自适应滤波器的MATLAB程序是什么?

% RLS算法

randn('seed', 0)

rand('seed', 0)

NoOfData = 8000 % Set no of data points used for training

Order = 32 % 自适应滤波权数

Lambda = 0.98 % 遗忘因子

Delta = 0.001 % 相关矩阵R的初始化

x = randn(NoOfData, 1) %高斯随机系列

h = rand(Order, 1) % 系统随机抽样

d = filter(h, 1, x) % 期望输出

% RLS算法的初始化

P = Delta * eye ( Order, Order ) %相关矩阵

w = zeros ( Order, 1 ) %滤波系数矢量的初始化

% RLS Adaptation

for n = Order : NoOfData

u = x(n:-1:n-Order+1) %延时函数

pi_ = u' * P %互相关函数

k = Lambda + pi_ * u

K = pi_'/k%增益矢量

e(n) = d(n) - w' * u %误差函数

w = w + K * e(n) %递归公式

PPrime = K * pi_

P = ( P - PPrime ) / Lambda %误差相关矩阵

w_err(n) = norm(h - w) %真实估计误差

end

% 作图表示结果

figure

plot(20*log10(abs(e))) %| e |的误差曲线

title('学习曲线')

xlabel('迭代次数')

ylabel('输出误差估计')

figure

semilogy(w_err) %作实际估计误差图

title('矢量估计误差')

xlabel('迭代次数')

ylabel('误差权矢量')

%lms 算法

clear all

close all

hold off%系统信道权数

sysorder = 5 %抽头数

N=1000%总采样次数

inp = randn(N,1)%产生高斯随机系列

n = randn(N,1)

[b,a] = butter(2,0.25)

Gz = tf(b,a,-1)%逆变换函数

h= [0.09760.28730.33600.22100.0964]%信道特性向量

y = lsim(Gz,inp)%加入噪声

n = n * std(y)/(10*std(n))%噪声信号

d = y + n%期望输出信号

totallength=size(d,1)%步长

N=60 %60节点作为训练序列

%算法的开始

w = zeros ( sysorder , 1 ) %初始化

for n = sysorder : N

u = inp(n:-1:n-sysorder+1) % u的矩阵

y(n)= w' * u%系统输出

e(n) = d(n) - y(n) %误差

if n <20

mu=0.32

else

mu=0.15

end

w = w + mu * u * e(n) %迭代方程

end

%检验结果

for n = N+1 : totallength

u = inp(n:-1:n-sysorder+1)

y(n) = w' * u

e(n) = d(n) - y(n) %误差

end

hold on

plot(d)

plot(y,'r')

title('系统输出')

xlabel('样本')

ylabel('实际输出')

figure

semilogy((abs(e))) % e的绝对值坐标

title('误差曲线')

xlabel('样本')

ylabel('误差矢量')

figure%作图

plot(h, 'k+')

hold on

plot(w, 'r*')

legend('实际权矢量','估计权矢量')

title('比较实际和估计权矢量')

axis([0 6 0.05 0.35])

急求:基于RLS算法和LMS算法的正弦信号的自适应滤波器的MATLAB的仿真程序.

数字滤波器在数字信号处理中的应用广泛,是数字信号处理的重要基础。自适应滤波器可以不必事先给定信号及噪声的自相关函数,它可以利用前一时刻已获得的滤波器参数自动地调节现时刻的滤波器参数使得滤波器输出和未知的输入之间的均方误差最小化,从而它可以实现最优滤波。

自适应滤波器的算法有很多,有RLS(递归最小二乘法)和LMS(最小均方算法)等。自适应LMS算法是一种很有用且很简单的估计梯度的方法,在信号处理中得到广泛应用。

本论文主要研究了自适应滤波器的基本结构和原理,然后介绍了最小均方误差算法(LMS算法),并完成了一种基于MATLAB平台的自适应LMS自适应滤波器的设计,同时实现了对信号进行初步的降噪处理。

通过仿真,我们实现了LMS自适应滤波算法,并从结果得知步长和滤波器的阶数是滤波器中很重要的两个参数,并通过修改它们证实了这一点,其中步长影响着收敛时间,而且阶数的大小也会大大地影响自适应滤波器的性能。

求基于LMS自适应滤波器的详细资料

自适应滤波器实际上是一种能够自动调整本身参数的特殊维纳滤波器,在设计时不需要预先知道关于输入信号和噪声的统计特性,它能够在工作过程中逐步“了解” 或估计出所需的统计特性,并以此为依据自动调整自身的参数,以达到最佳滤波效果。一旦输入信号的统计特性发生变化,它又能够跟踪这种变化,自动调整参数,使滤波器性能重新达到最佳。 自适应滤波器由参数可调的数字滤波器(或称为自适应处理器)和自适应算法两部分组成,如图7-3所示。参数可调数字滤波器可以是FIR数字滤波器或IIR数字滤波器,也可以是格型数字滤波器。输入信号x(n)通过参数可调数字滤波器后产生输出信号(或响应)y(n),将其与参考信号(或称期望响应)d(n)进行比较,形成误差信号e(n),并以此通过某种自适应算法对滤波器参数进行调整,最终使e(n)的均方值最小。尽管自适应滤波器具有各种不同的算法和结构,但是,其最本质特征是始终不变的。这种最本质的特征可以概括为:自适应滤波器依据用户可以接受的准则或性能规范,在未知的而且可能是时变的环境中正常运行,而无须人为的干预。本章主要讨论的是基于维纳滤波器理论的最小均方(LMS)算法,可以看到LMS算法的主要优点是算法简单、运算量小、易于实现;其主要缺点是收敛速度较慢,而且与输入信号的统计特性有关。 自适应线性滤波器是一种参数可自适应调整的有限冲激响应(FIR)数字滤波器,具有非递归结构形式。因为它的分析和实现比较简单,所以在大多数自适应信号处理系统中得到了广泛应用。如图7-4所示的是自适应线性滤波器的一般形式。输入信号矢量x(n)的L+1个元素,既可以通过在同一时刻对L+1个不同信号源取样得到,也可以通过对同一信号源在n以前L+1个时刻取样得到。前者称为多输入情况,如图7-5所示,后者称为单输入情况如图7-4所示,这两种情况下输入信号矢量都用x(n)表示,但应注意它们有如下区别。 单输入情况: (7-18) 多输入情况: (7-19) 单输入情况下x(n)是一个时间序列,其元素由一个信号在不同时刻的取样值构成;而多输入情况下x(n)是一个空间序列,其元素由同一时刻的一组取样值构成,相当于并行输入。 对于一组固定的权系数来说,线性滤波器是输出y(n)等于输入矢量x(n)的各元素的线性加权之和。然而实际上权系数是可调的,调整权系数的过程叫做自适应过程。在自适应过程中,各个权系数不仅是误差信号e(n)的函数,而且还可能是输入信号的函数,因此,自适应线性滤波器的输出就不再是输入信号的线性函数。 输入信号和输出信号之间的关系为 单输入情况: (7-20) 多输入情况: (7-21) 如图7-4所示的单输入自适应线性滤波器,实际上是一个时变横向数字滤波器,有时称为自适应横向滤波器。它在信号处理中应用很广泛。自适应线性滤波器的L+1个权系数构成一个权系数矢量,称为权矢量,用w(n)表示,即 (7-22) 这样,输出响应表示为 (7-23) 参考响应与输出响应之差称为误差信号,用e(n)表示,即 (7-24) 自适应线性滤波器按照误差信号均方值(或平均功率)最小的准则,即 (7-25) 来自动调整权矢量。

急求,matlab自适应滤波器的程序

clear all

close all

%channel system order

sysorder = 5

% Number of system points

N=2000

inp = randn(N,1)

n = randn(N,1)

[b,a] = butter(2,0.25)

Gz = tf(b,a,-1)

%This function is submitted to make inverse Z-transform (Matlab central file exchange)

%The first sysorder weight value

%h=ldiv(b,a,sysorder)'

% if you use ldiv this will give h :filter weights to be

h= [0.0976

0.2873

0.3360

0.2210

0.0964]

y = lsim(Gz,inp)

%add some noise

n = n * std(y)/(10*std(n))

d = y + n

totallength=size(d,1)

%Take 60 points for training

N=60

%begin of algorithm

w = zeros ( sysorder , 1 )

for n = sysorder : N

u = inp(n:-1:n-sysorder+1)

y(n)= w' * u

e(n) = d(n) - y(n)

% Start with big mu for speeding the convergence then slow down to reach the correct weights

if n <20

mu=0.32

else

mu=0.15

end

w = w + mu * u * e(n)

end

%check of results

for n = N+1 : totallength

u = inp(n:-1:n-sysorder+1)

y(n) = w' * u

e(n) = d(n) - y(n)

end

hold on

plot(d)

plot(y,'r')

title('System output')

xlabel('Samples')

ylabel('True and estimated output')

figure

semilogy((abs(e)))

title('Error curve')

xlabel('Samples')

ylabel('Error value')

figure

plot(h, 'k+')

hold on

plot(w, 'r*')

legend('Actual weights','Estimated weights')

title('Comparison of the actual weights and the estimated weights')

axis([0 6 0.05 0.35])

% RLS 算法

randn('seed', 0)

rand('seed', 0)

NoOfData = 8000 % Set no of data points used for training

Order = 32 % Set the adaptive filter order

Lambda = 0.98 % Set the fetting factor

Delta = 0.001 % R initialized to Delta*I

x = randn(NoOfData, 1) % Input assumed to be white

h = rand(Order, 1) % System picked randomly

d = filter(h, 1, x) % Generate output (desired signal)

% Initialize RLS

P = Delta * eye ( Order, Order )

w = zeros ( Order, 1 )

% RLS Adaptation

for n = Order : NoOfData

u = x(n:-1:n-Order+1)

pi_ = u' * P

k = Lambda + pi_ * u

K = pi_'/k

e(n) = d(n) - w' * u

w = w + K * e(n)

PPrime = K * pi_

P = ( P - PPrime ) / Lambda

w_err(n) = norm(h - w)

end

% Plot results

figure

plot(20*log10(abs(e)))

title('Learning Curve')

xlabel('Iteration Number')

ylabel('Output Estimation Error in dB')

figure

semilogy(w_err)

title('Weight Estimation Error')

xlabel('Iteration Number')

ylabel('Weight Error in dB')

急求基于遗传算法的自适应滤波器matlab仿真程序代码?谢谢

处理的重要基础。自适应滤波器可以不必事先给定信号及噪声的自相关函数,它可以利用前一时刻已获得的滤波器参数自动地调节现时刻的滤波器参数使得滤波器输出和未知的输入之间的均方误差最小化,从而它可以实现最优滤波。

自适应滤波器的算法有很多,有RLS(递归最小二乘法)和LMS(最小均方算法)等。自适应LMS算法是一种很有用且很简单的估计梯度的方法,在信号处理中得到广泛应用。

本论文主要研究了自适应滤波器的基本结构和原理,然后介绍了最小均方误差算法(LMS算法),并完成了一种基于MATLAB平台的自适应LMS自适应滤波器的设计,同时实现了对信号进行初步的降噪处理。

通过仿真,我们实现了LMS自适应滤波算法,并从结果得知步长和滤波器的阶数是滤波器中很重要的两个参数,并通过修改它们证实了这一点,其中步长影响着收敛时间,而且阶数的大小也会大大地影响自适应滤波器的性能。

变步长LMS自适应滤波算法的MATLAB程序, 用Matlab软件实现变长NLMS自适应滤波器算法

clear all

close all

N=10%滤波器阶数

sample_N=500%采样点数

A=1%信号幅度

snr=10%信噪比

t=1:sample_N

length_t=100%期望信号序列长度

d=A*sin(2*pi*t/length_t)%期望信号

M=length(d)%M为接收数据长度

x=awgn(d,snr)%经过信道(加噪声)

delta=1/(10*N*(A^2))%计算能够使LMS算法收敛的delta

y=zeros(1,M)

h=zeros(1,N)%LMS滤波器系数

h_normalized=zeros(1,N)%归一化LMS滤波器系数

y1=zeros(1,N)

for n=N:M %系数调整LMS算法

x1=x(n:-1:n-N+1)

%LMS算法

y(n)=h*x1'

e(n)=d(n)-y(n)

h=h+delta*e(n)*x1

%NLMS算法

y_normalized(n)=h_normalized*x1'

e_normalized(n)=d(n)-y_normalized(n)

h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1')

end

error=e.^2%LMS算法每一步迭代的均方误差

error_normalized=e_normalized.^2%NLMS算法每一步迭代的均方误差

for n=N:M %利用求解得到的h,与输入信号x做卷积,得到滤波后结果

x2=x(n:-1:n-N+1)

y1(n)=h*x2'

y2(n)=h_normalized*x2'

end

subplot(411)

plot(t,d)

axis([1,sample_N,-2,2])

subplot(412)

plot(t,x)

subplot(413)

plot(t,y)

subplot(414)

plot(t,y_normalized)

figure(2)

plot(t,error,'r',t,error_normalized,'b')

自适应滤波器的算法如何用MATLAB去编

帮你在百度文库里找到这个算法,自适应噪声抵消LMS算法Matlab仿真,希望对你有帮助。如有问题,可以再讨论解决。

求基于RLS算法和LMS的自适应均衡系统的MATLAB程序``

里面有些代码有问题,可以参考,代码还是自己写:!

%基于RLS算法的自适应线性预测

clc

clear all

N=300

M=100%计算的次数

w1=zeros(N,M)w2=zeros(N,M)I=eye(2)e1=zeros(N,M)

for k=1:M

%产生白噪声

Pv=0.008%定义白噪声方差

a1=-0.195a2=0.95o=0.02r=0.95

m=5000%产生5000个随机数

v=randn(1,m)

v=v*sqrt(Pv)%产生均值为0,方差为Pv的白噪声

%m=1:N

v=v(1:N)%取出前1000个

%plot(m,v)title('均值为0,方差为0.0965的白噪声')ylabel('v(n)')xlabel('n')

v=v'

%向量初使化

x=zeros(1,N)

x(1)=v(1)%x(0)=v(0)

x(2)=v(2)-a1*v(1)%x(1)=v(1)-a1*v(0)

w=zeros(2,N)

w(:,1)=[0 0]'%w(0)=[0 0]'

X=zeros(2,N)

X(:,2)=[v(1) 0]'%X(0)=[0 0]'X(1)=[v(0) 0]'

C=zeros(2,2*N)

C(:,1:2)=1/o.*I%C(0)=1/o*I

e=zeros(1,N)'%定义误差向量

u=zeros(1,N)

g=zeros(2,N)

%根据RLS算法进行递推

for n=1:N-2

x(n+2)=v(n+2)-a1*x(n+1)-a2*x(n)

X(:,n+2)=[x(n+1) x(n)]'

u(n)=X(:,n+1)'*C(:,2*n-1:2*n)*X(:,n+1)

g(:,n)=(C(:,2*n-1:2*n)*X(:,n+1))./(r+u(n))

w(:,n+1)=w(:,n)+g(:,n)*(x(n+1)-X(:,n+1)'*w(:,n))

C(:,2*n+1:2*(n+1))=1/r.*(C(:,2*n-1:2*n)-g(:,n)*X(:,n+1)'*C(:,2*n-1:2*n))

e(n)=x(n+1)-X(:,n+1)'*w(:,n)

w1(:,k)=w(1,:)'w2(:,k)=w(2,:)'%将每次计算得到的权矢量值储存

e1(:,k)=e(:,1)%将每次计算得到的误差储存

end

end

%求权矢量和误差的M次的平均值

wa1=zeros(N,1)wa2=zeros(N,1)en=zeros(N,1)

for k=1:M

wa1(:,1)=wa1(:,1)+w1(:,k)

wa2(:,1)=wa2(:,1)+w2(:,k)

en(:,1)=en(:,1)+e1(:,k)

end

n=1:N

subplot(221)

plot(n,w(1,n),n,w(2,n))%作出单次计算权矢量的变化曲线

xlabel('n')ylabel('w(n)')title('w1(n)和w2(n)的单次变化曲线(线性预测,RLS)')

subplot(222)

plot(n,wa1(n,1)./M,n,wa2(n,1)./M)%作出100次计算权矢量的平均变化曲线

xlabel('n')ylabel('w(n)')title('w1(n)和w2(n)的100次平均变化曲线')

subplot(223)

plot(n,e(n,1).^2)%作出单次计算e^2的变化曲线

xlabel('n')ylabel('e^2')title('单次计算e^2的变化曲线')

subplot(224)

plot(n,(en(n,1)/M).^2)%作出M次计算e^2的平均变化曲线

xlabel('n')ylabel('e^2')title('100次计算e^2的平均变化曲线')


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12009493.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存