MATLAB之相关函数

谁践踏了优雅 2022-02-20 14:06 836阅读 0赞

文章目录

  • 相关函数
  • 已知平稳随机过程的功率谱,求自相关函数

相关函数

  1. % 功能:
  2. % 1.导入txt格式的两信号,
  3. % 2.求其各自的自相关函数Rxx,自协方差函数Cxx,自相关系数/归一化自协方差函数
  4. % 3.求两信号的互相关函数Rxy,互协方差函数Cxy,,互相关系数/归一化互协方差函数,延时tao
  5. % 4.求信号的功率(求均方值,或者自相关函数(延时tao=0),自功率谱的IFFT(延时tao=0,注意区别双边谱和单边谱))
  6. % 各物理意义如下:
  7. % 自相关函数Rxx:反映了噪声x(t)在不同时刻t1,t2取值的相关程度
  8. % 延时为0时的R值(最大值)= 均方值,反映了随机噪声的平均功率(直流分量功率+交流分量功率)
  9. % 延时为无穷大时的R = 均值^2, 反映了随机噪声的直流分量的功率
  10. % 归一化相关函数:也反映了噪声x(t)在不同时刻t1,t2取值的相关程度,
  11. % 但消除了随机噪声的幅度和功率的影响,更准确反映相关程度
  12. % 归一化自相关函数 = Rxx/Rxx(0) = Rxx/max(Rxx) = Rxx/ ((1/length(x))*sum(x.^2));
  13. % ='coeff'
  14. % 归一化互相关函数 = Rxy/sqrt(Rxx(0).*Ryy(0)) = Rxy/sqrt(max(Rxx).*max(Ryy(0)))
  15. % ='coeff'
  16. % 注意:均方值因为除了个N,所以对应的是biased,注意对应关系
  17. % 自协方差函数Cxx :反映了同一随机噪声x(t)的交流分量在不同时刻t1,t2取值的相关程度
  18. % Cxx = Rxx-(mean(x))^2
  19. % 互协方差函数Cxy:反映了两随机噪声x(t)的交流分量在不同时刻t1,t2取值的相关程度
  20. % Cxx = Rxy-mean(x)*mean(y)
  21. % 归一化自协方差函数Cxx_nom = Cxx./var(x)
  22. % 归一化互协方差函数Cxy_nom = Cxy./(sqrt(var(x)).*sqrt(var(y)))
  23. % 编辑者:lily
  24. % 日期:2019,4,13
  25. clc;
  26. clear;
  27. close all;
  28. % =========== input signal ==========================
  29. Fs = 12000;
  30. x = load('err mic1 - off.txt');
  31. y = load('err mic2 - off.txt');
  32. % =============== AutoCorr/CrossCorr ===============================
  33. % N :累加平均次数
  34. % m :延时序号
  35. % 'biased':有偏估计,将'none'/(N)
  36. % 'unbiased':无偏估计,将'none'/(N-|m|)
  37. % 'coeff':将'none' 作归一化处理,除以最大值。
  38. % Rxx_max: m = 0时的值,也是均方值 ( Rxx_max = Rxx(0) )
  39. % Rxy_max: 两信号m = 0的自相关函数相乘,再开根号。( Rxy_max = sqrt(Rxx(0)*Ryy(0))
  40. % 'none':不作归一化处理
  41. % biased虽是有偏估计,但渐近一致估计,估计量的方差小于无偏估计,实际中多用有偏估计
  42. % 归一化相关函数 = 'none'先计算,再求归一化 = 'coeff'
  43. str = {
  44. 'biased','unbiased','coeff','none'};
  45. ind = 1;
  46. [Rxy, c] = xcorr(x, y, str{
  47. ind});
  48. [Ryy, d] = xcorr(y, y, str{
  49. ind});
  50. [Rxx, b] = xcorr(x, x, str{
  51. ind});
  52. tao = b/Fs; %tao: 偏移的时间,用偏移个数乘采样间隔
  53. % =============== figure ===============================
  54. figure;
  55. plot(tao, Rxx);
  56. title(str{
  57. ind});
  58. grid;
  59. figure;
  60. plot(tao, Rxy);
  61. title(str{
  62. ind})
  63. grid;
  64. % ===============求延时 =====================================
  65. [~,indexMax] = max(Rxx);
  66. disp(['Time lag = ' num2str(tao(indexMax))])
  67. % ============= 归一化自相关函数rho_xx ==============================
  68. rho_xx = Rxx./max(Rxx) ;
  69. rho_xxx = Rxx./ ((1/length(x))*sum(x.^2));
  70. figure;
  71. plot(rho_xx);
  72. hold on;
  73. plot(rho_xxx);
  74. legend('用最大值算','用均方值算');
  75. title('归一化自相关函数rho_xx ');
  76. % =============== 归一化互相关函数rho_xy =================================
  77. rho_xy = Rxy/sqrt(max(Rxx).*max(Ryy));
  78. figure;
  79. plot(rho_xy);
  80. title('归一化互相关函数rho_xy ');
  81. % =============== 自协方差函数Cxx ===============================
  82. Cxx = Rxx-(mean(x))^2;
  83. figure;
  84. plot(tao, Cxx);
  85. title('自协方差函数Cxx')
  86. grid;
  87. % =============== 互协方差函数Cxy ===============================
  88. Cxy = Rxy-mean(x)*mean(y);
  89. figure;
  90. plot(tao, Cxy);
  91. title('互协方差函数Cxy ')
  92. grid;
  93. % =========== 归一化自协方差函数Cxx_nom ============================
  94. Cxx_nom = Cxx./var(x);
  95. figure;
  96. plot(tao,Cxx_nom);
  97. title('归一化自协方差函数Cxx_nom')
  98. grid;
  99. % ============ 归一化互协方差函数Cxy_nom=============================
  100. Cxy_nom = Cxy./(sqrt(var(x)).*sqrt(var(y)));
  101. figure;
  102. plot(tao,Cxy_nom);
  103. title('归一化互协方差函数Cxy_nom')
  104. grid;

已知平稳随机过程的功率谱,求自相关函数

  1. % 功能:已知平稳随机过程的功率谱,求自相关函数
  2. % 平稳随机过程的功率谱连续时间表达形式:Fw = 2*pi* dirac(w);
  3. % 验证频域为1ifourier是单位冲击函数。
  4. % 编辑者:lily
  5. % 日期:2019,4,18
  6. clear;
  7. clc;
  8. close all;
  9. % ======================= input signal ==========================
  10. syms w t %定义一个符号变量x, 后续可以做一些符号操作
  11. Fw = 2*pi* dirac(w);
  12. ft = ifourier(Fw,w,t);
  13. pretty(ft); % 表达式的形式

发表评论

表情:
评论列表 (有 0 条评论,836人围观)

还没有评论,来说两句吧...

相关阅读

    相关 matlab函数diag

    diag(A) 这个看似简单的函数确认让我头疼了几个小时 该函数其实有两个作用 ① 如果A是一个矩阵,那么diag(A)的作用便是提取A的对角线元素 ② 如果A是一个向

    相关 matlab函数bsxfun

    bsxfun(fun,A,B) 偶然间发现了这个函数,强大得不得了呀,它的作用是:对两个矩阵A和B之间的每一个元素进行指定的计算(函数fun指定);并且具有自动扩维的作用