中值滤波+Matlab仿真+频域响应分析

news2024/10/6 12:30:15

中值滤波

文章目录

  • 中值滤波
    • 理解中值滤波的过程
    • Matlab 实现
    • 实际应用
    • 频域分析

中值滤波是一种滤波算法,其目的是去除信号中的噪声,而不会对信号本身造成太大的影响。它的原理非常简单:对于一个给定的窗口大小,将窗口内的数值排序,然后使用中间值作为输出。

中值滤波的数学公式如下:

y [ n ] = median ⁡ ( x [ n − k ] , … , x [ n ] , … , x [ n + k ] ) y[n]=\operatorname{median}(x[n-k],\dots,x[n],\dots,x[n+k]) y[n]=median(x[nk],,x[n],,x[n+k])

其中 x x x 是原始信号, y y y 是滤波后的信号, n n n 是当前位置, k k k 是窗口大小。

理解中值滤波的过程

为了更好地理解中值滤波的过程,我们可以使用一个简单的数组。假设我们有一个长度为 7 的数组 x x x,如下所示:

x = [1, 3, 2, 4, 6, 5, 7]

现在,我们想对这个数组进行中值滤波,窗口大小为 3。首先,我们需要将窗口移动到数组的第一个元素:

x = [1, 3, 2, 4, 6, 5, 7]
         ^  ^  ^
         |  |  |
         |  |  窗口最后一个元素
         |  窗口中间的元素
         窗口第一个元素

然后,我们需要将窗口内的元素排序:

x = [1, 3, 2, 4, 6, 5, 7]
         ^  ^  ^
         |  |  |
         |  |  排序后的窗口最后一个元素
         |  排序后的窗口中间的元素
         排序后的窗口第一个元素

排序后,我们可以使用排序后的窗口的中间值作为输出。在这个例子中,中间的值是 3,因此输出为 3。

接下来,我们将窗口向右移动一个元素,并重复这个过程,直到处理完整个数组。

x = [1, 3, 2, 4, 6, 5, 7]
         ^  ^  ^
         |  |  |
         |  |  2
         |  3,2,4
         1,2,3

经过中值滤波后,结果为:

y = [1, 2, 3, 4, 5, 5, 7]

Matlab 实现

下面是一个简单的 Matlab 实现,使用了 medfilt1 函数:

% 生成一个随机信号
x = [1, 3, 2, 4, 6, 5, 7];

% 中值滤波
y = medfilt1(x, 3);

在这个例子中,我们生成了一个长度为 7 的数组,并使用了 medfilt1 函数对数组进行了中值滤波,窗口大小为 3。

y 的输出结果为 [1, 2, 3, 4, 5, 5, 7]

实际应用

中值滤波广泛应用于信号处理领域,特别是在声音和图像处理中。在声音处理中,中值滤波可以去除录音中的杂音和爆裂声。在图像处理中,中值滤波可以去除图像中的椒盐噪声和斑点噪声。

好的,这里是一个基于虚拟的音频信号的 Matlab 代码例子,演示中值滤波去除噪声的效果,并绘制处理前后的图像进行对比:

% 生成一个包含噪声的虚拟音频信号
Fs = 44100; % 采样频率
t = 0:1/Fs:5; % 时间范围
f1 = 1000; % 基频
f2 = 4000; % 频率偏移量
x = sin(2*pi*f1*t) + sin(2*pi*(f1+f2*t).*t) + 0.1*randn(size(t));

% 绘制原始音频信号的时域图和频谱图
subplot(2,2,1)
plot(t,x)
title('原始信号的时域图')
xlabel('时间 (s)')
ylabel('幅值')
subplot(2,2,2)
f = linspace(0,Fs,length(x));
X = fft(x);
plot(f,abs(X))
title('原始信号的频谱图')
xlabel('频率 (Hz)')
ylabel('幅值')

% 对音频信号进行中值滤波处理
win_size = 101;
y = medfilt1(x, win_size);

% 绘制处理后的音频信号的时域图和频谱图
subplot(2,2,3)
plot(t,y)
title('处理后的信号的时域图')
xlabel('时间 (s)')
ylabel('幅值')
subplot(2,2,4)
Y = fft(y);
plot(f,abs(Y))
title('处理后的信号的频谱图')
xlabel('频率 (Hz)')
ylabel('幅值')

image-20230311182139258

