Mercurial > hg > mauch-mirex-2010
view _misc/featureextraction/.svn/text-base/chunkspectrogram.m.svn-base @ 9:4ea6619cb3f5 tip
removed log files
author | matthiasm |
---|---|
date | Fri, 11 Apr 2014 15:55:11 +0100 |
parents | b5b38998ef3b |
children |
line wrap: on
line source
function [s,f,t] = chunkspectrogram(filename,d_windo,d_nOverlap,d_nFFT, maxf) %% % d_ are the downsampled things % o_ are the original things d_fs = 11025; [temp, o_fs] = wavread(filename,'size'); if mod(o_fs/d_fs,1) ~= 0 error('The sample frequency of the wave file has to be an integer multiple of %1.0f.',d_fs); end o_nSample = temp(1); d_nSample = floor(o_nSample*d_fs/o_fs); o_nOverlap = d_nOverlap * o_fs/d_fs; d_nSamplePerChunk = d_windo+200*(d_windo-d_nOverlap); if d_nSample < d_nSamplePerChunk d_nSamplePerChunk = d_nSample; end d_endsample = d_nSamplePerChunk:d_nSamplePerChunk:d_nSample; o_startsample = [1, d_endsample * o_fs / d_fs + 1]; o_endsample = d_endsample * o_fs / d_fs; o_endsample = min(o_endsample + o_fs / d_fs * d_nOverlap, o_nSample); % extend so that chunks overlap % in most cases the file length is not exactly a multiple of if o_endsample(end) < o_nSample o_endsample = [o_endsample o_nSample]; end %% nChunk = length(o_startsample); for iChunk = 1:nChunk fprintf(1,'_'); end leftpad = zeros(d_windo/2,1); fprintf(1,'\n.') x = resample(mean(wavread(filename,[o_startsample(1) o_endsample(1)]),2),d_fs,o_fs); s = spectrogram([leftpad; x], d_windo,d_nOverlap,d_nFFT, d_fs); f = (0:d_nFFT/2-1)/d_nFFT*d_fs; if maxf < max(f) maxbin = find(f>maxf,1)-1; else maxbin = length(f); end s = s(1:maxbin,:); f = f(1:maxbin); for iChunk = 2:nChunk-1 fprintf(1,'.') temps = spectrogram(resample(mean(wavread(filename,[o_startsample(iChunk) o_endsample(iChunk)]),2),d_fs,o_fs), ... d_windo,d_nOverlap,d_nFFT, d_fs); s = [s(1:maxbin,:),temps(1:maxbin,:)]; end x = resample(mean(wavread(filename,[o_startsample(nChunk) o_nSample]),2),d_fs,o_fs); if length(x)>d_windo temps = spectrogram(x, ... d_windo,d_nOverlap,d_nFFT, d_fs); s = [s(1:maxbin,:),temps(1:maxbin,:)]; end fprintf(1,'.\n') t = (0:size(s,2)-1) * (d_windo-d_nOverlap)/d_fs;