间接法求功率谱密度之自相关函数 |
您所在的位置:网站首页 › 随机过程的功率谱密度和自相关函数 › 间接法求功率谱密度之自相关函数 |
方法:先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅里叶变换,便得到x(n)的功率谱估计。 (1)、自相关函数 求解步骤:(1)移位;(2)相乘;(3)相加。 function y = myXcorr(x) %输入x:长度为n的一维行向量 %输出y:长度为2n-1的一维行向量 %求解步骤:(1)移位;(2)相乘;(3)相加. n = length(x); %输入行向量的长度 y = zeros(1,2*n-1); %提前分配输出行向量的空间 for i = 1:n %利用前后补0进行移位操作 x1 = [zeros(1,n-i), x]; x2 = [x, zeros(1,n-i)]; y([i,2*n-i]) = x1*x2'; %进行相乘和相加操作 end验证: clc clear a1 = [8 7 2 4 6 8]; a2 = [5 6 8 7 4 1 2]; b1 = xcorr(a1) %MATLAB内置函数计算结果 c1 = myXcorr(a1) %自编MATLAB函数计算结果 b2 = xcorr(a2) %MATLAB内置函数计算结果 c2 = myXcorr(a2) %自编MATLAB函数计算结果结果: (2)求功率谱密度 clc; clear; Fs = 1000; %采样频率 n = 0:1/Fs:1; xn = cos(2*pi*40*n) + 3*cos(2*pi*100*n) + randn(size(n)); %含噪声信号 nfft = 1024; % 间接法 %%% 间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅里叶变换,便得到x(n)的功率谱估计。 %计算序列的自相关函数 cxn = xcorr(xn); mycxn = myXcorr(xn); CXk = fft(cxn,nfft); myCXk = myfft(mycxn,nfft); Pxx = abs(CXk); myPxx = abs(myCXk); index = 0:round(nfft/2-1); k = index*Fs/nfft; plot_Pxx = 10*log10(Pxx(index+1)); myplot_Pxx = 10*log10(myPxx(index+1)); subplot(211); plot(k,plot_Pxx); title('间接法---内置MATLAB函数'); subplot(212); plot(k,myplot_Pxx); title('间接法---自编MATLAB函数');代码中myfft函数见https://blog.csdn.net/xq_520/article/details/102501908 验证结果(部分截图): 傅里叶变换: 功率谱密度计算结果: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |