最近时间在研究滤波算法,目的是为了更好的识别音频数据。因为有些音频数据里面的杂波太多,很难识别,所以需要先对其进行过滤,才能解析识别。为此,我先在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. XCTF-高手进阶区:Web_php_include
  2. php抓娃娃机器,vue制作抓娃娃机 - osc_icwhzig7的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 阿里飞猪曝杀熟;贾跃亭“没有抛弃”恒大;百度起诉搜狗浏览器劫持流量 | 极客头条...
  4. .xyz域名注册总量TOP10:阿里云挤进十强 位居榜尾
  5. linux将文件的第二列求和,awk实现第一列相乘,第二列求和,并相加 - 米扑博客...
  6. matlab里simulink,如何运用MATLAB中的Simulink?
  7. LeetCode题解答案集合(完全版) Python
  8. java 死链检测_网站死链检测工具/网站地图生成工具
  9. win10 家庭版升级win11
  10. es的range过滤_ElasticSearch 常用的查询过滤语句
  11. python数据分析实验报告_数据聚合
  12. 中广瑞达龙华模具注塑成型加工中有哪些工艺条件?
  13. 人民的名义关系可视化展示
  14. 十、k8s健康检查之 livenessProbe/readinessProbe
  15. c、c++的getchar()函数
  16. matlab bsxfun memory,[转]matlab函数 bsxfunarrayfun
  17. ggplot2的自定义调色板
  18. The Great Gatsby翻译摘录
  19. Linux /根目录下子目录的存放内容
  20. HC-05自动断开解决方法

热门文章

  1. 分享开源的GB/T-2260国家行政区划代码
  2. iview@2.13.0/1版本,Table组件IE9不兼容的问题
  3. 图形引擎实战:移动平台海飞丝系统-渲染篇
  4. vos 3000 话单分析
  5. 在Java中使用堆排序求解TopK问题
  6. 【渝粤题库】陕西师范大学192202 信息技术课程与教学论 作业
  7. 自学Unity能找到工作吗?
  8. Matlab 入门教程
  9. 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】
  10. 应届生和往届生考研复试需要准备哪些材料?