just tried MBE voicing measure but doesn't look good due to F0 accuracy so will remov...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 Sep 2009 06:52:58 +0000 (06:52 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 1 Sep 2009 06:52:58 +0000 (06:52 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@36 01035d8c-6547-0410-b346-abe4f91aad63

13 files changed:
codec2/octave/plamp.m
codec2/octave/pulse.m
codec2/pitch/hts2.p [deleted file]
codec2/pitch/hts2a.p [new file with mode: 0644]
codec2/script/raw2wav.sh [new file with mode: 0755]
codec2/src/Makefile
codec2/src/dump.c
codec2/src/dump.h
codec2/src/globals.c
codec2/src/initenc.c
codec2/src/sinenc.c
codec2/src/spec.c
codec2/src/synth.c

index b7b479d08b6d90e17039e0ae77fff65e5b8e90d9..e72f9303589d959bff54b2f59ccd03a42c8ee109 100644 (file)
@@ -8,14 +8,28 @@ function plamp(samname, f)
   
   sn_name = strcat(samname,"_sn.txt");
   Sn = load(sn_name);
+
   sw_name = strcat(samname,"_sw.txt");
   Sw = load(sw_name);
+
+  sw__name = strcat(samname,"_sw_.txt");
+  if (file_in_path(".",sw__name))
+    Sw_ = load(sw__name);
+  endif
+
   model_name = strcat(samname,"_model.txt");
   model = load(model_name);
+
   modelq_name = strcat(samname,"_qmodel.txt");
-  modelq = load(modelq_name);
+  if (file_in_path(".",modelq_name))
+    modelq = load(modelq_name);
+  endif
+
   pw_name = strcat(samname,"_pw.txt");
-  Pw = load(pw_name);
+  if (file_in_path(".",pw_name))
+    Pw = load(pw_name);
+  endif
+
   lsp_name = strcat(samname,"_lsp.txt");
   if (file_in_path(".",lsp_name))
     lsp = load(lsp_name);
@@ -36,19 +50,28 @@ function plamp(samname, f)
     axis([1 4000 -10 80]);
     hold on;
     plot((0:255)*4000/256, Sw(f,:),";Sw;");
-    Amq = modelq(f,3:(L+2));
-    plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;" );
-    plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;");
-    signal = Am * Am';
-    noise = (Am-Amq) * (Am-Amq)'; 
-    snr = 10*log10(signal/noise);
-    Am_err_label = sprintf(";Am_err SNR %4.2f dB;",snr);
-    plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label);
+
+    if (file_in_path(".",sw__name))
+      plot((0:255)*4000/256, Sw_(f,:),";Sw_;");
+    endif
+
+    if (file_in_path(".",modelq_name))
+      Amq = modelq(f,3:(L+2));
+      plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;" );
+      plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;");
+      signal = Am * Am';
+      noise = (Am-Amq) * (Am-Amq)'; 
+      snr = 10*log10(signal/noise);
+      Am_err_label = sprintf(";Am_err SNR %4.2f dB;",snr);
+      plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label);
+    endif
+
     if (file_in_path(".",lsp_name))
       for l=1:10
         plot([lsp(f,l)*4000/pi lsp(f,l)*4000/pi], [60 80], 'r');
       endfor
     endif
+
     hold off;
 
     % interactive menu
index 7df4a8dee960c1195bad3a350642e0808337a651..994cecebd62145f0bcecb40ffb4164192d3e3ea6 100644 (file)
@@ -1,28 +1,21 @@
 % pulse.m
 % David Rowe August 2009
-% experiments with phase for sinusoidal codecs
-%   - lets see how pulse waveforms are perceived at different F0
-%   - experiment suggested by O'Shaughnessy, "Speech Communication", page 145
-%   - in low F0 alternative phase pulses are perceived as 2F0
+% experiments with human pulse perception for sinusoidal codecs
+% lets try some pulses in noise
 
-function pulse(samname, F0, alternate)
-  Wo = 2*pi*F0/8000;
-  P  = 2*pi/Wo
+function pulse(samname, F0, snr)
+
+  N = 16000;
+  s = zeros(1,N);
+  Wo  = 2*pi*F0/8000;
   L  = floor(pi/Wo);
-  N  = 16000;
-  A  = 1000;
+  A  = 10000;
   phi = zeros(1,L);
-  if (alternate == 1) 
-    % shift phases of some harmonics to introduce -ve pulses
-    % note magnitude spectrum unchanged
-    phi(2:2:L) = (2:2:L)*pi*(P)*Wo;
-  endif
-  s = zeros(1,N);
-
   for m=1:L
-    s = s + A*cos(m*Wo*(0:(N-1)) + phi(m));
+    s = s + (A/L)*cos(m*Wo*(1:N) + phi(m));
   endfor
-
+  randn("seed", 0);
+  s = s + A*(10 .^(-snr/20))*randn(1,N);
   plot(s(1:250));
 
   fs=fopen(samname,"wb");
