You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.2 KiB
89 lines
2.2 KiB
% Copyright David Rowe 2009
|
|
% This program is distributed under the terms of the GNU General Public License
|
|
% Version 2
|
|
%
|
|
% Plot voicing information from sample and dump files.
|
|
%
|
|
% samfilename is the raw source file, e.g. "../raw/hts1a.raw"
|
|
% samname is the dumpfile prefix, e.g. "../src/hts1a"
|
|
%
|
|
% There is a 160 sample (two frame delay) from the when a sample
|
|
% enters the input buffer until it is at the centre of the analysis window
|
|
|
|
function plvoicing(samfilename, samname, start_f, end_f, pngname)
|
|
|
|
fs=fopen(samfilename,"rb");
|
|
s=fread(fs,Inf,"short");
|
|
|
|
snr_name = strcat(samname,"_snr.txt");
|
|
snr = load(snr_name);
|
|
model_name = strcat(samname,"_model.txt");
|
|
model = load(model_name);
|
|
|
|
Wo = model((start_f+1):end_f,1);
|
|
F0 = Wo*4000/pi;
|
|
dF0 = F0(1:length(Wo)-1) - F0(2:length(Wo));
|
|
|
|
% work out LP and HP energy
|
|
|
|
for f=(start_f+1):end_f
|
|
L = model(f,2);
|
|
Am = model(f,3:(L+2));
|
|
L2 = floor(L/2);
|
|
elow = Am(1:L2) * Am(1:L2)';
|
|
ehigh = Am(L2:L) * Am(L2:L)';
|
|
erat(f-(start_f+1)+1) = 10*log10(elow/ehigh);
|
|
endfor
|
|
|
|
figure(1);
|
|
clf;
|
|
sp = s((start_f-2)*80:(end_f-2)*80);
|
|
plot(sp);
|
|
hold on;
|
|
vhigh = snr((start_f+1):end_f) > 7;
|
|
vlow = snr((start_f+1):end_f) > 4;
|
|
|
|
% test correction based on erat
|
|
|
|
vlowadj = vlow;
|
|
|
|
for f=1:length(erat)-1
|
|
if (vlow(f) == 0)
|
|
if (erat(f) > 10)
|
|
vlowadj(f) = 1;
|
|
endif
|
|
endif
|
|
if (vlow(f) == 1)
|
|
if (erat(f) < -10)
|
|
vlowadj(f) = 0;
|
|
endif
|
|
if (abs(dF0(f)) > 15)
|
|
vlowadj(f) = 0;
|
|
endif
|
|
endif
|
|
endfor
|
|
|
|
x = 1:(end_f-start_f);
|
|
plot(x*80,snr((start_f+1):end_f)*1000,';SNRdB x 1000;g+');
|
|
plot(x*80,-8000 + vhigh*2000,';7dB thresh;g');
|
|
plot(x*80,-11000 + vlowadj*2000,';vlow with corr;g');
|
|
plot(x*80,erat*1000,';elow/ehigh in dB;r');
|
|
plot(x*80,-14000 + vlow*2000,';4dB thresh;r');
|
|
hold off;
|
|
grid
|
|
if (nargin == 5)
|
|
print(pngname, "-dpng", "-S500,500")
|
|
endif
|
|
|
|
figure(2)
|
|
Wo = model((start_f+1):end_f,1);
|
|
F0 = Wo*4000/pi;
|
|
dF0 = F0(1:length(Wo)-1) - F0(2:length(Wo));
|
|
%plot(dF0,'+--')
|
|
%hold on;
|
|
%plot([ 1 length(dF0) ], [10 10] ,'r')
|
|
%plot([ 1 length(dF0) ], [-10 -10] ,'r')
|
|
%axis([1 length(dF0) -50 50])
|
|
%hold off;
|
|
plot(F0,'+--')
|
|
endfunction
|
|
|