在这个例子中,我们首先生成了一个包含噪声的虚拟音频信号,然后使用 medfilt1 函数对其进行中值滤波处理。接下来,我们绘制了原始音频信号和处理后的音频信号的时域图和频谱图,可以看到,处理后的音频信号的噪声明显减少,幅值更加平滑。

频域分析

从微分方程的角度出发,可以将中值滤波看作是一个差分方程,进而分析其幅频响应。对于一个窗口大小为 3 的中值滤波,其差分方程为:

y [ n ] = median ⁡ ( x [ n − 1 ] , x [ n ] , x [ n + 1 ] ) y[n] = \operatorname{median}(x[n-1],x[n],x[n+1]) y[n]=median(x[n1],x[n],x[n+1])

可以将其转化为一个差分方程:

y [ n ] = 1 2 x [ n ] + 1 4 ( x [ n − 1 ] + x [ n + 1 ] ) y[n] = \frac{1}{2} x[n] + \frac{1}{4} (x[n-1] + x[n+1]) y[n]=21x[n]+41(x[n1]+x[n+1])

其中, x [ n ] x[n] x[n] 是原始信号, y [ n ] y[n] y[n] 是滤波后的信号, n n n 是当前位置。

通过对差分方程进行离散化,可以得到其频域响应:

H ( e j ω ) = 1 2 + 1 4 ( e − j ω + e j ω ) H(e^{j\omega}) = \frac{1}{2} + \frac{1}{4} (e^{-j\omega} + e^{j\omega}) H(e)=21+41(e+e)

H ( e j ω ) = 1 2 + 1 2 cos ⁡ ( ω ) H(e^{j\omega}) = \frac{1}{2} + \frac{1}{2} \cos(\omega) H(e)=21+21cos(ω)

因此,中值滤波的幅频响应为:

∣ H ( e j ω ) ∣ = ( 1 2 + 1 2 cos ⁡ ( ω ) ) 2 |H(e^{j\omega})| = \sqrt{\left(\frac{1}{2} + \frac{1}{2} \cos(\omega)\right)^2} H(e)=(21+21cos(ω))2

∣ H ( e j ω ) ∣ = 1 2 + 1 2 cos ⁡ ( ω ) |H(e^{j\omega})| = \frac{1}{2} + \frac{1}{2} \cos(\omega) H(e)=21+21cos(ω)

下面是一个简单的 Matlab 实现,绘制了窗口大小为 3 的中值滤波的幅频响应曲线:

% 绘制窗口大小为 3 的中值滤波的幅频响应曲线
freq = linspace(0, pi, 1000);
H = 0.5 + 0.5*cos(freq);
plot(freq, H)
title('中值滤波的幅频响应')
xlabel('角频率 (rad)')
ylabel('幅值')

image-20230311182906248

在这个例子中,我们使用 linspace 函数生成了一个包含 1000 个点的频率向量,然后使用中值滤波的幅频响应公式计算了每个点的幅值,并使用 plot 函数绘制了幅频响应曲线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++进阶】四、红黑树(三)

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入 五、红黑树的验证 六、红黑树与AVL树的比较 七、完整代码 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可…

嵌入式安防监控项目——html框架分析和环境信息刷新到网页

目录 一、html控制LED 二、模拟数据上传到html 一、html控制LED 简单来说就是html给boa服务器发了一个控制指令信息,然后boa转发给cgi进程,cgi通过消息队列和主进程通信。主进程再去启动LED子线程。 这是老师给的工程。 以前学32都有这工具那工具来管…

导航技术调研(CSDN_0023_20221217)

文章编号:CSDN_0023_20221217 目录 1. 惯性导航 2. 组合导航技术 3. 卡尔曼滤波 1. 惯性导航 惯性导航系统(INS-Inertial Navigation System)是上个世纪初发展起来的。惯性导航是一种先进的导航方法,但实现导航定位的原理却非常简单,它是…

RHCSA-用户和组管理和文件系统权限(3.11)

目录 用户(UID) 用户类别(UID): 用户的增删改查: 修改用户密码: 查看用户是否存在: 组(GID) 组的增删改查: 设置组密码: 用户…

idea集成GitHub

设置 GitHub 账号绑定账号有两种方式:1. 通过授权登录2.如果上述登录不成功,用Token口令的方式登录,口令在github账号哪里生成,点击settings --->Developer settings --->pwrsonal access tokens ----> 复制口令到idea 口…

设置cpp-httplib 服务器模式模式下的线程池大小 以及如何增加默认处理函数 以便能够实现http请求转发

