Noise Sources Voiceless aspiration can be produced with a noise source at the glottis. (also for voiceless sonorants, including vowels) Noise source that is filtered through VT cascade, so some resonance information will be maintained in output. Breathy voice can be approximated by combining (adding) a noise source and the voiced source Not true breathy voice, which has a different vibrational cycle than modal voice. Different glottal filter would be required.
Nature of Noise source Gaussian noise noise = randn(1,4000) soundsc (noise, 10000); hist (noise,20) spectrum (noise,10000)
Combined Source Model Noise Voiced + noise * AH_interp * AH_gain pulse * AV_interp * AV_gain =
syn3 function signal = syn3 (srate,frame_dur,nf,ftable) % synthesize.m % Louis Goldstein % November 2009 % formant synthesizer % usage: % [out, t] = syn3 (srate,frame_dur,ftable) % % input arguments: % srate sampling rate (in Hz) % f0 fundamental frequency (in Hz) % frame_dur duration of each frame in milliseconds % Ftable character string containing filename of F table % Row 1: AV % Row 2: f0 % Row 3: AH % Row 4 to Row 4+nf-1: formant frequencies % Row 4+nf to Row 4+2*nf-1: formant bandwiths % %returned arguments: % signal vector with synthesized waveform samples % location of parameters in table iav = 1; if0 = 2; iah =3; if1 = 4; ib1 = if1+nf;
% location of parameters in table iav = 1; if0 = 2; iah =3; if1 = 4; ib1 = if1+nf; AV_gain = 100; AH_gain =.05; % voiced gain factor % voiceless gain factor FBW = get_fbw(ftable); nframes = size(fbw,2); dur = nframes * (frame_dur / 1000 );% duration in seconds samps_per_frame = floor(srate * (frame_dur / 1000));
% generate sources % voiced source f0 = FBW(iF0,:); AV = FBW(iAV,:)*AV_gain; voiced = make_impulse_av(f0, srate, frame_dur, AV); nframes = min ([floor(length(voiced)./ samps_per_frame) nframes]); RG = 0; % RG is the frequency of the Glottal Resonator BWG = 100; % BWG is the bandwidth of the Glottal Resonator [b_glo,a_glo]=resonance(srate,rg,bwg); % filter impulse train thru low-pass filter % to get approximation to shape of glottal pulse voiced=filter(b_glo, a_glo, voiced); % noise source AH = FBW(iAH,1:nframes)*AH_gain; noise = randn(1, length(voiced)); % Gaussian noise % take derivative (calculate velocity source from pressure source) noise = filter ([.5.5], 1, noise); AH_int = interp(ah, samps_per_frame); % compute composite source in = voiced + (noise.* AH_int);
function pulses = make_impulse(f0, srate, frame_dur,av); % Input parameters % f0 vector of f0 values % srate sampling rate (Hz) % frame_dur duration of each f0 frame (corresponds to slide in get_f0) % AV vector of voicing amplitudes frame_length = floor(frame_dur * srate / 1000); % frame length in samples length_f0 = length(f0); % interpolate f0 so it has a value for every sample and scale in cycles/ sample cont_freq = interp(f0/srate, frame_length); cont_av = interp(av,frame_length); % calculate elapsed cycles for every sample elapsed_cycles = cumsum(cont_freq); %calculate percentage way through current cycle cycle_percent = rem(elapsed_cycles,1); shift = [0 cycle_percent(1:end-1)]; % set pulses (1s) and 0s elsewhere pulses = cycle_percent<shift; % will be true only when cycle boundary is crossed pulses = cont_av.* double(pulses);
New FBW file: aba3.txt Arbitrary Char Arbitrary nos. Must be longest line F 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 AV 1 100 20 100 22 10 33 10 35 100 60 100 F0 1 100 60 100 Pairs: frame val AH 1 0 60 0 F1 1 650 14 650 21 550 35 275 40 650 60 650 F2 1 1350 14 1350 21 1140 35 875 40 1350 60 1350 F3 1 2450 14 2450 21 2300 35 2500 40 2450 60 2450 F4 1 3100 60 3100 F5 1 4650 60 4650 B1 1 100 60 100 B2 1 150 60 150 B3 1 200 60 200 B4 1 200 60 200 B5 1 400 60 400 Make sure each line specifies value for frame 1, and for last frame
Stages in modeling VCV (1) Set vowel formants and bandwidths: use constant values for entire sequence (2) Find location of silence (or low amplitude closure voicing) and set low value of AV there. (3) Find values of F1-F3 at closure onset and release. Interpolate between vowel F values and these values over the frames where you see transition (4) For aspirated stops, add AH and remove AV during release transitions. Also increase B1 during this interval.
aba
aba3.txt F 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 AV 1 100 20 100 22 10 33 10 35 100 60 100 F0 1 100 60 100 AH 1 0 60 0 F1 1 650 14 650 21 550 35 275 40 650 60 650 F2 1 1350 14 1350 21 1140 35 875 40 1350 60 1350 F3 1 2450 14 2450 21 2300 35 2500 40 2450 60 2450 F4 1 3100 60 3100 F5 1 4650 60 4650 B1 1 100 60 100 B2 1 150 60 150 B3 1 200 60 200 B4 1 200 60 200 B5 1 400 60 400
apa.txt F 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 AV 1 100 20 100 22 0 33 0 38 0 42 100 60 100 F0 1 100 60 100 AH 1 0 33 0 35 50 38 50 40 0 60 0 F1 1 650 14 650 21 550 35 275 40 650 60 650 F2 1 1350 14 1350 21 1140 35 875 40 1350 60 1350 F3 1 2450 14 2450 21 2300 35 2500 40 2450 60 2450 F4 1 3100 60 3100 F5 1 4650 60 4650 B1 1 100 60 100 B2 1 150 60 150 B3 1 200 60 200 B4 1 200 60 200 B5 1 400 60 400