当前位置: 首页 > news >正文

信号处理——自相关和互相关分析

1.概括

在信号处理中,自相关互相关是相关分析非常重要的概念,它们能分析一个信号或两个信号在时间维度的相似性,在振动测试分析、雷达测距和声发射探伤得到了广泛的应用。自相关分析的研究对象为一个信号互相关分析的研究对象为两个信号

本文以互相关分析为例,流程如下图所示,构建了一个余弦信号,并人为设置滞后延迟20个采样点(准确来说是采样间隔),构建了另一个余弦信号,通过计算了两个余弦信号的互相关函数,分析了两个信号的相似性,找到了两个信号之间的时间延迟,在工程实际中常用于进行故障源定位。此外,对比matlab的互相关函数xcorr,本文也采用手动计算的方法,计算了互相关函数,验证了本文手工计算方法的准确性。

关于自相关、互相关以及相关系数的更多公式定义和讲解,请参考链接:

相关系数、自相关、互相关等概念理解:https://zhuanlan.zhihu.com/p/613949451

该内容参考了一些资料:

1、书籍:机械工程测试技术基础 第3版 熊诗波编著

2、相关系数、自相关、互相关等概念理解:https://zhuanlan.zhihu.com/p/613949451

3、matlab官网的函数解释:

https://ww2.mathworks.cn/help/matlab/ref/xcorr.html?searchHighlight=xcorr&s_tid=srchtitle_support_results_1_xcorr

代码采用了Matlab 2024a进行运行,欢迎大家测试和提出问题!

2.具体案例

互相关分析是分析信号间时间前后相似的重要手段,它在故障源定位中得到了广泛的应用。本文分析的仿真信号如下图所示:

这里,y1为原始的余弦信号,y2为延迟了20个采样点(准确来说是采样间隔)的余弦信号,采样频率为100,信号长度为100,即采集时间为1s,获得时域波形如下图所示:

从上图中,能明显发现y2相对于y1延迟了差不多0.2s(一个采样间隔是1/100=0.01s,20个 就是0.20s)。采用matlab的互相关计算函数xcorr函数,获得互相关函数如下图所示:

上图为一个相关函数的茎叶图,用的stem函数。从上图中能发现,存在正相关和负相关的最大点,表明了不同延迟或超前时两个信号的相关性最强。关于具体意义稍后讨论哈!下图为手动计算互相关函数和matlab的xcorr函数的结果对比图:

从上图中能定性地发现,手动计算结果基本和matlab的结果保持一致。同时,定量计算的平均偏差(平均偏差为两数差的绝对值的平均数)结果如下,二者的偏差为0。

综上分析,手动计算的互相关函数是正确的!关于互相关函数的计算方式,请参考链接:相关系数、自相关、互相关等概念理解:https://zhuanlan.zhihu.com/p/613949451。这里就不给大家展开了。

紧接互相关函数结果进行分析。如下图所示

以最大正相关的点为例,发现互相关函数最大的峰值点(-20,20.1535),20表示使两个信号之间的相关程度最大的时间间隔是20,负号表示超前还是滞后,我用的matlab的xcorr函数,代码具体为[c,lags] = xcorr(y1,y2),c为互相关函数的y轴,lags为互相关函数的x轴。因此可以断定,-20的意思为y2比y1滞后20个采样间隔。相反,如果是正号的意思就是超前,大家可以自行验证,欢迎大家指出错误哈!此外,通过分析手动计算互相关函数过程也能发现,负号的意思为滞后。代码后续增加了一个if判断函数,来自动分析互相关函数结果,结果如上上图所示。

综上分析,互相关函数分析结果与信号人为设置结果相一致,验证了本案例的正确性!

3.具体代码

代码主要有一个:

1、main.m(主函数,用于互相关函数分析)

2、matlab中计算互相关函数为xcorr,更多使用细节参考https://ww2.mathworks.cn/help/matlab/ref/xcorr.html?searchHighlight=xcorr&s_tid=srchtitle_support_results_1_xcorr

