2015-05-11 3 views
0

Я хочу проанализировать длинные аудиофайлы в Matlab из формата .wav и экспортировать всю длину звука в виде спектрограмм в 2048x2048 пиксельных растровых изображениях. в течение одной секунды звука я хотел бы автоматизировать около 20 битмапов, и я хотел бы позволить Matlab обрабатывать и возвращать 1000 растровых изображений для длинного звука в течение нескольких часов, а затем выполнять дальнейшую обработку в другой программе.Могу ли я сохранить много графиков в Matlab в виде растровых изображений с пакетной обработкой?

Возможно ли это для новичков?

ответ

2

Здесь старую реализацию SciLab, чтобы вы начали. Я бы советовал сохранить полученные спектрограммы как данные, а не как изображение. И напишите еще одну функцию, которая может преобразовывать данные в изображения.

// For simple plotting, Positions in Milliseconds!! 
function plotASpectrogram(source, startPosition, endPosition) 

    [audio,sampleRate] = wavread(source); 

    startPosition = msecToSamples(startPosition, sampleRate); 
    endPosition = msecToSamples(endPosition, sampleRate); 

    audio = cropAudio(audio, startPosition, endPosition); 

    mapsound(audio);//,.1,100,2000,1,sampleRate); 

    //Label axes 
    startPosition = samplesToMsec(startPosition, sampleRate); 

    if(startPosition==0) 
    startPosition = ""; 
    else 
    startPosition = " + " + string(startPosition/1000); 
    end  

    labelTheAxes("", "", "Spec " + string(getNameFromSource(source))); 
endfunction 

// Create a linear spectrogram 
// parameter [in] audio - audio file read in with wavread 
// parameter [in] specFreqSamples - number of frequencies 
// parameter [in] specTimeSamples - number of time samples 
// parameter [in] specOverlap - amount of overlap in spectrogram windows 
// parameter [in] hann - precalculated hanning window for smoothing 
// parameter [out] tempSpec - A matrix containing the spectrogram 
function tempSpec = createLinearSpectrogram(audio, specFreqSamples, specTimeSamples, specOverlap, hann) 

    //Allocate memory for the input and output arrays. 
    tempSpec = zeros(St,specFreqSamples); 
    in  = zeros(specTimeSamples); //The input will have real values, 
    out  = zeros(specFreqSamples,2); //While the output will have complex values.It is also 1/2 the length of the input array +1. 

    for i = 1:St 
    //Store the input data into the input array 
    for j = 1:specTimeSamples 
     in(j) = audio(1,(i-1) * specTimeSamples/specOverlap + j); 
     in(j) = in(j) * hann(j); 
    end 

    //Execute the FFT 
    out(1:specTimeSamples,1) = real(fftw(in(1:specTimeSamples),1)); 
    out(1:specTimeSamples,2) = imag(fftw(in(1:specTimeSamples),1)); 

    //Convert the output into complex data and calculate the absolute value of every 
    //output. Store it into the spectrogram array. 
    for j = 1:specFreqSamples 
     tempSpec(i,j) = sqrt(out(j,1) * out(j,1) + out(j,2) * out(j,2)); 
    end  
    end 
endfunction 

// Some utility functions 
function labelTheAxes(Title, LabelX, LabelY) 

    a=get("current_axes"); 
    a.x_label; 
    a.y_label; 
    xtitle(string(Title),string(LabelX), string(LabelY)); 

endfunction 

function numberOfSamples = msecToSamples(numberOfMilliSeconds, sampleRate) 
    numberOfSamples = round((numberOfMilliSeconds/1000) * sampleRate); 
endfunction 

function croppedAudio = cropAudio(audio, startPosition, endPosition) 
    //Parameters in Samples!!! 
    croppedAudio = audio(1,startPosition:endPosition); 
endfunction 
1

Вы должны использовать команду print:

fig = figure(); 
%Plot some data 
print (fig, '-noui', '-dbmp', 'myfile.bmp'); 

Я хотел бы предложить вам попробовать PNG (png) вместо BMP, как вы можете сохранить некоторую память (или использовать 256 значений BMP bmp256)

+0

Будьте осторожны с изображениями 'png', поскольку они являются потерями и могут изменить ваши результаты. – spoorcc

 Смежные вопросы

  • Нет связанных вопросов^_^