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

news2024/9/29 7:16:38

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)-1
    c1(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)<0
    fprintf('y2比y1滞后%d 个采样点 \n',abs(lags(index)));
else
    fprintf('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

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

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

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

相关文章

spring原理(第八天)

aop的实现原理 AOP 底层实现方式之一是代理&#xff0c;由代理结合通知和目标&#xff0c;提供增强功能 除此以外&#xff0c;aspectj 提供了两种另外的 AOP 底层实现&#xff1a; 第一种是通过 ajc 编译器在编译 class 类文件时&#xff0c;就把通知的增强功能&#xff0c;织…

Linux之文件系统

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 C进阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.磁盘 二.对磁盘进行管理 三.通过inode找到文件…

Netty的几种IO模式的实现与切换

写在文章开头 今天我们就基于Netty来简单聊聊开发中几种常见的IO模式以及Netty对于这几种IO模式的实现&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff0c;是 CSDN的博客专家 &#xff0c;也是开源项…

如何在RabbitMQ中防止消息丢失

如何在RabbitMQ中防止消息丢失 在分布式系统中&#xff0c;消息的可靠传递是至关重要的。RabbitMQ作为一个强大的消息队列系统&#xff0c;提供了多种机制来确保消息不会丢失。本文将介绍在RabbitMQ中防止消息丢失的几种方法。 消息确认机制 消息发布确认 在RabbitMQ中&…

pdf转换器哪个好?不要错过这4款转换工具

pdf转换器哪个好&#xff1f;选择一款高效的PDF转换器&#xff0c;无疑能极大地便利我们的日常工作与学习。它不仅能够轻松实现PDF文件与Word、Excel、图片等多种格式之间的互转&#xff0c;还支持批量处理&#xff0c;显著提高工作效率。无论是编辑修改、格式调整还是分享传阅…

深入浅出消息队列----【RocketMQ 和 Kafka 消息存储差异对比】

深入浅出消息队列----【RocketMQ 和 Kafka 消息存储差异对比】 RocketMQ 的消息存储Kafka 的消息存储对比 RocketMQ 与 Kafka 本文仅是文章笔记&#xff0c;整理了原文章中重要的知识点、记录了个人的看法 文章来源&#xff1a;编程导航-鱼皮【yes哥深入浅出消息队列专栏】 Roc…

指南!网上卖药品需要什么资质?

随着互联网技术的飞速发展&#xff0c;医药电商已经成为药品和医疗器械销售的重要渠道。处方药的网络销售政策逐步放宽&#xff0c;医药电商行业迎来了快速发展的春天。在这一领域&#xff0c;主要的参与者包括药品销售公司和电商平台。 为了吸引流量和满足处方药审方的需求&a…

第18课 Scratch入门篇:时钟-当前时间

时钟 故事背景&#xff1a; 在一个遥远的科技星球上&#xff0c;时间对于居民们来说无比珍贵。这个星球上的居民们都是技术高手&#xff0c;他们使用先进的编程技术来管理自己的生活。然而&#xff0c;星球上的时间系统最近出现了故障&#xff0c;导致时间的流逝变得不稳定。为…

【终极指南】大模型二次开发:从零基础到高手之路

随着人工智能技术的发展&#xff0c;预训练的大模型&#xff08;例如GPT系列、BERT等&#xff09;已成为自然语言处理领域的关键技术之一。对于开发者来说&#xff0c;掌握如何基于这些大模型进行二次开发&#xff0c;不仅可以提升自身的技术实力&#xff0c;还能为企业带来更多…

Flink 如何处理背压

文章目录 目录 前言 一、什么是背压&#xff1f; 二、处理背压的步骤 1.模拟背压机制 2.为什么要关心背压问题&#xff1f; 总结 前言 初次接触Flink的同学会对背压有很多的疑问。本文就是我学习的一些心得和体会&#xff0c;以及借鉴一些文章的感想。 Flink 如何处理背压效应…

使用snap的安装docker配置阿里云镜像加速

使用snap安装docker非常的简单&#xff0c;一条命令即可 snap install docker 但是通过这个命令安装的docker, 配置阿里云镜像跟常规安装的配置起来不太一样, 下面讲一下配置流程 修改docker配置文件/var/snap/docker/current/config/daemon.json 这个文件应该是已经创建好…

重磅!LangChain 官方发布 Agent IDE!!

1 LangChain 开发现状 LangChain 从应用开发框架出发&#xff0c;提供了一套代码级工具集&#xff0c;旨在降低 LLM 的开发难度&#xff0c;在过去一年中吸引了众多开发者&#xff0c;助力他们迅速打造 AI 大模型应用。然而&#xff0c;还有一群用户&#xff0c;他们希望门槛…

NC 最长无重复子数组

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个长度…

idea连接oracle

配置 注意&#xff1a; SID指的是实例名称

C语言宠物系统3

在前面的基础上&#xff0c;加上了修改功能和排序功能&#xff0c;可以选择姓名排序&#xff0c;年龄排序&#xff0c;价格排序。 test.c源文件 #include "Pet.h"void menu() {printf("------------------------\n");printf("- 欢迎来到宠物商店 …

实践出真知:Agents 领域“一年打怪升级”的经验分享

编者按&#xff1a;在你构建 AI Agents 时&#xff0c;是否曾遇到这些困扰&#xff1a;总是在简单任务上出错&#xff0c;从而让你有时会怀疑自己的技术水平&#xff1f;面对客户的需求&#xff0c;AI Agent 表现得像个“笨蛋”&#xff0c;无法准确理解和执行指令&#xff1f;…

不同网络上的计算机怎么通信

从 一个网络上计算机的通信 &#xff0c;我们知道&#xff0c;在一个网络里&#xff0c;多台主机通过交换机连接起来&#xff0c;每台主机的网卡有全球唯一的 MAC 地址&#xff0c;一个网络上的主机通过 MAC 地址通信。 那么&#xff0c;多个网络之间如何互联和通信&#xff1…

【轨物方案】智慧供热物联网整体解决方案

目前城市供暖系统当中&#xff0c;供暖设备一直得不到更新和升级&#xff0c;没有合理的监控设备&#xff0c;导致对供暖的合理调控不理想&#xff0c;供暖严重失调而浑然不知&#xff0c;进而出现冷热不均的问题&#xff0c;极易造成资源严重浪费。缺乏成熟的管理系统&#xf…

上门按摩小程序项目开发功能介绍

上门按摩小程序通常设计为连接按摩服务提供者和客户的平台&#xff0c;提供便捷的预约和服务管理功能。以下是这类小程序可能包含的功能&#xff1a; 用户注册和登录&#xff1a; 用户可以注册个人账户并登录&#xff0c;以便管理个人信息和预约记录。 按摩师信息浏览&#xf…

JAVA中实现线程安全的三种方式

JAVA中实现线程安全的三种方式 1. 同步代码块2. 同步方法3. ReentrantLock4. 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 同步代码块 使用synchronized关键字加在需要同步的代码块上&#xff0c;并指定一个锁对象。这种方式可以…