⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lms-50hz.m

📁 采集到的50Hz电源信号送至信号处理器作为参考信号
💻 M
字号:
%自适应LMS法滤波滤除50Hz工频干扰程序
%此方案可以解决加陷波器波形失真的问题,且LMS法计算量也不大,dsp实现没有问题。但其带宽仅1Hz,现在采用内置50Hz参考信号,如果50Hz工频电源频率有一定的漂移,
%内置50Hz参考信号必须改变为外接参考电源以跟踪工频电源频率的变化,可以考虑再加一通道引入经过变压器后的电源信号或用锁相环芯片跟踪电源频率的变化
%此方案目前dap实现的难点在于50Hz工频电源频率漂移的解决需要改变目前电路板设计
%目前dsp算法实现正在调试,尚没成功
clear all;  
M=800;m=0:1:M-1;
fs=1920;fc=50;
noise=cos(m*2*pi*50/fs)/30;%噪声
xhalf=[1 1 1 1 zeros(1,M/2-4)];
s=[fliplr(xhalf) xhalf];%输入信号
phase_tmp=0;
x1=cos(m*2*pi*fc/fs+phase_tmp);
x2=cos(m*2*pi*fc/fs+phase_tmp+pi/2);%参考输入
d=s+noise;%输入信号+噪声
mju=0.2;alfa=0.97;gama=4.0e-5;beta=0.99;p=0;
w1=0;w2=0;
y(1)=w1*x1(1)+w2*x2(1);
e(1)=d(1)-y(1);
w1=w1+mju*e(1)*x1(1);
w2=w2+mju*e(1)*x2(1);ju(1)=w1;
k=2;
while k<=M
    y(k)=w1*x1(k)+w2*x2(k);
    e(k)=d(k)-y(k);
    if e>1,e=1;end
    temp1=mju*e(k)*x1(k);
    temp2=mju*e(k)*x2(k);
    if abs(temp1)<3.1e-5 
        if abs(y(k))<abs(0.92*d(k))
            w1=w1+3.1e-5;w2=w2+3.1e-5;
        elseif abs(y(k))>abs(d(k))   
            w1=w1-3.1e-5;w2=w2-3.1e-5;
        else
            w1=w1;w2=w2;
        end;
    else
        w1=w1+temp1;w2=w2+temp2;
    end
    p=beta*p+(1-beta)*e(k)*e(k-1);
    mju=mju*alfa+gama*p;
    if p>1,p=1;end
    ju(k)=w1;
    k=k+1;
end
figure;plot(y);hold on;plot(noise,'r');hold off;%图1红色曲线为50Hz噪声波形,蓝色曲线为滤波器跟踪噪声的波形
figure;plot(e);hold on;plot(d,'r');hold off;%图2红色曲线为输入信号(混杂有50Hz噪声)波形,蓝色曲线为经过滤波后输出的的波形,可见噪声已经滤除
figure;plot(ju,'g');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -