本文适合快速了解维纳滤波,并能够进行实际数据的处理。


一. 维纳滤波的原理

* 有蛮多视频进行了详细的讲解,这里不在赘述。参考如下:

语音增强-维纳滤波1_哔哩哔哩_bilibili

语音增强-维纳滤波2_哔哩哔哩_bilibili

二. 应用维纳滤波注意事项

1. 维纳滤波是根据全部过去观测值和当前观测值来估计信号的当前值;

2. 维纳滤波只适用于平稳随机过程;

3.设计维纳滤波器要求已知信号与噪声的相关函数。

三. 维纳滤波实现

1. 构建一维信号并混合噪声信号:

(1) 原始一维信号:Signal_Original = sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t)

Fs = 1000; # 采样率
N = 1000; # 采样点数
n = 0:N - 1;
t = 0:1 / Fs:1 - 1 / Fs; # 时间序列
##期望信号
Signal_Original = sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t);
plot(Signal_Original)
title('期望信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

(2) 噪声信号:Noise_White

##噪声信号
##前500点高斯分布白噪声,后500点均匀分布白噪声
Noise_White = [0.3 * randn(1, 500), rand(1, 500)];
plot(Noise_White)
title('噪声信号');
xlabel('Time(n)');
ylabel('Amplitude');

(3) 混合信号:Signal_Original + Noise_White

##噪声干扰后信号
Mix_Signal = Signal_Original + Noise_White; # 构造的混合信号
subplot(2,2,3)
plot(Mix_Signal)
title('噪声干扰后混合信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

2. 维纳滤波器设计:

* 结合下面整体结构框架的关键点,再学习维纳滤波原理,会更有帮助~

* 主要步骤如下:

(1) 混合信号的自相关系数Rxx (维纳滤波原理中有提及);

(2) 混合信号与原始信号的互相关系数Rxy (维纳滤波原理中有提及);

xcorr函数:用于计算两数据的相关系数

(3)设定阶数M = 100 (可调参数,影响滤波效果);

(4)通过循环构建混合信号自相关矩阵rxx(i,j) (维纳滤波原理中有提及);

(5)得到混合信号与原始信号的互相关向量rxy(i) (维纳滤波原理中有提及);

(6)得到设计的Wiener滤波器系数(关键数据,用于后续对信号进行维纳滤波操作):

h = inv(rxx)*rxy'

inv函数:用于求逆矩阵;若出现报错可采用pinv函数,求伪逆矩阵。

##维纳滤波
Rxx = xcorr(Mix_Signal,Mix_Signal);# 得到混合信号的自相关函数
Rxy = xcorr(Mix_Signal,Signal_Original);# 得到混合信号和原始信号的互相关函数
M = 100;# 维纳滤波阶数
for i = 1:M # 得到混合信号的自相关矩阵for j = 1:Mrxx(i,j) = Rxx(N-i+j);end
end
for i = 1:M # 得到混合信号和原信号的互相关向量rxy(i) = Rxy(i+N-1);
end
# 得到所要设计的Wiener滤波器系数
h = pinv(rxx)*rxy';

3. 含噪信号维纳滤波处理

filter函数:用于根据所设计滤波器对信号进行滤波处理。

##维纳滤波后的信号
Signal_Filter = filter(h,1,Mix_Signal);# 将输入信号通过维纳滤波器
plot(Signal_Filter);
title('维纳滤波后的信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

应用subplot函数,将四幅图同时显示,最终效果如下:

4. 均方误差

*均方误差常用于评价滤波前后的信号差异

(通过数值方式评价滤波效果,而不是通过图像显示直接观察,更有说服力)

*通常根据不同的实际情况,可采用不同的评价指标。

fprintf('引入噪声后信号相对原信号的统计均方误差:\n');
mse1 = mean((Mix_Signal-Signal_Original).^2); # 滤波后的信号相对原信号的统计均方误差
mse1
fprintf('滤波后的信号相对原信号的统计均方误差:\n');
mse2 = mean((Signal_Filter-Signal_Original).^2); # 滤波后的信号相对原信号的统计均方误差
mse2

mean函数:平均值计算。

* 引入噪声后信号相对原信号的统计均方误差:

mse1 = 0.2172

* 滤波后的信号相对原信号的统计均方误差:

mse2 = 0.0306

应用维纳滤波后,信号更接近于原始信号。


一、信号处理 ——3.维纳滤波(含matlab代码)相关推荐

  1. 二、生理信号处理 ——1.心电信号(含Matlab代码及数据)

    本文适合快速了解心电信号,并能够进行数据的滤波处理. 一. 心电数据预处理(消除工频干扰.基线漂移) * 心电数据及rdmat函数见文章底部 1. 导入心电数据 ## 心电图导入及读取 clc; [T ...

  2. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)

    四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...

  3. 浣熊优化算法(COA)(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  4. matlab去除大跳变,一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码)...

    一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 一种快速灰度校正算法(处理亮度不均等情况)(含MATLAB代码) 文章目录 前言 一.MATLAB代码 二.结果示例 总结 前言 方法 ...

  5. 灰狼优化(GWO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论. 文献[1]中的灰狼优化(Grey Wolf Optimizer, ...

  6. 灰狼优化(GWO)算法的8种中文变体(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

  7. COI实验室技能:常见的图像增强算法(含MATLAB代码)

    COI实验室技能:常见的图像增强算法(含MATLAB代码)   成像系统采集到的图片有时不一定具有很好的图像质量,往往需要进行一些图像增强的操作.本文主要整理了几种常见的图像增强算法,包括:同态滤波. ...

  8. 回声消除AEC算法(含Matlab代码)

    基于自适应滤波器的回声消除AEC算法(含Matlab代码) 摘要 自适应滤波器 声学回波抵消 AEC算法解析 LMS算法 NLMS算法 VSNLMS算法 APLMS算法 LMS-Newton算法 PF ...

  9. 多尺度结构元素形态学边缘检测算法的研究-含Matlab代码

    目录 一.引言 二.数学形态学理论概述 三.实验验证 四.参考文献 五.Matlab代码获取 一.引言 使用数字图像处理技术来解决计算机视觉.人工智能.生物遥感器视觉等领域所涉及到的图像问题时,最重要 ...

  10. 【图像识别】基于计算机视觉实现红绿灯识别含Matlab代码

    1 简介 交通信号灯控制主要是利用检测技术和传感技术来检测交通参数,以此为基础进行控制.在交通压力日渐增大的背景下,各个路口车流量不均衡的问题逐渐凸显出来,往往一边路口车流量较小而绿灯开启时间长,另一 ...

最新文章

  1. DeepMind网红博士300页论文出炉:面向NLP的神经迁移学习
  2. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  3. python内置数据结构字符串
  4. origin遇到不适当的参数_Origin教程|如何更改Lable和设置非均匀坐标
  5. Network Address Translation 网络地址转换
  6. 三维点云学习(3)4-Expectation-Maximization (EM)
  7. ASP.NET:使用Flurl制作可复用的分页组件
  8. Redis 清空数据库
  9. Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
  10. [推荐]一款非常方便好用的输入法--拼音加加
  11. 一个开源的会议管理系统,适合初学者练手(老司机请忽略)
  12. c语言字符串求n的阶乘,C语言求n的阶乘(n!)
  13. PHPExcel出现 Formula Error的解决方案
  14. 安全 | 开源入侵防御系统 Snort
  15. CyberArk被评为Gartner特权访问管理魔力象限的领导者
  16. 关于H5闪退问题--资源优化
  17. HTTP的各种状态码你了解吗?
  18. SpringCloud之Eureka客户端服务启动报Cannot execute request on any known server解决
  19. 数据服务 开源方案技术选型
  20. Module ‘“../node_modules/@types/react-router“‘ has no exported member ‘withRouter‘.

热门文章

  1. Win10系统winload.efi丢失或损坏怎么办?修复步骤(以联想笔记本为例)
  2. 修复win7便签功能
  3. 管壳式热交换器传热计算
  4. Vulnstack红日安全内网域渗透靶场1实战
  5. 小米蓝牙音响驱动_小米极蜂智能对讲机体验:联网对讲,还能当“老头乐”蓝牙音响...
  6. 基于R语言的地理探测器实现与问题研究
  7. 一起学习R软件吧——R软件的使用
  8. JAVA编写飞机大战---分析过程及源代码(超详细超完整)
  9. 麻省理工18年春软件构造课程阅读06“规格说明”
  10. Matlab|Simulink打开mdl/slx等文件报错:lnvalid block diagram name supplied. Valid block diagram names ...