%% 信号的自相关和互相关分析
%% 作者:冷漠
%% 时间:2024年7月29日
%% 关注公众号 :"故障诊断与寿命预测工具箱",每天进步一点点
clc
clear all
close all
%%
​
fs=100;                                             %采样频率
L=100;                                              %信号长度
t=(0:L-1)/fs;                                          %时间序列
y1=0.7*cos(2*pi*2*t-pi/4);    %信号y1
y2=circshift(y1,20);
y2(1:20)=0;
​
%画图
figure;
subplot(211);plot(t,y1,'b-');xlabel('时间(s)');ylabel('幅值');
legend('y1');
subplot(212);plot(t,y2,'b-');xlabel('时间(s)');ylabel('幅值');hold on;
plot(t(21),y2(21),'Color','r','Marker','pentagram');
legend('y2','y1的起始点')
​
%计算互相关
[c,lags] = xcorr(y1,y2);
figure;
stem(lags,c)
​
%手动计算互相关
y11=zeros(3*length(y1)-2,1);
y22=zeros(3*length(y2)-2,1);
y11(length(y1):2*length(y1)-1)=y1;
y22(1:length(y2))=y2;
​
for i=1:2*length(y1)-1c1(i)=sum(y11.*y22);y22=circshift(y22,1);
end
​
%matlab函数和手动计算函数之间对比分析
figure;
plot(lags,c,'b-*');hold on;
plot(lags,c1,'o');
legend('matlab的xcorr函数','手动计算')
​
fprintf('matlab的xcorr函数获得相关函数与手动计算之间的差为%f \n',sum(abs(c1-c))/length(c1));
​
%分析结果
[c_max,index]=max(c);
%相关函数
figure;plot(lags,c,'b-');hold on;
plot(lags(index),c_max,'Color','r','Marker','pentagram','MarkerSize',10);
legend('相关函数','最大正相关的延迟位置')
​
%信号的对应关系
figure;
subplot(211);plot(t,y1,'b-');xlabel('时间(s)');ylabel('幅值');
legend('y1');
subplot(212);plot(t,y2,'b-');xlabel('时间(s)');ylabel('幅值');hold on;
plot(t(abs(lags(index))+1),y2(abs(lags(index))+1),'Color','r','Marker','pentagram');
legend('y2','y1的起始点')
​
%输出分析结果
if lags(index)<0fprintf('y2比y1滞后%d 个采样点 \n',abs(lags(index)));
elsefprintf('y2比y1超前%d 个采样点 \n',abs(lags(index)));
end
​
​

4.细节说明

1.xcorr是matlab的自相关和互相关的函数,挺方便的,推荐大家使用,自相关函数只有一个输入,请大家参考官方使用介绍。互相关分析代码为:[c,lags] = xcorr(y1,y2),c为互相关函数的y轴,lags为互相关函数的x轴,c的结果中,如果最大峰值的横坐标(即lags(max(c)))为-20,则表示y2比y1滞后了20个采样间隔(y1比y2超前了20个采样间隔),如果为20,则表示y2比y1超前了20个采样间隔(y1比y2滞后了20个采样间隔)。

2.关于互相关函数、自相关函数的具体公式定义和计算方法可以参考如下链接:

相关系数、自相关、互相关等概念理解:https://zhuanlan.zhihu.com/p/613949451

5.总结

上述案例是采用互相关函数,分析两个信号间的相关程度。通过人为设置第二个信号相对于第一个信号的延迟,利用互相关函数,确定潜在的延迟数,对比人为设置参考,验证了互相关函数分析信号间相关程度的可行性,其原理常用于故障源定位。

此外,为了更好地理解互相关函数的计算原理,手动计算复现了互相关函数,对比matlab的自带函数,验证了手动计算的可行性。

6.相关资料

附件

20wq

1、上述源码

     ①代码:

      main.m(主函数);

2、相关参考

①书籍:机械工程测试技术基础 第3版 熊诗波编著

②相关系数、自相关、互相关等概念理解:https://zhuanlan.zhihu.com/p/613949451

③matlab官网的函数解释:

https://ww2.mathworks.cn/help/matlab/ref/xcorr.html?searchHighlight=xcorr&s_tid=srchtitle_support_results_1_xcorr

更多内容,请关注公众号“故障诊断与寿命预测工具箱”,每天进步一点点。

相关文章:

信号处理——自相关和互相关分析

1.概括 在信号处理中&#xff0c;自相关和互相关是相关分析非常重要的概念&#xff0c;它们能分析一个信号或两个信号在时间维度的相似性&#xff0c;在振动测试分析、雷达测距和声发射探伤得到了广泛的应用。自相关分析的研究对象为一个信号&#xff0c;互相关分析的研究对象…...

如何解决部分设备分辨率不适配

1&#xff09;如何解决部分设备分辨率不适配 2&#xff09;Unity中如何实现草的LOD 3&#xff09;使用了Play Asset Delivery提交版本被Google报错 4&#xff09;如何计算弧线弹道的落地位置 这是第396篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;…...

C#插件 调用存储过程(输出参数类型)

存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…...

代码随想录算法训练营day32 | 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯

碎碎念&#xff1a;开始动态规划了&#xff01;加油&#xff01; 参考&#xff1a;代码随想录 动态规划理论基础 动态规划常见类型&#xff1a; 动规基础类题目背包问题打家劫舍股票问题子序列问题 解决动态规划问题应该要思考清楚的&#xff1a; 动态规划五部曲&#xff1…...

【人工智能专栏】Learning Rate Decay 学习率衰减

Learning Rate Decay 学习率衰减 使用格式 optimizer = torch.optim.SGD(model.paraters(), lr=0.1, momentum=0.9, weight_decay=1e-4) scheduler = torch.optim...