diff --git a/codec2/pitch/hts2.p b/codec2/pitch/hts2.p
deleted file mode 100755 (executable)
index 20e2680..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-  0.0000000e+000\r
-  9.2753623e+001\r
-  5.4237288e+001\r
-  8.5906040e+001\r
-  7.0329670e+001\r
-  5.5652174e+001\r
-  5.4237288e+001\r
-  5.4935622e+001\r
-  5.4700855e+001\r
-  7.5739645e+001\r
-  7.3563218e+001\r
-  1.2307692e+002\r
-  1.1428571e+002\r
-  7.3563218e+001\r
-  7.7108434e+001\r
-  1.8550725e+002\r
-  1.2673267e+002\r
-  1.0847458e+002\r
-  7.8527607e+001\r
-  8.8888889e+001\r
-  8.3116883e+001\r
-  8.1012658e+001\r
-  1.0756303e+002\r
-  1.3061224e+002\r
-  4.8301887e+001\r
-  4.7940075e+001\r
-  4.8120301e+001\r
-  4.9230769e+001\r
-  4.9420849e+001\r
-  4.6886447e+001\r
-  4.2953020e+001\r
-  3.9263804e+001\r
-  3.7869822e+001\r
-  3.5457064e+001\r
-  3.4224599e+001\r
-  3.3333333e+001\r
-  3.2820513e+001\r
-  3.2000000e+001\r
-  3.1295844e+001\r
-  2.9906542e+001\r
-  2.9493088e+001\r
-  2.9090909e+001\r
-  2.8699552e+001\r
-  2.8131868e+001\r
-  2.7826087e+001\r
-  2.7826087e+001\r
-  2.7826087e+001\r
-  2.8193833e+001\r
-  2.7467811e+001\r
-  2.6890756e+001\r
-  5.4468085e+001\r
-  5.4237288e+001\r
-  6.4974619e+001\r
-  1.0756303e+002\r
-  8.8888889e+001\r
-  1.0406504e+002\r
-  4.4599303e+001\r
-  5.4468085e+001\r
-  3.6260623e+001\r
-  3.6260623e+001\r
-  8.1012658e+001\r
-  7.0329670e+001\r
-  1.2929293e+002\r
-  9.9224806e+001\r
-  4.3097643e+001\r
-  4.4137931e+001\r
-  4.5714286e+001\r
-  4.7407407e+001\r
-  4.8301887e+001\r
-  4.9230769e+001\r
-  4.9420849e+001\r
-  5.0996016e+001\r
-  5.1405622e+001\r
-  5.1405622e+001\r
-  5.2244898e+001\r
-  5.2459016e+001\r
-  5.2459016e+001\r
-  5.2244898e+001\r
-  5.3333333e+001\r
-  5.2459016e+001\r
-  5.2244898e+001\r
-  5.1405622e+001\r
-  5.1405622e+001\r
-  5.1200000e+001\r
-  5.0996016e+001\r
-  5.0196078e+001\r
-  4.9230769e+001\r
-  4.9230769e+001\r
-  4.9230769e+001\r
-  4.9420849e+001\r
-  4.9230769e+001\r
-  4.9042146e+001\r
-  9.8461538e+001\r
-  1.0158730e+002\r
-  5.1821862e+001\r
-  9.0140845e+001\r
-  1.0491803e+002\r
-  1.4382022e+002\r
-  5.2459016e+001\r
-  5.2459016e+001\r
-  1.2929293e+002\r
-  1.6410256e+002\r
-  8.0000000e+001\r
-  7.3563218e+001\r
-  1.0158730e+002\r
-  9.9224806e+001\r
-  4.9042146e+001\r
-  4.9042146e+001\r
-  4.9042146e+001\r
-  5.9259259e+001\r
-  1.4382022e+002\r
-  7.2316384e+001\r
-  1.0847458e+002\r
-  1.1228070e+002\r
-  1.6202532e+002\r
-  8.1528662e+001\r
-  7.2727273e+001\r
-  1.8550725e+002\r
-  6.0093897e+001\r
-  1.0847458e+002\r
-  8.9510490e+001\r
-  7.1508380e+001\r
-  4.0125392e+001\r
-  4.0634921e+001\r
-  4.0634921e+001\r
-  4.0251572e+001\r
-  4.0506329e+001\r
-  4.3986254e+001\r
-  4.0506329e+001\r
-  9.8461538e+001\r
-  5.6140351e+001\r
-  6.5641026e+001\r
-  5.4237288e+001\r
-  1.1636364e+002\r
-  3.4316354e+001\r
-  3.4972678e+001\r
-  3.7758112e+001\r
-  4.0634921e+001\r
-  4.0506329e+001\r
-  4.1290323e+001\r
-  4.2524917e+001\r
-  4.3389831e+001\r
-  4.4599303e+001\r
-  4.4912281e+001\r
-  4.6545455e+001\r
-  4.7232472e+001\r
-  4.8301887e+001\r
-  4.9230769e+001\r
-  4.9420849e+001\r
-  5.0393701e+001\r
-  5.1405622e+001\r
-  5.3333333e+001\r
-  5.3112033e+001\r
-  1.1034483e+002\r
-  9.7709924e+001\r
-  1.4382022e+002\r
-  5.0996016e+001\r
-  5.1821862e+001\r
-  5.0996016e+001\r
-  5.2032520e+001\r
-  5.3112033e+001\r
-  5.3556485e+001\r
-  5.4468085e+001\r
-  5.5652174e+001\r
-  5.4700855e+001\r
-  5.4700855e+001\r
-  5.4935622e+001\r
-  5.4700855e+001\r
-  5.4700855e+001\r
-  5.4468085e+001\r
-  5.4468085e+001\r
-  5.4468085e+001\r
-  5.4468085e+001\r
-  5.3333333e+001\r
-  5.1405622e+001\r
-  5.0996016e+001\r
-  5.0000000e+001\r
-  4.8120301e+001\r
-  4.8669202e+001\r
-  4.7058824e+001\r
-  4.6376812e+001\r
-  4.5070423e+001\r
-  4.4912281e+001\r
-  4.4137931e+001\r
-  4.2809365e+001\r
-  4.2666667e+001\r
-  4.2105263e+001\r
-  4.1423948e+001\r
-  4.1290323e+001\r
-  4.1290323e+001\r
-  4.1290323e+001\r
-  4.0634921e+001\r
-  4.0634921e+001\r
-  4.0634921e+001\r
-  4.0634921e+001\r
-  4.0764331e+001\r
-  4.1423948e+001\r
-  4.2953020e+001\r
-  4.5551601e+001\r
-  1.7534247e+002\r
-  4.7232472e+001\r
-  1.3763441e+002\r
-  1.3061224e+002\r
-  4.5551601e+001\r
-  4.3686007e+001\r
-  4.8669202e+001\r
-  9.4117647e+001\r
-  8.1012658e+001\r
-  1.1228070e+002\r
-  1.3617021e+002\r
-  4.3097643e+001\r
-  4.3835616e+001\r
-  4.6376812e+001\r
-  4.6545455e+001\r
-  4.6043165e+001\r
-  4.8301887e+001\r
-  4.9042146e+001\r
-  4.9420849e+001\r
-  5.1200000e+001\r
-  5.1405622e+001\r
-  5.2244898e+001\r
-  1.2929293e+002\r
-  1.2929293e+002\r
-  1.5238095e+002\r
-  1.5238095e+002\r
-  1.3913043e+002\r
-  9.0140845e+001\r
-  1.0940171e+002\r
-  9.0140845e+001\r
-  1.2307692e+002\r
-  8.9510490e+001\r
-  6.9565217e+001\r
-  7.3142857e+001\r
-  1.1034483e+002\r
-  7.8048780e+001\r
-  7.2727273e+001\r
-  1.0078740e+002\r
-  1.0940171e+002\r
-  1.1743119e+002\r
-  8.7074830e+001\r
-  1.8550725e+002\r
-  6.5306122e+001\r
-  1.3617021e+002\r
-  5.2674897e+001\r
-  1.0940171e+002\r
-  1.5238095e+002\r
-  1.4065934e+002\r
-  1.0756303e+002\r
-  1.0406504e+002\r
-  5.0793651e+001\r
-  4.9420849e+001\r
-  4.4444444e+001\r
-  7.0329670e+001\r
-  7.2727273e+001\r
-  7.4418605e+001\r
-  1.1636364e+002\r
-  1.0406504e+002\r
-  1.2307692e+002\r
-  1.2549020e+002\r
-  1.7297297e+002\r
-  4.5878136e+001\r
-  4.9805447e+001\r
-  6.2745098e+001\r
-  9.2086331e+001\r
-  9.1428571e+001\r
-  5.7142857e+001\r
-  4.8484848e+001\r
-  4.1157556e+001\r
-  2.2857143e+001\r
-  3.0046948e+001\r
-  9.4814815e+001\r
-  5.7918552e+001\r
-  9.0140845e+001\r
-  7.4418605e+001\r
-  7.4418605e+001\r
-  5.4700855e+001\r
-  9.5522388e+001\r
-  7.4853801e+001\r
-  9.4117647e+001\r
-  9.5522388e+001\r
-  9.9224806e+001\r
-  8.1012658e+001\r
-  1.1851852e+002\r
-  6.8817204e+001\r
-  8.5906040e+001\r
-  6.7015707e+001\r
-  4.3537415e+001\r
-  6.5306122e+001\r
-  3.1295844e+001\r
-  7.5739645e+001\r
-  6.2135922e+001\r
-  9.9224806e+001\r
-  5.7657658e+001\r
-  5.2244898e+001\r
-  5.8447489e+001\r
-  0.0000000e+000\r
-  0.0000000e+000\r
-  0.0000000e+000\r
-  0.0000000e+000\r
-  0.0000000e+000\r
diff --git a/codec2/pitch/hts2a.p b/codec2/pitch/hts2a.p
new file mode 100644 (file)
index 0000000..20e2680
--- /dev/null
@@ -0,0 +1,300 @@
+  0.0000000e+000\r
+  9.2753623e+001\r
+  5.4237288e+001\r
+  8.5906040e+001\r
+  7.0329670e+001\r
+  5.5652174e+001\r
+  5.4237288e+001\r
+  5.4935622e+001\r
+  5.4700855e+001\r
+  7.5739645e+001\r
+  7.3563218e+001\r
+  1.2307692e+002\r
+  1.1428571e+002\r
+  7.3563218e+001\r
+  7.7108434e+001\r
+  1.8550725e+002\r
+  1.2673267e+002\r
+  1.0847458e+002\r
+  7.8527607e+001\r
+  8.8888889e+001\r
+  8.3116883e+001\r
+  8.1012658e+001\r
+  1.0756303e+002\r
+  1.3061224e+002\r
+  4.8301887e+001\r
+  4.7940075e+001\r
+  4.8120301e+001\r
+  4.9230769e+001\r
+  4.9420849e+001\r
+  4.6886447e+001\r
+  4.2953020e+001\r
+  3.9263804e+001\r
+  3.7869822e+001\r
+  3.5457064e+001\r
+  3.4224599e+001\r
+  3.3333333e+001\r
+  3.2820513e+001\r
+  3.2000000e+001\r
+  3.1295844e+001\r
+  2.9906542e+001\r
+  2.9493088e+001\r
+  2.9090909e+001\r
+  2.8699552e+001\r
+  2.8131868e+001\r
+  2.7826087e+001\r
+  2.7826087e+001\r
+  2.7826087e+001\r
+  2.8193833e+001\r
+  2.7467811e+001\r
+  2.6890756e+001\r
+  5.4468085e+001\r
+  5.4237288e+001\r
+  6.4974619e+001\r
+  1.0756303e+002\r
+  8.8888889e+001\r
+  1.0406504e+002\r
+  4.4599303e+001\r
+  5.4468085e+001\r
+  3.6260623e+001\r
+  3.6260623e+001\r
+  8.1012658e+001\r
+  7.0329670e+001\r
+  1.2929293e+002\r
+  9.9224806e+001\r
+  4.3097643e+001\r
+  4.4137931e+001\r
+  4.5714286e+001\r
+  4.7407407e+001\r
+  4.8301887e+001\r
+  4.9230769e+001\r
+  4.9420849e+001\r
+  5.0996016e+001\r
+  5.1405622e+001\r
+  5.1405622e+001\r
+  5.2244898e+001\r
+  5.2459016e+001\r
+  5.2459016e+001\r
+  5.2244898e+001\r
+  5.3333333e+001\r
+  5.2459016e+001\r
+  5.2244898e+001\r
+  5.1405622e+001\r
+  5.1405622e+001\r
+  5.1200000e+001\r
+  5.0996016e+001\r
+  5.0196078e+001\r
+  4.9230769e+001\r
+  4.9230769e+001\r
+  4.9230769e+001\r
+  4.9420849e+001\r
+  4.9230769e+001\r
+  4.9042146e+001\r
+  9.8461538e+001\r
+  1.0158730e+002\r
+  5.1821862e+001\r
+  9.0140845e+001\r
+  1.0491803e+002\r
+  1.4382022e+002\r
+  5.2459016e+001\r
+  5.2459016e+001\r
+  1.2929293e+002\r
+  1.6410256e+002\r
+  8.0000000e+001\r
+  7.3563218e+001\r
+  1.0158730e+002\r
+  9.9224806e+001\r
+  4.9042146e+001\r
+  4.9042146e+001\r
+  4.9042146e+001\r
+  5.9259259e+001\r
+  1.4382022e+002\r
+  7.2316384e+001\r
+  1.0847458e+002\r
+  1.1228070e+002\r
+  1.6202532e+002\r
+  8.1528662e+001\r
+  7.2727273e+001\r
+  1.8550725e+002\r
+  6.0093897e+001\r
+  1.0847458e+002\r
+  8.9510490e+001\r
+  7.1508380e+001\r
+  4.0125392e+001\r
+  4.0634921e+001\r
+  4.0634921e+001\r
+  4.0251572e+001\r
+  4.0506329e+001\r
+  4.3986254e+001\r
+  4.0506329e+001\r
+  9.8461538e+001\r
+  5.6140351e+001\r
+  6.5641026e+001\r
+  5.4237288e+001\r
+  1.1636364e+002\r
+  3.4316354e+001\r
+  3.4972678e+001\r
+  3.7758112e+001\r
+  4.0634921e+001\r
+  4.0506329e+001\r
+  4.1290323e+001\r
+  4.2524917e+001\r
+  4.3389831e+001\r
+  4.4599303e+001\r
+  4.4912281e+001\r
+  4.6545455e+001\r
+  4.7232472e+001\r
+  4.8301887e+001\r
+  4.9230769e+001\r
+  4.9420849e+001\r
+  5.0393701e+001\r
+  5.1405622e+001\r
+  5.3333333e+001\r
+  5.3112033e+001\r
+  1.1034483e+002\r
+  9.7709924e+001\r
+  1.4382022e+002\r
+  5.0996016e+001\r
+  5.1821862e+001\r
+  5.0996016e+001\r
+  5.2032520e+001\r
+  5.3112033e+001\r
+  5.3556485e+001\r
+  5.4468085e+001\r
+  5.5652174e+001\r
+  5.4700855e+001\r
+  5.4700855e+001\r
+  5.4935622e+001\r
+  5.4700855e+001\r
+  5.4700855e+001\r
+  5.4468085e+001\r
+  5.4468085e+001\r
+  5.4468085e+001\r
+  5.4468085e+001\r
+  5.3333333e+001\r
+  5.1405622e+001\r
+  5.0996016e+001\r
+  5.0000000e+001\r
+  4.8120301e+001\r
+  4.8669202e+001\r
+  4.7058824e+001\r
+  4.6376812e+001\r
+  4.5070423e+001\r
+  4.4912281e+001\r
+  4.4137931e+001\r
+  4.2809365e+001\r
+  4.2666667e+001\r
+  4.2105263e+001\r
+  4.1423948e+001\r
+  4.1290323e+001\r
+  4.1290323e+001\r
+  4.1290323e+001\r
+  4.0634921e+001\r
+  4.0634921e+001\r
+  4.0634921e+001\r
+  4.0634921e+001\r
+  4.0764331e+001\r
+  4.1423948e+001\r
+  4.2953020e+001\r
+  4.5551601e+001\r
+  1.7534247e+002\r
+  4.7232472e+001\r
+  1.3763441e+002\r
+  1.3061224e+002\r
+  4.5551601e+001\r
+  4.3686007e+001\r
+  4.8669202e+001\r
+  9.4117647e+001\r
+  8.1012658e+001\r
+  1.1228070e+002\r
+  1.3617021e+002\r
+  4.3097643e+001\r
+  4.3835616e+001\r
+  4.6376812e+001\r
+  4.6545455e+001\r
+  4.6043165e+001\r
+  4.8301887e+001\r
+  4.9042146e+001\r
+  4.9420849e+001\r
+  5.1200000e+001\r
+  5.1405622e+001\r
+  5.2244898e+001\r
+  1.2929293e+002\r
+  1.2929293e+002\r
+  1.5238095e+002\r
+  1.5238095e+002\r
+  1.3913043e+002\r
+  9.0140845e+001\r
+  1.0940171e+002\r
+  9.0140845e+001\r
+  1.2307692e+002\r
+  8.9510490e+001\r
+  6.9565217e+001\r
+  7.3142857e+001\r
+  1.1034483e+002\r
+  7.8048780e+001\r
+  7.2727273e+001\r
+  1.0078740e+002\r
+  1.0940171e+002\r
+  1.1743119e+002\r
+  8.7074830e+001\r
+  1.8550725e+002\r
+  6.5306122e+001\r
+  1.3617021e+002\r
+  5.2674897e+001\r
+  1.0940171e+002\r
+  1.5238095e+002\r
+  1.4065934e+002\r
+  1.0756303e+002\r
+  1.0406504e+002\r
+  5.0793651e+001\r
+  4.9420849e+001\r
+  4.4444444e+001\r
+  7.0329670e+001\r
+  7.2727273e+001\r
+  7.4418605e+001\r
+  1.1636364e+002\r
+  1.0406504e+002\r
+  1.2307692e+002\r
+  1.2549020e+002\r
+  1.7297297e+002\r
+  4.5878136e+001\r
+  4.9805447e+001\r
+  6.2745098e+001\r
+  9.2086331e+001\r
+  9.1428571e+001\r
+  5.7142857e+001\r
+  4.8484848e+001\r
+  4.1157556e+001\r
+  2.2857143e+001\r
+  3.0046948e+001\r
+  9.4814815e+001\r
+  5.7918552e+001\r
+  9.0140845e+001\r
+  7.4418605e+001\r
+  7.4418605e+001\r
+  5.4700855e+001\r
+  9.5522388e+001\r
+  7.4853801e+001\r
+  9.4117647e+001\r
+  9.5522388e+001\r
+  9.9224806e+001\r
+  8.1012658e+001\r
+  1.1851852e+002\r
+  6.8817204e+001\r
+  8.5906040e+001\r
+  6.7015707e+001\r
+  4.3537415e+001\r
+  6.5306122e+001\r
+  3.1295844e+001\r
+  7.5739645e+001\r
+  6.2135922e+001\r
+  9.9224806e+001\r
+  5.7657658e+001\r
+  5.2244898e+001\r
+  5.8447489e+001\r
+  0.0000000e+000\r
+  0.0000000e+000\r
+  0.0000000e+000\r
+  0.0000000e+000\r
+  0.0000000e+000\r
diff --git a/codec2/script/raw2wav.sh b/codec2/script/raw2wav.sh
new file mode 100755 (executable)
index 0000000..010a1b9
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+# Converts 16 bit signed short 8 kHz raw (headerless) files to wave
+sox -t raw -r 8000 -s -w -c 1 $1 $2
index 6acf8144341fd51a9970df93fe3ddb757ab3cbbf..0de20f0cddfb1e1ea07c9ce5f17d93ac44ccb9c6 100644 (file)
@@ -1,7 +1,7 @@
 CC=gcc
 CFLAGS=-g -Wall -I. -I../src -I../speex -Wall -g -DFLOATING_POINT -DVAR_ARRAYS
 