先说说默认的创建的线程池数量 原因是某天调试在gdb调试下 一启动程序发现 开启了好多线程 如下图 因为我们程序 没几个线程 数了下 居然有60多个线程 不需要那么多 所以看下 httplib的源码 构造函数的时候 设置了最大线程池数量 看下这个宏 然后打印了下 发现 居然那么大 …

FusionCompute安装和配置步骤

1. 先去华为官网下载FusionCompute的镜像 下载地址:https://support.huawei.com/enterprise/zh/distributed-storage/fusioncompute-pid-8576912/software/251713663?idAbsPathfixnode01%7C22658044%7C7919788%7C9856606%7C21462752%7C8576912 下载后放在D盘中&am…

【rabbitmq 实现延迟消息-插件版本安装(docker环境)】

一:插件简介 在rabbitmq 3.5.7及以上的版本提供了一个插件(rabbitmq-delayed-message-exchange)来实现延迟队列功能。同时插件依赖Erlang/OPT 18.0及以上。 二:插件安装 1:选择适合自己安装mq 版本的插件&#xff1…

设计模式---抽象工厂模式

目录 1 介绍 2 优缺点 3 实现 1 介绍 抽象工厂模式(Abstract Factory Pattern) 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负…

ROC和AUC

目录 ROC AUC ROC ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为"受试者工作特征曲线"。ROC曲线的横坐标为假阳性率(False Postive Rate, FPR);纵坐标为真阳性率(True Positive Rate, TPR).FPR和TPR的计算方法分别为 F…

Spring——案例-业务层接口执行效率和AOP通知获取数据+AOP总结

执行时间获取:记录开始时间和结束时间,取差值。 这里使用环绕通知来实现。 环境准备: 项目文件结构: 业务层接口和实现类: 数据层: 采用mybatis注解开发,这里没有实现类,直接在接口方法里面实现映射。 domain层: 实现了数据库里面每一个…

Altium designer--软件简介及安装教程(Altium designer16)

一、软件介绍(完整安装包资源见文末链接,含破解license) Altium Designer 是一款简单易用、原生3D设计增强的一体化设计环境,结合了原理图、ECAD库、规则和限制条件、BoM、供应链管理、ECO流程和世界一流的PCB设计工具。通过原理…

Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有…

[NOIP2009 提高组] 最优贸易(C++,tarjan,topo,DP)

题目描述 $C 国有国有国有 n 个大城市和个大城市和个大城市和 m$ 条道路,每条道路连接这 nnn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mmm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的…

OpenHarmony通过MQTT连接 “改版后的华为IoT平台”

一、前言 本篇文章我们使用的是BearPi-HM_Nano开发板:小熊派的主板+E53_IA1扩展板 源码用的是D6_iot_cloud_oc,点击下载BearPi-HM_Nano全量源码 那么为什么要写这篇呢? 前段时间看到OpenHarmony群里,经常有小伙伴问接入华为IoT平台的问题,他们无法正常连接到华为IoT平台等…

【数据结构】二叉树相关OJ题

文章目录一、单值二叉树二、检查两颗树是否相同三、判断一棵树是否为另一颗树的子树四、对称二叉树五、二叉树的前序遍历六、二叉树中序遍历七、二叉树的后序遍历八、二叉树的构建及遍历一、单值二叉树 单值二叉树 题目描述 如果二叉树每个节点都具有相同的值,那…

【互联网架构】聊一聊所谓的“跨语言、跨平台“

文章目录序跨语言跨平台【饭后杂谈】为什么有人说Java的跨平台很鸡肋?序 很多技术都具有跨语言、跨平台的特点 比如JSON是跨语言的、Java是跨平台的、UniAPP、Electron是跨平台的 跨语言和跨平台,是比较重要的一个特性。这些特性经常能够决定开发者是否…

软件测试项目实战,一比一还原可以写进简历的

项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…

ubuntu-22.04.2网络配置和root登录和root远程ssh登录

配置网络: 1.查看网卡名称 ip addr(ifconfig 无法使用,需要后期安装) 2. 配置静态IP (1)进入网络配置文件: vim /etc/netplan/00-installer-config.yaml (2)按一下 i ,进入插入模式&#…

网络 | 数据链路层讲解 | MAC帧与APR协议

最大以太网帧大小指的是以太网帧从目的地址到冗余校验的总字节数。在802.3标准里,规定了一个以太网帧的数据部分(Payload)的最大长度是1500个字节,这个数也是MTU。在这个限制之下,最长的以太网帧包括6字节的目的地址(DMAC)、6字节的源地址(SM…