关于复数序列的输入问题
我想用胡广书老师里面的最大熵谱程序,可是它要求要复数序列,而我采集的信号是实数呀,怎么解决呀,请高手指点,输入时可以将虚部全部设为零吗?谢谢! 对于做最大熵谱中,输入序列可以是实数序列。以下是胡广书老师提供的求最大熵谱的MATLAB程序。
%-------------------------------------------------------------------------
%exa121201_pmem.m, for example 12.12.1
%to test pmem.m;
%-------------------------------------------------------------------------
clear all;
% 调出数据;
load test x;
N=4096;
fn=-0.5:1/N:0.5-1/N;
% 使用最大熵算法得到功率谱估计;
xpsd=pmem(x,30,N);
pmax=max(xpsd);
xpsd=xpsd/pmax;
xpsd=10*log10(xpsd+0.000001);
plot(fn,fftshift(xpsd));grid on;
我估计楼主是用的FORTRAN程序,而输入序列设为复数。这可能是计算中的需要,而不是对输入序列的要求。可以把实数序列输入赋于实部,虚部设为0。
谢谢宋老师
本帖最后由 wdhd 于 2016-9-7 15:56 编辑我用的是Fortran程序,并且用的是Harburg,我输入sin(2*pi/100*t)这个信号,dt=1s,分析出的频率在0.01Hz,这是对的,但分析我做得结果时就感觉不对了,
宋老师你帮看一下我得结果在附件里,看是啥问题
并且我把原始数据也传上去了,请宋老师 帮我用fortran做一下
原始数据
我没有FORTRAN的平台运行,所以无法从FORTRAN上帮助你。我用MATLAB运行,程序有data=load('data1.dat');
t=data(:,1);
x=data(:,2);
T=t(2)-t(1);
fs=1/T;
N=length(x);
=pburg(x, 10, N, fs);
plot(f, Pxx);
xlabel (' Frequency' );
ylabel('Power Spectrum');
title('PSD--Burg method Oder= 10' );
axis(); grid;
用burg方法求功率谱。其中pburg(x, norder, N, fs)函数中的norder很关键,我选用了10,得下图;若选用20便会得类似你的图,所以改一下AR模型中的阶数。
宋老师,非常感谢!
能遇到宋老师这样的好老师,真是幸福啊
页:
[1]