浙大版《C语言程序设计(第3版)》题目集

练习4-11 统计素数并求和 本题要求统计给定整数M和N区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数M和N&#xff08;1≤M≤N≤500&#xff09;。 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和&#xff0c;数字间以空格分隔。 输入…...

【学习笔记】Day 2

一、进度概述 1、inversionnet_train_light 试运行——未成功 2、DL-FWI基础入门培训-1,2&#xff0c;以及作业1的完成——暂未完成作业 二、详情 1、inversionnet_train_light 试运行 在补充完相关依赖后&#xff0c;运行仍有报错 产生原因&#xff1a;这个代码在当…...

Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程语言中&#xff0c;集合框架&#xff08;Collection Framework&#xff09;提供了一系列用于存储和操作数据的接口和类。其中&#xff0c;Map和Set是两个非常重要的接口&#xff0c;分别用于存储键值对和无重复元素的集合。 ✨✨✨这里是秋刀鱼不做梦…...

裸金属服务器详解

在云计算飞速发展的今天&#xff0c;裸金属服务器&#xff08;Bare Metal Server, BMS&#xff09;作为一种兼具传统物理服务器性能和虚拟化服务优势的计算资源&#xff0c;正逐渐成为企业和个人用户的重要选择。今天我们就来了解下关于裸金属服务器的定义、核心特点以及其在各…...

等待唤醒机制两种实现方法-阻塞队列

桌子上有面条-》吃货执行 桌子上没面条-》生产者制造执行 1、消费者等待 消费者先抢到CPU执行权&#xff0c;发现桌子上没有面条&#xff0c;于是变成等待wait状态&#xff0c;并释放CPU执行权&#xff0c;此时的CPU肯定会被厨师抢到&#xff0c;初始开始做面条&#xff0c;…...

数组项相加和 – 如何将 JavaScript 数组中的数字相加

JavaScript 中的数组是一个对象&#xff0c;它允许您在单个变量名称下存储多个值的有序集合&#xff0c;并以多种方式操作这些值。 在本文中&#xff0c;您将学习如何使用几种不同的方法计算给定数组中所有数字的总和。 具体来说&#xff0c;使用以下方法得到数组中所有数字的总…...

C#和S7-1200PLC S7.NET通信

1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。_s7协议批量…...

常用命令git branch

Git Branch 命令总结 列出分支 git branch&#xff1a;显示本地分支&#xff0c;当前分支会被标记。git branch -r&#xff1a;显示远程分支。git branch -a&#xff1a;显示所有本地和远程分支。 创建分支 git branch <branch_name>&#xff1a;创建一个新分支但不自…...

Android 制作系统签名

一、切换目录 cd build/target/product/security二、执行命令 1)将使用.pk8生成platform.priv.pem (.pem即可,文件名可随意修改)openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt2)生成.p12,此时需输入两次密码,并且要记住 -name后所设置…...

C语言第13篇

1.下面程序是计算n个数的平均值,请填空.______ #include<stdio.h> void main( ) { int i,n; float x,avg0.0; scanf("%d",&n); for(i0;i<n;i) { scanf("%f",&x); avgavg______; } avg________; printf("avg%f\n",avg); } A) …...

基于FPGA的数字信号处理(22)--进位保存加法器(Carry Save Adder, CSA)

目录 1、拆解多个数的加法 2、进位保存加法器 3、CSA的优点和缺点 4、CSA电路的实现 文章总目录点这里&#xff1a;《基于FPGA的数字信号处理》专栏的导航与说明 1、拆解多个数的加法 考虑3个4bits数相加&#xff0c;10 4 7 21 的过程是这样的&#xff1a; 其中的红色数…...

idea使用free流程,2024idea、2023idea都可以安装免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...

设计模式 之 —— 抽象工厂模式

目录 什么是抽象工厂模式&#xff1f; 定义 特点 抽象工厂模式&#xff08;java代码示例&#xff09; 首先定义第一个接口 实现第一个接口的类 定义第二个接口 实现第二个接口的类 * 创建抽象工厂类 创建扩展了 AbstractFactory 的工厂类 饮料工厂 食物工厂 * 创建一个…...

计量经济学(十六)--一文读懂和学会医学统计学中的四种检验方法

1. 统计学是什么? 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析、总结,并进而进行推断和预测,为相关决策提供依据和参考。它被广泛的应用在各门学科之上,从物理和社会科学到人文科学,甚至被用来工商业及政府的情报…...

解析 C# Dictionary 代码

entries用于存储当前每个节点的数据&#xff0c;其中四个字段分别表示&#xff1a; hashCode&#xff1a;key对应的hash值next&#xff1a;处理hash冲突&#xff0c;可以理解为是一个链表结构&#xff0c;邻接表key&#xff1a;存储的keyvalue&#xff1a;存储的value bucket…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...