-SINENC_OBJ  = sinenc.o globals.o initenc.o four1.o refine.o spec.o
+SINENC_OBJ  = sinenc.o globals.o initenc.o four1.o refine.o spec.o dump.o
 SINEDEC_OBJ = sinedec.o globals.o initenc.o initdec.o four1.o synth.o \
               quantise.o lpc.o dump.o refine.o ../speex/lsp.o  \
               ../speex/quant_lsp.o ../speex/bits.o ../speex/lsp_tables_nb.o \
index 55698f409cf0c32248c6e92855dbaac1839904b7..bd65fb1cf0c797d91ccb2b351cca0c43db9e61b7 100644 (file)
 #include <assert.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 
 static int dumpon = 0;
 
-static FILE *fsn;
-static FILE *fsw;
-static FILE *fmodel;
-static FILE *fqmodel;
-static FILE *fpw;
-static FILE *flsp;
-
-void dump_on(char prefix[]) {
-    char s[MAX_STR];
+static FILE *fsn = NULL;
+static FILE *fsw = NULL;
+static FILE *fsw_ = NULL;
+static FILE *fmodel = NULL;
+static FILE *fqmodel = NULL;
+static FILE *fpw = NULL;
+static FILE *flsp = NULL;
+static char  prefix[MAX_STR];
 
+void dump_on(char p[]) {
     dumpon = 1;
-
-    sprintf(s,"%s_sn.txt", prefix);
-    fsn = fopen(s, "wt");
-    assert(fsn != NULL);
-
-    sprintf(s,"%s_sw.txt", prefix);
-    fsw = fopen(s, "wt");
-    assert(fsw != NULL);
-
-    sprintf(s,"%s_model.txt", prefix);
-    fmodel = fopen(s, "wt");
-    assert(fmodel != NULL);
-
-    sprintf(s,"%s_qmodel.txt", prefix);
-    fqmodel = fopen(s, "wt");
-    assert(fqmodel != NULL);
-
-    sprintf(s,"%s_pw.txt", prefix);
-    fpw = fopen(s, "wt");
-    assert(fpw != NULL);
-
-    sprintf(s,"%s_lsp.txt", prefix);
-    flsp = fopen(s, "wt");
-    assert(flsp != NULL);
+    strcpy(prefix, p);
 }
 
 void dump_off(){
-    fclose(fsn);
-    fclose(fsw);
-    fclose(fmodel);
-    fclose(fqmodel);
-    fclose(fpw);
-    fclose(flsp);
+    if (fsn != NULL)
+       fclose(fsn);
+    if (fsw != NULL)
+       fclose(fsw);
+    if (fsw_ != NULL)
+       fclose(fsw_);
+    if (fmodel != NULL)
+       fclose(fmodel);
+    if (fqmodel != NULL)
+       fclose(fqmodel);
+    if (fpw != NULL)
+       fclose(fpw);
+    if (flsp != NULL)
+       fclose(flsp);
 }
 
 void dump_Sn(float Sn[]) {
     int i;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (fsn == NULL) {
+       sprintf(s,"%s_sn.txt", prefix);
+       fsn = fopen(s, "wt");
+       assert(fsn != NULL);
+    }
+
     /* split across two lines to avoid max line length problems */
     /* reconstruct in Octave */
 
@@ -95,33 +88,76 @@ void dump_Sn(float Sn[]) {
 
 void dump_Sw(COMP Sw[]) {
     int i;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (fsw == NULL) {
+       sprintf(s,"%s_sw.txt", prefix);
+       fsw = fopen(s, "wt");
+       assert(fsw != NULL);
+    }
+
     for(i=0; i<FFT_ENC/2; i++)
        fprintf(fsw,"%f\t",
                10.0*log10(Sw[i].real*Sw[i].real + Sw[i].imag*Sw[i].imag));
     fprintf(fsw,"\n");    
 }
 
+void dump_Sw_(COMP Sw_[]) {
+    int i;
+    char s[MAX_STR];
+
+    if (!dumpon) return;
+
+    if (fsw_ == NULL) {
+       sprintf(s,"%s_sw_.txt", prefix);
+       fsw_ = fopen(s, "wt");
+       assert(fsw_ != NULL);
+    }
+
+    for(i=0; i<FFT_ENC/2; i++)
+       fprintf(fsw_,"%f\t",
+               10.0*log10(Sw_[i].real*Sw_[i].real + Sw_[i].imag*Sw_[i].imag));
+    fprintf(fsw_,"\n");    
+}
+
 void dump_model(MODEL *model) {
     int l;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (fmodel == NULL) {
+       sprintf(s,"%s_model.txt", prefix);
+       fmodel = fopen(s, "wt");
+       assert(fmodel != NULL);
+    }
+
     fprintf(fmodel,"%f\t%d\t", model->Wo, model->L);    
     for(l=1; l<=model->L; l++)
        fprintf(fmodel,"%f\t",model->A[l]);
     for(l=model->L+1; l<MAX_AMP; l++)
        fprintf(fmodel,"0.0\t");
+    for(l=1; l<=model->L; l++)
+       fprintf(fmodel,"%f\t",model->v[l]);
+    for(l=model->L+1; l<MAX_AMP; l++)
+       fprintf(fmodel,"0.0\t");
     fprintf(fmodel,"\n");    
 }
 
 void dump_quantised_model(MODEL *model) {
     int l;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (fqmodel == NULL) {
+       sprintf(s,"%s_qmodel.txt", prefix);
+       fqmodel = fopen(s, "wt");
+       assert(fqmodel != NULL);
+    }
+
     fprintf(fqmodel,"%f\t%d\t", model->Wo, model->L);    
     for(l=1; l<=model->L; l++)
        fprintf(fqmodel,"%f\t",model->A[l]);
@@ -132,9 +168,16 @@ void dump_quantised_model(MODEL *model) {
 
 void dump_Pw(COMP Pw[]) {
     int i;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (fpw == NULL) {
+       sprintf(s,"%s_pw.txt", prefix);
+       fpw = fopen(s, "wt");
+       assert(fpw != NULL);
+    }
+
     for(i=0; i<FFT_DEC/2; i++)
        fprintf(fpw,"%f\t",Pw[i].real);
     fprintf(fpw,"\n");    
@@ -142,9 +185,16 @@ void dump_Pw(COMP Pw[]) {
 
 void dump_lsp(float lsp[]) {
     int i;
+    char s[MAX_STR];
 
     if (!dumpon) return;
 
+    if (flsp == NULL) {
+       sprintf(s,"%s_lsp.txt", prefix);
+       flsp = fopen(s, "wt");
+       assert(flsp != NULL);
+    }
+
     for(i=0; i<10; i++)
        fprintf(flsp,"%f\t",lsp[i]);
     fprintf(flsp,"\n");    
index 61300c28ae431586fbe05f702b5ed87bd56b4133..a53a07c4b75cd5ff85d59fd0540d7f8ee9ebb1f1 100644 (file)
@@ -33,6 +33,7 @@ void dump_on(char filename_prefix[]);
 void dump_off();
 void dump_Sn(float Sn[]);
 void dump_Sw(COMP Sw[]);
+void dump_Sw_(COMP Sw_[]);
 void dump_model(MODEL *m);
 void dump_quantised_model(MODEL *m);
 void dump_Pw(COMP Pw[]);
index aaf7daab3c7d8b5cedc138e84e744ada5c06c974..da4ecb97738c6be87b294a5f6ec1ee6cf4151075 100644 (file)
@@ -39,6 +39,7 @@ float sig;            /* energy of current frame */
 /* Globals used in encoder */
 
 float w[AW_ENC];       /* time domain hamming window */
+COMP W[FFT_ENC];       /* DFT of w[] */
 COMP Sw[FFT_ENC];      /* DFT of current frame */
 
 /* Globals used in decoder */
index 78a28ea7480c42672f7c72c94b6cb19273427069..333c6a15455c7d8091fa337249e8164e12913d23 100644 (file)
@@ -44,7 +44,8 @@ void init_encoder()
 float make_window(int Nw)
 {
   float m;
-  int i,j;
+  COMP  temp;
+  int   i,j;
 
   /* Generate Hamming window centered on analysis window */
 
@@ -58,13 +59,37 @@ float make_window(int Nw)
   for(i=AW_ENC/2+Nw/2; i<AW_ENC; i++)
     w[i] = 0.0;
 
-  /* Normalise - this might be useful later on */
+  /* Normalise - make amplitude estimation straight forward */
 
   m = 1.0/sqrt(m*FFT_ENC);
   for(i=0; i<AW_ENC; i++) {
     w[i] *= m;
   }
 
+  /* Generate DFT of analysis window, used for voicing estimation */
+
+  for(i=0; i<FFT_ENC; i++) {
+    W[i].real = 0.0;
+    W[i].imag = 0.0;
+  }
+  for(i=0; i<AW_ENC/2; i++)
+    W[i].real = w[i+AW_ENC/2];
+  for(i=FFT_ENC-AW_ENC/2; i<FFT_ENC; i++)
+    W[i].real = w[i-FFT_ENC+AW_ENC/2];
+
+  four1(&W[-1].imag,FFT_ENC,-1);         /* "Numerical Recipes in C" FFT */
+
+  /* re-arrange so that W is symmetrical about FFT_ENC/2 */
+
+  for(i=0; i<FFT_ENC/2; i++) {
+    temp.real = W[i].real;
+    temp.imag = W[i].imag;
+    W[i].real = W[i+FFT_ENC/2].real;
+    W[i].imag = W[i+FFT_ENC/2].imag;
+    W[i+FFT_ENC/2].real = temp.real;
+    W[i+FFT_ENC/2].imag = temp.imag;
+  }
+
   return(m);
 }
 
index 66795f2ebedfb5839e242aa7dc102dffe72a88b4..be266bd58cc11c590b8570ff73f2c27b579e8eb4 100644 (file)
 */
 
 #include "sine.h"
+#include "dump.h"
+#include <string.h>
+
+/*---------------------------------------------------------------------------*\
+                                                                             
+ switch_present()                                                            
+                                                                             
+ Searches the command line arguments for a "switch".  If the switch is       
+ found, returns the command line argument where it ws found, else returns    
+ NULL.                                                                       
+                                                                             
+\*---------------------------------------------------------------------------*/
+
+int switch_present(sw,argc,argv)
+register char sw[];     /* switch in string form */
+register int argc;      /* number of command line arguments */
+register char *argv[];  /* array of command line arguments in string form */
+{
+  register int i;       /* loop variable */
+
+  for(i=1; i<argc; i++)
+    if (!strcmp(sw,argv[i]))
+      return(i);
+
+  return 0;
+}
 
 /*---------------------------------------------------------------------------*\
                                                                             
-                               MAIN                                          
+                                   MAIN                                          
                                                                              
 \*---------------------------------------------------------------------------*/
 
@@ -44,7 +70,10 @@ int main(int argc, char *argv[])
   float pitch;         /* current pitch estimate from external pitch file */
   int i;               /* loop variable */
   FILE *fref;          /* optional output file with refined pitch estimate */
-  
+  int   arg;
+  int   dump;
+  int   frames;
+
   if (argc < 5) {
     printf("usage: sinenc InputFile ModelFile Frames PitchFile\n");
     exit(1);
@@ -69,8 +98,12 @@ int main(int argc, char *argv[])
     exit(1);
   }
 
-  if (argc > 5) {
-    if ((fref = fopen(argv[5],"wt")) == NULL) {
+  dump = switch_present("--dump",argc,argv);
+  if (dump) 
+      dump_on(argv[dump+1]);
+
+  if ((arg == switch_present("--ref",argc,argv))) {
+    if ((fref = fopen(argv[arg+1],"wt")) == NULL) {
       printf("Error opening output pitch refinement file: %s\n",argv[5]);
       exit(1);
     }
@@ -84,7 +117,8 @@ int main(int argc, char *argv[])
 
   /* Main loop ------------------------------------------------------------*/
 
-  while(fread(buf,sizeof(short),N,fin) == N && frames != length) {
+  frames = 0;
+  while((fread(buf,sizeof(short),N,fin) == N) && (frames != length)) {
     frames++;
 
     /* Update input speech buffers */
@@ -110,9 +144,10 @@ int main(int argc, char *argv[])
 
     /* estimate and model parameters */
 
-    dft_speech();
+    dft_speech(); 
     two_stage_pitch_refinement();
     estimate_amplitudes();
+    dump_Sn(Sn); dump_Sw(Sw); dump_Sw_(Sw_); dump_model(&model);
 
     /* save model parameters */
 
@@ -128,6 +163,9 @@ int main(int argc, char *argv[])
   fclose(fin);
   fclose(fmodel);
 
+  if (dump)
+      dump_off();
+
   return 0;
 }
 
index 247d5123b778de117cc5d21eeb7a04bca6a60635..fbad779ca2fee995923b907f6ed30a7eec7ee7bd 100644 (file)
@@ -52,8 +52,15 @@ void estimate_amplitudes()
   int b;               /* DFT bin of centre of current harmonic */
   float den;           /* denominator of amplitude expression */
   float r;             /* number of rads/bin */
+  float E;
+  int   offset;
+  COMP  Am;
 
   r = TWO_PI/FFT_ENC;
+  for(i=0; i<FFT_ENC; i++) {
+      Sw_[i].real = 1.0;
+      Sw_[i].imag = 0.0;
+  }
 
   for(m=1; m<=model.L; m++) {
     den = 0.0;
@@ -64,8 +71,12 @@ void estimate_amplitudes()
     /* Estimate ampltude of harmonic */
 
     den = 0.0;
+    Am.real = Am.imag = 0.0;
     for(i=am; i<bm; i++) {
       den += Sw[i].real*Sw[i].real + Sw[i].imag*Sw[i].imag;
+      offset = i + FFT_ENC/2 - floor(m*model.Wo/r + 0.5);
+      Am.real += Sw[i].real*W[offset].real;
+      Am.imag += Sw[i].imag*W[offset].real;
     }
 
     model.A[m] = sqrt(den);
@@ -73,6 +84,17 @@ void estimate_amplitudes()
     /* Estimate phase of harmonic */
 
     model.phi[m] = atan2(Sw[b].imag,Sw[b].real);
+
+    /* construct all voiced model spectrum and estimate voicing */
+
+    E = 0.0;
+    for(i=am; i<bm; i++) {
+      offset = FFT_ENC/2 + i - floor(m*model.Wo/r + 0.5);
+      Sw_[i].real = Am.real*W[offset].real;
+      Sw_[i].imag = Am.imag*W[offset].real;
+      E = pow(Sw[i].real - Sw_[i].real, 2.0) + pow(Sw[i].imag - Sw_[i].imag, 2.0);
+    }
+    model.v[m] = E/den;
   }
 }
 
index 3522a90798b871bad9ba056bcd9287a7ca54f52c..de7df7b8ce38920b6d2f31be59fe5052e04ef721 100644 (file)
@@ -35,7 +35,6 @@ MODEL *model;         /* ptr to model parameters for this frame */
 float Sn_[];           /* time domain synthesised signal */
 {
   int i,l,j,b;         /* loop variables */
-  COMP Nw[FFT_DEC];    /* DFT of noise signal */
   COMP Sw_[FFT_DEC];   /* DFT of synthesised signal */
 
   /* Update memories */