1信号间的相互关系

1 信号间的相互关系

1.2 新的信号间运算类

 
  1. classdef CSigCalc<handle
  2. % relation between two signals
  3. %
  4. properties
  5. m_sig1;
  6. m_sig2;
  7. end
  8. methods
  9. function obj = CSigCalc(sig1, sig2)
  10. dFs1 = sig1.m_dFs;
  11. dFs2 = sig2.m_dFs;
  12. % 判断两信号的采样率一致
  13. if abs(dFs1 - dFs2) < eps
  14. obj.m_sig1 = sig1;
  15. obj.m_sig2 = sig2;
  16. else
  17. disp('Sample frequency of the two signals are not equal.')
  18. disp('Signal object is not constructed.')
  19. return;
  20. end
  21. end
  22. function relat = Relation(obj)
  23. % 计算相关系数
  24. vecSig1 = obj.m_sig1.m_vecSig;
  25. [~, colNum] = size(vecSig1);
  26. if colNum == 1 % to be sure the row vector
  27. vecSig1 = vecSig1';
  28. end
  29. vecSig2 = obj.m_sig2.m_vecSig;
  30. [~, colNum] = size(vecSig2);
  31. if colNum == 1 % to be sure the row vector
  32. vecSig2 = vecSig2';
  33. end
  34. if length(vecSig1) > length(vecSig2)
  35. vecSig1 = vecSig1(1:length(vecSig2));
  36. elseif length(vecSig1) < length(vecSig2)
  37. vecSig2 = vecSig2(1:length(vecSig1));
  38. else
  39. end
  40. relat = (vecSig1*vecSig2')/...
  41. sqrt(vecSig1*vecSig1')/sqrt(vecSig2*vecSig2');
  42. end
  43. function Disp2SigCurve(obj)
  44. Fs = obj.m_sig1.m_dFs;
  45. vecSig1 = obj.m_sig1.m_vecSig;
  46. vecT1 = (0:length(vecSig1)-1)/Fs;
  47. vecSig2 = obj.m_sig2.m_vecSig;
  48. vecT2 = (0:length(vecSig2)-1)/Fs;
  49. figure;
  50. plot(vecT1,vecSig1,vecT2,vecSig2,'linewidth',2)
  51. xlabel('时间 S')
  52. ylabel('幅值')
  53. legend('1','2')
  54. end
  55. function [vecRelFunc, vecLags] = RelatFunc(obj)
  56. strArrScaleOpt = {'biased','unbiased','coeff','none'};
  57. ind = 3;
  58. dFs = obj.m_sig1.m_dFs;
  59. [vecRelFunc, vecLags] = xcorr(obj.m_sig1.m_vecSig, obj.m_sig2.m_vecSig,strArrScaleOpt{ind});
  60. vecLags = vecLags/dFs;
  61. figure;
  62. plot(vecLags, vecRelFunc)
  63. title(strArrScaleOpt{ind})
  64. grid;
  65. [~,indexMax] = max(vecRelFunc);
  66. disp(['Time lag = ' num2str(vecLags(indexMax))])
  67. end
  68. end
  69. end

1.2 脚本程序

 
  1. % Exer_SigProcess_Script.m
  2. close all;
  3. strCurrentPath = cd;
  4. addpath([strCurrentPath '\classdef']);
  5. % 构造信号1sig1
  6. vecAmp=[1 3 5 7];
  7. vecFreq = [0.25 2 3 4];
  8. vecPhi = [0 pi/3 pi/4 pi/2];
  9. Fs = 2^10;
  10. t = 0:1/Fs:2*pi;
  11. ind = 1;
  12. xt = vecAmp(ind)*cos(2*pi*vecFreq(ind)*t + vecPhi(ind));
  13. sig1 = CSignal(Fs, xt);
  14. xt = vecAmp(ind)*cos(2*pi*vecFreq(ind)*t + vecPhi(4));
  15. sig2 = CSignal(Fs, xt);
  16. sigCalc = CSigCalc(sig1,sig2);
  17. relat = sigCalc.Relation;
  18. disp(['relat = ' num2str(relat)])
  19. Disp2SigCurve(sigCalc);
  20. rmpath([strCurrentPath '\classdef']);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值