kalex 发表于 2008-9-3 16:06

求助MATLAB中的xcorr函数的使用

各位大侠使用过matlab中的xcorr相关函数吗?我用起来有点疑问,我使用的形式是xcorr(x,y),但在MATLAB中使用的时候计算出来的结果和按照相关公式手推导的结果发现输出的Rxy(n)序列的结果值的顺序不一致,不知道用过的人有没有发现这个问题啊

songzy41 发表于 2008-9-3 20:44

不清楚楼主的问题,是否xcorr(x,y)的结果与Rxy(n)的IFFT变换的结果不一致?还是由xcorr(x,y)的结果进行FFT,得到Rxy(n),与直接计算Rxy(n)的结果不一致?

kalex 发表于 2008-9-5 18:59

回复 沙发 songzy41 的帖子

我用的C语言写的是用FFT的方法来计算相关值Rxy(n),也就是对Rxy(k)进行IFFT变换,这与matlab中xcorr(x,y)的计算结果值存在顺序问题

songzy41 发表于 2008-9-5 20:32

原帖由 kalex 于 2008-9-5 18:59 发表 http://www.chinavib.com/forum/images/common/back.gif
我用的C语言写的是用FFT的方法来计算相关值Rxy(n),也就是对Rxy(k)进行IFFT变换,这与matlab中xcorr(x,y)的计算结果值存在顺序问题
如果想从Rxy(k)进行IFFT变换与matlab中xcorr(x,y)的计算结果一致,主要是数据排列的问题。有这样两种方法:
1,设x和y序列长N,补0后成2N-1点长,x是在序列后补0,而y是在序列前补0,进行2N-1点的FFT,变成X和Y,求得Pxy=X.*conj(Y),再进行IFFT变换,得到的Rxy(n)与MATLAB求得的一致;
2,x和y都在序列后补0,补成长2N-1点,进行2N-1点的FFT,变成X和Y,求得Pxy=X.*conj(Y),进行IFFT变换,再做 ifftshift,得Rxy(n)与MATLAB求得的一致。
楼主可先用MATLAB试一下,再转到C语言中去。

bcm1983 发表于 2008-9-5 21:11

求教如何绘制功率谱图中的特征频率?

求教如何绘制功率谱图中的特征频率?
% 本程序采用相关函数法计算给定信号的功率谱
fs=200;
fid = fopen('E:/xuexi/SBL/xiluodu/testfor90610027/mshuju/080724D10.txt');
a = fscanf(fid,'%g %g %g %g',);
fclose(fid);
n=size(a);   
nfft=n(2);
num=n(1);
for i=1:num
    xn=a(i,:);
    cxn=xcorr(xn,'unbiased');
    cxk=fft(cxn,nfft);
    pxx=abs(cxk);
    index=0:round(nfft/2-1);
    k=index*fs/nfft;
    plot_pxx=10*log10(pxx(index+1));%10*log10(pxx(index+1));
    figure
    plot(k,plot_pxx)
    xlabel('Frequency/Hz');
    ylabel('Power/W')
    grid on
    title('PSD')
end
for i=1:num
    average(i)=mean(a(i,:));
    vary(i)=(sum((a(i,:)-mean(a(i,:))).^2)/length(a(i,:)))^0.5 ;
end
average
vary
请问大家用何程序才能把图中主要频率值绘制出来?
拜求各位大侠了!!!

bcm1983 发表于 2008-9-5 21:12

不好意思搞错了?
罪过罪过!
页: [1]
查看完整版本: 求助MATLAB中的xcorr函数的使用