最近时间在研究滤波算法,目的是为了更好的识别音频数据。因为有些音频数据里面的杂波太多,很难识别,所以需要先对其进行过滤,才能解析识别。为此,我先在matlab上做了仿真.采用的很多滤波算法,最后选择了对我这个效果最好的,滑动均值滤波。

什么是滑动均值滤波

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

具体的matlab代码

clear

clc

load boxinfo.mat %载入音频数据

T = data;

figure(1)

plot(T,'-*')

title('原始数据')

hold on;

%%

%滑动平滑滤波

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

plot(T1,'r-o')

grid

legend('原始数据','滤波之后')

滤波前后对比图

滤波前后对比图

简单分析一下

经过滑动滤波之后,波形整体变得平滑,这里我们重点关注一下x轴附近的点,可以发现,在波形与x轴交叉的地方,波形都平稳过度,这极大方便的我们后期进行统计。

窗口大小选择

从代码中我们可以发现窗口大小我们选择的是10,如何选择窗口大小,这里我们需要进行一些简单的分析和测试。如果x轴附近的噪点数量(一上一下)比较多,那么窗口大小就应该大一些,反之,小一些。但是过大又会出现过拟合的现象,所以可以多取几个值,然后对比一下,选择一个最好的即可。

不同的窗口大小对比图

不同的窗口大小对比图

简单分析一下

从图中我们可以很明显的看出,当N=4的时候,滤波效果还不是很好,在x轴附近依然有噪点(一上一下),当N=7的时候,已经基本满足我们的要求,图形已经可以很平稳的过度了,但是从右边的标记处可以看出还是不是很平稳,所以可以继续提高N值,当N=10的时候,波形就完全能够达到我们的要求,所以取10即可。

滑动滤波的Java实现

/*

* 功能 对音频数据进行滑动滤波,使其更好的识别 时间:2015/9/11

*/

public class MovingAverageFilter implements IAudioSignalFilter {

private static final int WINDOWS = 1;

private short[] mTemp = null; // 只声明暂时不初始化,用来记录最后得不到均值处理的点

private short[] mBufout = null;

private int mWindowSize = WINDOWS;

public MovingAverageFilter(int size) {

mWindowSize = size;

}

// 均值滤波方法,输入一个buf数组,返回一个buf1数组,两者下表不一样,所以定义不同的下表,buf的下表为i,buf1的下表为buf1Sub.

// 同理,临时的winArray数组下表为winArraySub

public short[] movingAverageFilter(short[] buf) {

int bufoutSub = 0;

int winArraySub = 0;

short[] winArray = new short[mWindowSize];

if (mTemp == null) {

mBufout = new short[buf.length - mWindowSize + 1];

for (int i = 0; i < buf.length; i++) {

if ((i + mWindowSize) > buf.length) {

break;

} else {

for (int j = i; j < (mWindowSize + i); j++) {

winArray[winArraySub] = buf[j];

winArraySub = winArraySub + 1;

}

mBufout[bufoutSub] = mean(winArray);

bufoutSub = bufoutSub + 1;

winArraySub = 0;

}

}

mTemp = new short[mWindowSize - 1];

System.arraycopy(buf, buf.length - mWindowSize + 1, mTemp, 0,

mWindowSize - 1);

return mBufout;

} else {

short[] bufadd = new short[buf.length + mTemp.length];

mBufout = new short[bufadd.length - mWindowSize + 1];

System.arraycopy(mTemp, 0, bufadd, 0, mTemp.length);

System.arraycopy(buf, 0, bufadd, mTemp.length, buf.length); // 将temp和buf拼接到一块

for (int i = 0; i < bufadd.length; i++) {

if ((i + mWindowSize) > bufadd.length)

break;

else {

for (int j = i; j < (mWindowSize + i); j++) {

winArray[winArraySub] = bufadd[j];

winArraySub = winArraySub + 1;

}

mBufout[bufoutSub] = mean(winArray);

bufoutSub = bufoutSub + 1;

winArraySub = 0;

System.arraycopy(bufadd, bufadd.length - mWindowSize + 1,

mTemp, 0, mWindowSize - 1);

}

}

return mBufout;

}

}

public short mean(short[] array) {

long sum = 0;

for (int i = 0; i < array.length; i++) {

sum += array[i];

}

return (short) (sum / array.length);

}

}

滑动均值滤波matlab实现,滑动均值滤波的matlab和Java实现相关推荐

  1. 非局部相似性 matlab,非局部均值滤波(NLM)和MATLAB程序详解视频教程保持图像细节...

    [内容简介]<非局部均值滤波与应用和MATLAB程序详解视频>共6章28节视频,总学时698分钟,合11.6小时.主要内容包括:非局部均值滤波类算法入门,基于滤波参数自适应的非局部均值滤波 ...

  2. 基于matlab 非局部均值(NLM)滤波图像去噪

    基于matlab 非局部均值(NLM)滤波图像去噪 一.简介 1 NLM滤波原理 2 Pixelwise Implementation 3 Patchwise Implementation 二.源代码 ...

  3. 【图像去噪】基于matlab多种自适应均值滤波图像去噪【含Matlab 1843期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab多种自适应均值滤波图像去噪[含Matlab 1843期] (https://download.csdn.net ...

  4. matlab编程实现自适应均值滤波和自适应中值滤波

    matlab编程实现自适应滤波器 一.自适应均值滤波器 1. 原理部分: 2. 程序代码 3. 结果对比 二.自适应中值滤波 1. 原理部分 2.程序代码 3. 结果对比 一.自适应均值滤波器 1. ...

  5. [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX

    前言 人生如逆旅,我亦是行人. 今天分享一个在 MATLAB 上生成C算法文件,并将其移植到 keil5上,运行至 STM32 单片机,一个很有用的方法. 准备工作: 已安装 MATLAB 的软件(注 ...

  6. matlab mean 滤波,中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation).doc...

    中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation) 中值和均值滤波---matlab实现(Median and me ...

  7. MATLAB实现滑动平均滤波法的实例(移动平均滤波器)

    原始信号 0.03    -1.46    -0.26    -0.47    -1.46    -0.06    -0.47    -1.27    0.15    -0.47    -1.47   ...

  8. matlab的knn均值滤波,中值滤波与均值滤波介绍.ppt

    第五章 图像的噪声抑制 图像噪声的概念 所谓的图像噪声,是图像在摄取时或是传输时所受到的随机干扰信号. 常见的有椒盐噪声和高斯噪声. 图像噪声的概念 椒盐噪声的特征: 出现位置是随机的,但噪声的幅值是 ...

  9. matlab常见的图像增强技术(包括基于幂次变换,对图像进行均衡化处理,巴特沃斯低通,理想低通,梯形低通滤波, 均值滤波,中值滤波,最大,最小值滤波,修正后的阿尔法滤波器)

    1.基于幂次变换中的r值,比较不同r 值下图像增强的效果 代码 : I = imread('D:\图片\TH.JFIF');subplot (1,4,1);imshow(I);title('原始图像' ...

  10. 利用FFT分析比较卡尔曼滤波算法、低通滤波算法、滑动平均滤波的频谱

    1 卡尔曼滤波 详见博客 https://blog.csdn.net/moge19/article/details/81750731 2 低通滤波 2.1 算法推导 一阶RC滤波器的硬件电路如图: 图 ...

最新文章

  1. 深度学习必懂的13种概率分布
  2. AWS — AWS EC2
  3. python读取邮件发送日期和时间_Python读取指定日期邮件的实例
  4. Python 工具列表
  5. JVM:类加载机制之类加载器
  6. Go if _,ok:=range map; ok判断key是否在map中
  7. 一个失败的SAP Spartacus路由修改尝试 -在CmsPageGuard的开头触发 OCC API 调用
  8. javascript: 数组
  9. BugkuCTF-Crypto题easy_crypto
  10. Linux服务器开发初步
  11. excel图表交互联动_Excel图表联动的三种方法
  12. 安装linux下显卡驱动
  13. 高数下部分公式及部分知识点整理
  14. 宁海象山H5棋牌游戏定制开发
  15. 【死磕 Spring】----- IOC 之深入理解 Spring IoC
  16. Linux系统的定时任务
  17. 如何上联想官网查询服务器配置信息,联想服务器型号联想服务器如何鉴别!
  18. 对抗机器学习——FGSM经典论文 EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES
  19. svn分支开发与主干合并(branch merge)
  20. 微信开发者工具更换存储目录将C盘数据User Data迁移到D盘

热门文章

  1. DNF技能贴图的研究
  2. 如何使用L298N电机驱动模块
  3. Java 中的 switch 语句
  4. AI 可以自己写代码了,对程序员来说是个好消息吗?
  5. JSP 原理与运行过程
  6. Oracle中的视图和同义词
  7. P3954 [NOIP2017 普及组] 成绩
  8. 2019华为软件精英挑战赛比赛经验分享(初赛,复赛,决赛)
  9. EA逆向生成数据库E-R图(mysql数据库--ER图)
  10. 测试网节点公开部署第一阶段,全网筛选出21个优质节点