How to get the time frequency plot using autoregrssive model?
1 次查看(过去 30 天)
显示 更早的评论
I want to have a time frequency plot using parametric methods, plz anyone help.
0 个评论
采纳的回答
Greg Dionne
2017-3-9
编辑:Greg Dionne
2017-3-9
If you have the Signal Processing Toolbox, try PYULEAR, PBURG, PCOV, PMCOV. Those will give you a periodogram for a given time slice.
You can either call it once per time slice, or if you'd like to do it all in one shot, you can give it a column for each estimate. Something like this pseudo-code:
function pburgspectrogram(x, order, nwin, noverlap, nfft, Fs)
% x - the input signal
% order - the model order
% nwin - the number of samples for any one given estimate
% noverlap - the number of overlapping samples between windows
% nfft - how many points you want for the FFT.
% Fs - sample rate of signal
nx = length(x);
ncol = fix((nx-noverlap)/(nwin-noverlap));
coloffsets = (0:(ncol-1))*(nwin-noverlap);
rowindices = (1:nwin)';
xin = x(rowindices+coloffsets);
T = (coloffsets+(nwin/2)')/Fs;
[Pxx,F] = pburg(xin,order,nfft,Fs);
imagesc(T, F, 10*log10(abs(Pxx)+eps));
set(gca,'YDir','normal');
xlabel('Time');
ylabel('Frequency');
colorbar;
Example
load mtlb
pburgspectrogram(mtlb, 6, 128, 120, 128, Fs);
1 个评论
Greg Dionne
2017-3-16
编辑:Greg Dionne
2017-3-16
Looks like you have an older version of MATLAB that doesn't have implicit expansion.
Replace:
xin = x(rowindices+coloffsets);
with
xin = x(bsxfun(@plus,rowindices,coloffsets));
That should get it to work (at least as far back as R2014b). Use whatever you want for x... so long as it's a column vector. If you have something earlier than that you'll need a for-loop.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!