草庐IT

【20220627】【信号处理】自相关函数的定义、计算方法及应用

Satisfying 2023-05-27 原文

目录

一、定义

1.1 概念引入

1.2 自相关定义

1.3 一个小例子 

二、性质

三、Matlab 仿真

四、应用


一、定义

1.1 概念引入

        要描述两个信号之间的相似性,仅用 “很像”、“不太像” 等的描述就显得十分模糊,因此就需要一个指标定量描述信号间的相似程度。根据 “相关函数” 那篇文章可以知道,相关函数的物理意义就是用于定量描述两个随机信号之间的线性相关性,计算公式为:

        相关系数的定义及相关性质详见:【20220623】【信号处理】深入理解Pearson相关系数和Matlab corr()、corrcoef()仿真_Satisfying的博客-CSDN博客

        相关函数可分为自相关函数、互相关函数和协方差函数。自相关函数是描述同一个随机信号  在任意不同时刻  的取值之间的线性相关程度;互相关函数式描述两个不同的随机信号  在任意不同时刻  的取值之间的线性相关程度。本文重点介绍自相关函数。

1.2 自相关函数定义

        自相关函数(ACF, Auto Correlation Function)是描述某一个随机信号在不同时刻之间的相关程度。自相关函数相当于对信号本身做 “互相关”,表示同一序列不同时刻的相关程度。利用自相关函数的物理意义,它可以用来寻找信号中的重复模式(比如寻找淹没在噪声中周期信号的周期),还可以识别丢失的基频等。自相关函数常用大写字母  表示,其定义式为:

        对于连续信号,定义式为:

 

        对于离散信号,定义式为:

        也就是说,自相关函数就是信号  和信号的时延  的乘积之和,自相关函数曲线是时延  的函数。

        区分自相关函数和自相关系数:自相关系数类似于相关系数的概念,它是没有量纲的。自相关系数常用希腊字母  表示,其定义式为(定义式就是自相关函数和自相关系数的转换关系式):

1.3 一个小例子 

        假如有一个时间序列 ,根据离散信号的定义,做如下计算:

        解释:虽然相关函数定义是从负无穷到正无穷,但是移位之后有交叉的部分乘积才不为零,因此只计算交叉部分即可。因此,长度为 10 的时间序列,自相关函数的结果是 1*19 的数组。即,长度为 N 的时间序列,其自相关函数是长度为 2N-1 的数组。 

二、性质

  1. 自相关函数是偶函数,自相关系数曲线关于  对称;
  2. 当  时,自相关函数取得最大值,即:,其物理意义为信号的均方值;
  3. 周期信号的自相关函数仍为同频率的周期信号
  4. 若随机信号不含周期成分,当  趋于无穷大时,自相关函数趋于信号平均值的平方。

        性质的证明过程详见:【20220629】【信号处理】(平稳随机信号)自相关函数性质的证明过程

三、Matlab 仿真

        Matlab 中求时间序列自相关的函数命令为:xcorr()

%% 自相关函数
clear; clc; close all; warning off;

xn = 1 : 10;
[xn_autoxcorr, tau]= xcorr(xn);  % 时间序列xn的自相关函数曲线
figure(1); clf;
plot(tau, xn_autoxcorr, 'linewidth', 1.2); 
xlabel('\tau'); ylabel('自相关系数'); title('xn的自相关函数曲线');
set(gca, 'fontsize', 14);

四、应用

  1. 回波检测;
  2. 分析出信号中的噪声并进行去噪;
  3. 检测淹没在随机噪声中的周期信号;
  4. 从畸变的波形中分离出基波和谐波等。

有关【20220627】【信号处理】自相关函数的定义、计算方法及应用的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  6. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  9. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  10. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

随机推荐