码迷,mamicode.com
首页 > 其他好文 > 详细

MATLAB滑动平均滤波器设计

时间:2020-09-23 23:24:36      阅读:35      评论:0      收藏:0      [点我收藏+]

标签:NPU   return   average   ide   mamicode   定义   解决   isp   滑动   

滑动平均滤波就是把连续取得的N个采样值看成一个队列,队列的长度固定为N,每次采样得到一个新数据放到队尾,并丢掉原来队首的一次数据,把队列中的N个数据进行平均运算,就可以获得新的滤波结果。

java代码实现:

技术图片
// N点滑动平均滤波器
public static float[] MovingAverageFilter_NP(float[] InputSig){
        int length = InputSig.length;
        float[] dbRt = new float[length];

        /** N点平滑 */
        dbRt[0] = InputSig[0];
        for (int x = 1; x < length - 1; x++) {
            dbRt[x] = (InputSig[x - 1] + InputSig[x] + InputSig[x + 1]) / N;
        }
        dbRt[length - 1] = InputSig[length - 1];

        return dbRt;
    }
View Code

MATLAB代码实现:

技术图片
%N是窗口的大小

for i = 1:L
    m = m+1;
    if i+N-1 > L
        break
    else
        for j = i:N+i-1
            k = k+1;
            W(k) = T(j) ;
        end
        T1(m) = mean(W);
        k = 0;
    end
end
View Code

MATLAB中完整的实现加载音频,使用滑动平均滤波器来处理音频:

技术图片
info = audioinfo(1.mp3);
[y,Fs] = audioread(1.mp3);
T = y;
% sound(y,Fs);
figure;
plot(y);
L = length(T);
N=10;  % 窗口大下
k = 0;
m =0 ;
for i = 1:L
    m = m+1;
    if i+N-1 > L
        break
    else
        for j = i:N+i-1
            k = k+1;
            W(k) = T(j) ;
        end
        T1(m) = mean(W);
        k = 0;
    end
end
figure;
sound(T1,Fs);

plot(T1)
View Code

来看一下两个音频图像的差异,一些噪声通过滑动平均滤波被消除。听起来效果不一样。

技术图片

技术图片

第一张是处理之前的音频。第二张是通过滤波器处理之后的音频。窗口大小可以自定义设计。但是也要适当的调整,如果太大,则会出现过拟合的效果。可以自行尝试将N窗口大小取两个极端值,一个取比较大的值,一个取比较小的值,则会发现这里的区别。

当然还可以使用MATLAB自带的smooth函数解决。

 

MATLAB滑动平均滤波器设计

标签:NPU   return   average   ide   mamicode   定义   解决   isp   滑动   

原文地址:https://www.cnblogs.com/hequnwang/p/13700368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!