基于LMS的正弦信号去噪

# -*- coding: utf-8 -*- 
"""
Created on Thu May 30 21:17:42 2013
@author: Timchen525
"""
import numpy as np
import matplotlib.pyplot as plt
from numpy import shape
#定义向量的内积
def multiVector(A,B):
    C=np.zeros(len(A))
    for i in range(len(A)):
        C[i]=A[i]*B[i]
    return sum(C)

#取定给定的反向的个数
def inVector(A,b,a):
    D=np.zeros(b-a+1)
    for i in range(b-a+1):
        D[i]=A[i+a]
    return D[::-1]

#lMS算法的函数
def LMS(xn,dn,M,mu,itr):
    en=np.zeros(itr)
    W=[[0]*M for i in range(itr)]
    for k in range(itr)[M-1:itr]:
        x=inVector(xn,k,k-M+1)
        y=multiVector(W[k-1],x)
        en[k]=dn[k]-y
        W[k]=np.add(W[k-1],2*mu*en[k]*x) #跟新权重
    #求最优时滤波器的输出序列
    yn=np.inf*np.ones(len(xn))
    for k in range(len(xn))[M-1:len(xn)]:
        x=inVector(xn,k,k-M+1)
        yn[k]=multiVector(W[len(W)-1],x)
    return (yn,en)
if __name__=="__main__":
    #参数初始化
    itr=1000 #采样的点数
    M=5 #滤波器的阶数
    mu=3.0342e-005 #步长因子
    t=np.linspace(0,99,itr)
    xs=10*np.sin(0.5*t)
    xn1=np.random.randn(itr) #参考输入端的输入信号
    xn=np.add(xn1,xs) #原始输入端的信号为被噪声污染的正弦信号
    dn=xs #对于自适应对消器,用dn作为期望
    #调用LMS算法
    (yn,en)=LMS(xn,dn,M,mu,itr)
    #画出图形
    plt.figure(1)
    plt.plot(t,xn,label="$xn$")
    plt.plot(t,dn,label="$dn$")
    plt.xlabel("Time(s)")
    plt.ylabel("Volt")
    plt.title("original signal xn and desired signal dn")
    plt.legend()
    plt.figure(2)
    plt.plot(t,dn,label="$dn$")
    plt.plot(t,yn,label="$yn$")
    plt.xlabel("Time(s)")
    plt.ylabel("Volt")
    plt.title("original signal xn and processing signal yn")
    plt.legend()
    plt.figure(3)
    plt.plot(t,en,label="$en$")
    plt.xlabel("Time(s)")
    plt.ylabel("Volt")
    plt.title("error between processing signal yn and desired voltage dn")
    plt.legend()
    plt.show()


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MATLAB是一种常用的科学计算和数据分析软件,也可以用于音频处理领域。基于LMS(最小均方误差)算法的音频去噪是其中一种应用。 音频去噪是指消除音频信号中的噪音成分,使得原始音频信号更加清晰和可听。LMS算法是一种自适应滤波算法,它通过不断调整滤波器系数,逐渐降低噪音的影响。 在MATLAB中,实现基于LMS的音频去噪可以按照以下步骤进行: 1. 读取需要去噪的音频文件。 2. 将音频信号分成若干小的时间段,称为帧,通常每帧的时长为几十毫秒。 3. 对每一帧的音频信号应用LMS算法进行滤波。 4. 将滤波后的帧重新组合,得到去除噪音后的音频信号。 5. 将去噪后的音频信号保存为新的文件。 具体实现时,可以使用MATLAB提供的信号处理工具包,例如使用`audioread`函数读取音频文件,使用`buffer`函数将音频信号分帧,使用LMS算法函数(如`lms`)进行滤波。最后使用`audiowrite`函数去噪后的音频信号保存为新的文件。 需要注意的是,LMS算法的性能受到许多因素的影响,如噪音类型、信噪比、滤波器长度等。在实际使用中,需要根据实际情况调整算法参数以达到最佳去噪效果。 总结起来,MATLAB可以利用LMS算法进行音频去噪,通过读取音频文件、分帧、滤波和合并等步骤来实现。通过调整算法参数和优化算法性能,可以取得较好的去噪效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值