plotWave_YW(1, clean, fs, 'time', 0, 'clean speech');
plotWave_YW(1, clean, fs, 'time', 1, 'clean speech');
plotWave_YW(0, clean, fs, 'time', 1, 'clean speech');
function plotWave_YW(newFig, signal, fs, type, x_axis, name, removeFreq, frame)
%% By YI-WEN CHEN, 2017 / Jarvus Studio % 1. Plot signal wave in time or frequency domain % 2. Choose x-axis as time or samples % 3. Remove spectral energy under a value when show the spectrogram % Read more at http://jarvus.dragonbeef.net/note/noteAudioPlot.php % % Required Input Parameters : % newFig Create in a new figure window ( 0:No, 1:Yes ) % signal Speech data % fs Sampling frequency (Hz) % type 'time' or 'freq' % Optional Input Parameters : % x_axis 0: samples, 1: time % name Figure title % removeFreq Threshold for spectral energy % frame Frame size for spectrogram (ms) % % example : % [ clean, fs ] = audioread( 'sp10.wav' ); % % open a new figure, plot in time domain % % show index as x-axis, titile is 'clean speech' % plotWave_YW(1, clean, fs, 'time', 0, 'clean speech'); % % open a new figure, plot in time domain % % show time as x-axis, titile is 'clean speech' % plotWave_YW(1, clean, fs, 'time', 1, 'clean speech'); % % open a new figure, plot in frequency domain % % titile is 'clean speech' % plotWave_YW(1, clean, fs, 'freq', 1, 'clean speech'); % % open a new figure, plot in frequency domain % % titile is 'clean speech', remove spectral energy when under 0 % plotWave_YW(1, clean, fs, 'freq', 1, 'clean speech',0); % % use subplot, so the first parameter should be zero % figure; % subplot(2,1,1); % plotWave_YW(0, clean, fs, 'time', 1, 'clean speech'); % subplot(2,1,2); % plotWave_YW(0, clean, fs, 'freq', 1, 'clean speech'); if ( nargin < 5) x_axis = 0; end if ( nargin < 7) removeFreq = 0; end if ( nargin < 8) frame = 32; end s_length = length(signal); sampleTime = ( 1:s_length )/fs; frameSize = fix(frame*0.001*fs); if ( newFig == 1 ) figure; end if ( strcmp(type, 'time') && x_axis == 0) plot(signal); if ( nargin > 5 ) title(name) end xlabel('Samples');ylabel('Amplitude'); end if ( strcmp(type, 'time') && x_axis == 1) plot(sampleTime, signal); if ( nargin > 5 ) title(name) end xlabel('Time (s)');ylabel('Amplitude'); end if ( strcmp(type, 'freq') ) [B,f,T] = specgram(signal,frameSize*2,fs,hanning(frameSize),round(frameSize/2)); B = 20*log10(abs(B)); if ( nargin > 6 ) B_idx = B <= removeFreq ; B(B_idx) = -50; end imagesc(T,f,B);axis xy;colorbar if ( nargin > 5 ) title(['Spectrogram' ' - ' name]); end xlabel('Time (s)');ylabel('Frequency (Hz)'); end end
Tidak ada komentar:
Posting Komentar