matlab上的'findpeaks'函数输出错误。错误是'输出参数太多'?

时间:2014-03-09 15:27:29

标签: matlab signal-processing

先谢谢你。

我是一个机器学习者。 对于一个项目,我创建了一个matlab函数,它在频域中返回信号的几个特征。

该函数返回信号的能量,傅里叶系数之和,熵,pwr_at_DC,峰值频率下的功率,以及峰值频率/显性频率

错误说明'两个输出参数'!

代码就是这个......

%signal = [120 111 117 109 94 104 125 161]; %for example consider this discrete signal.

%the function returns Singal's energy, sum of fourier coefficients, entropy,
 %pwr_at_DC, power at peak frq, and peak freq.

function [signalFeatures] = SigFreqAnalysis(signal)
    NFFT = length(signal);              %leangth of the signal
    signal = signal - mean(signal);     %remove DC comp (avoid peak at 0Freq.

    FT = fft(signal,NFFT);              %fourier transform n point
    sEnergy = sum(abs(FT).^2)/NFFT;     %spectral energy
    SumCoeff = sum(abs(FT));            %total of all NFFT coefficients!

    %[P,F] = periodogram(signal,[],NFFT,'power');
    [P,F] = pwelch(signal,ones(NFFT,1),0,NFFT,'power');     %[P,F] - PSD of the signal

    %P1=real(P1);

    %Steps for Entropy: calc PSD ---> normalize p ---> entropy = ??(P)log2(P);
    Pn=P/norm(P);    log2Pn = log2(Pn + 1e-12);    
    Entropy = -sum(Pn.*log2Pn)/log2(length(Pn));

    PdBW = 10*log10(P);   pwr_at_DC = PdBW(F==0);   % power in dBW

    %the most important dominant frquency! ! !
    [pks_dBW,locs] = findpeaks(PdBW,'NPEAKS',1,'SORTSTR','descend');   %peak/dominant!
    %findpeak returns empty vector if no freq found!

    if isempty(pks_dBW)    
       pks_dBW=0; pkFrq = 0;   %if pks_dbs is 0 findpeak returns empty matrix; 
    else    
       pkFrq = F(locs);     %this is the dominant/peak frequency of X axes!!
    end

    signalFeatures = [sEnergy SumCoeff Entropy pwr_at_DC pks_dBW pkFrq]; 
    %return this vector.
end

错误---> findpeak函数中的'输出参数太多'! 任何人都可以帮我解决这个错误!

感谢, 阿德什沙阿

1 个答案:

答案 0 :(得分:0)

调用该函数的代码应如下所示:

signal = [120 111 117 109 94 104 125 161] 

a = SigFreqAnalysis(signal)

但你可能会这样称呼它

[a b] = SigFreqAnalysis(signal)

因此,输出太多