phase vocoder

10
Phase Vocoder Colter McQuay

Upload: zlhna

Post on 23-Feb-2016

76 views

Category:

Documents


0 download

DESCRIPTION

Phase Vocoder. Colter McQuay. Phase Vocoder Structure. Input x[ nTs ]. Analyze. Effect Specific Code. Synthesize. Output y[ nTs ]. Time Stretch Effect. %% Load Signal From File [ x Fs]= wavread ('../x1.wav'); x=x(:,1 )'; % Convert to mono windowSize =2048 ; % Set up window Size - PowerPoint PPT Presentation

TRANSCRIPT

Phase Vocoder

Phase VocoderColter McQuayPhase Vocoder StructureInput x[nTs]Effect Specific CodeSynthesizeOutput y[nTs]AnalyzeTime Stretch Effect%% Load Signal From File[x Fs]=wavread('../x1.wav');x=x(:,1)';% Convert to monowindowSize=2048;% Set up window SizestretchRatio=2.5;% Our time Stretch RatioanHop=128;% Analysis Hop Size% Calculate Synthesis Hop Size based on ratiosynthHop=round(anHop*stretchRatio); % Analyze input signal[mag phase]=pvAnalyze(x,windowSize,anHop);% Generate output (dont modify phase or % magnitudes)y=pvSynthesize(mag,phase,synthHop,anHop,1);

Toms Diner OriginalStretched by 2.5

Compressed by 0.5

Audacity Time Stretch

Pitch Shift Effect%% Load Signal From File[x Fs]=wavread('../x1.wav');x=x(:,1)';% Convert to monowindowSize=2048;% Set up window SizepitchRatio=0.7;% Our pitch shift RatioanHop=256;% Analysis Hop Size% Calculate Synthesis Hop Size based on ratiosynthHop=round(anHop*pitchRatio);

% Analyze input signal[mag phase]=pvAnalyze(x,windowSize,anHop);% Generate output (dont modify phase or % magnitudes)y=pvSynthesize(mag,phase,synthHop,anHop,1);% Resample output to make pitch shifted % version of input y=resample(y,anHop,synthHop);

Pitch Shifted by 1.4Pitch Shifted by 0.7Robotization%% Load Signal From File[x Fs]=wavread('../x1.wav');x=x(:,1)';% Convert to monowindowSize=512;% Set up window SizeanHop=128;% Analysis Hop SizesynthHop=anHop;% Synthesis Hop Size

% Analyze input signal[mag phase]=pvAnalyze(x,windowSize,anHop);% Get size of phase array[pRows pCols]=size(phase);% Set new phases to zerophase=zeros(pRows,pCols);% Reconstruct Output Signaly=pvSynthesize(mag,phase,synthHop,anHop,1);Window = 512 Hop=128Window = 1024 Hop=512

Whisperization%% Load Signal From File[x Fs]=wavread('../x1.wav');x=x(:,1)';% Convert to monowindowSize=512;% Set up window SizeanHop=128;% Analysis Hop SizesynthHop=anHop;% Synthesis Hop Size

% Analyze input signal[mag phase]=pvAnalyze(x,windowSize,anHop);% Get size of phase array[pRows pCols]=size(phase);% De-Correlate phases by randomizingphase=2*pi*rand(pRows,pCols);% Reconstruct Output Signaly=pvSynthesize(mag,phase,synthHop,anHop,1);

WhisperizationIsolation of Stable & Transient Components%% SOUND FILE[x Fs]=wavread('../stableTest.wav');x=x(:,1)';windowSize=1024;anHop=512;synthHop=anHop; %Analyze Input Signal[mag phase]=pvAnalyze(x,windowSize,anHop);[pRows pCols]=size(phase);% Set Thresholdthresh=.5;% Pre-allocate new phase and magnitude arraysnewPhase=zeros(pRows,pCols);newMag=zeros(pRows,pCols);% make first window of new phase array equal to original phasenewPhase(1,:)=phase(1,:);% nominal phase increment for each binomega_k=2*pi*[0:pCols-1]./pCols;% Iterate through all windowsfor i = 2:pRows % Calculate the target phase for each bin based on previous phase target_phase=phase(i-1,:)+omega_k*anHop; % Calculate deviation from the target phase deviation_phase=princarg(phase(i,:)-target_phase); % Set all bins either outside or inside the threshold to zero % NOTE: if abs(deviation_phase)thresh the transient % components will be kept newPhase(i,:)=phase(i,:).*(abs(deviation_phase)