Преглед на файлове

add option to create cardioid polar plot instead of Z polar plot

Fernando Pablo Lopez-Lezcano преди 10 години
родител
ревизия
0d12beaba4
променени са 4 файла, в които са добавени 22 реда и са изтрити 6 реда
  1. 4 2
      sphear_a2b_fir_all.m
  2. 1 0
      sphear_bf_plot.m
  3. 9 3
      sphear_bf_power.m
  4. 8 1
      sphear_common.m

+ 4 - 2
sphear_a2b_fir_all.m

@@ -33,6 +33,8 @@
 
 function [B] = sphear_a2b_fir_all(fmin, fmax, Noct, Nfft, Fs, plt)
 
+  plotz = 0;
+  
   %% calculate number of frequency bands spaced Noct
   n = floor(log(fmax/fmin)/log(2^(1/Noct)));
   %% adjust width of band so they fit exactly in frequency range
@@ -46,11 +48,11 @@ function [B] = sphear_a2b_fir_all(fmin, fmax, Noct, Nfft, Fs, plt)
   fe = fmin * 2.^((0:n)/N)';
 
   %% normalize amplitude with respect to W between 600 and 1200 Hz
-  ref = sphear_bf_power(600, 1200, Nfft, Fs);
+  ref = sphear_bf_power(600, 1200, Nfft, Fs, 1);
   norm = mean(ref(:,1));
 
   for i = (1:size(fc))
-    B(:,:,i) = sphear_bf_power(fe(i), fe(i + 1), Nfft, Fs) / norm;
+    B(:,:,i) = sphear_bf_power(fe(i), fe(i + 1), Nfft, Fs, plotz) / norm;
     if (plt == 1)
       sphear_bf_plot(B(:,:,i), fe(i), fe(i + 1), 1.5);
     end

+ 1 - 0
sphear_bf_plot.m

@@ -85,6 +85,7 @@ function [BF] = sphear_bf_plot(BF, fmin, fmax, rmax)
     plot(xr, yr, ropts);
     [x, y] = pol2cart(theta', abs(BF(:,b)));
     plot(x, y, dopts, 'linewidth', 1.5, 'markersize', 6);
+    
   end
   print(f, '-deps','-tight',copt,["figures/sphear_polar_multi_" sprintf("%05d", fmin) "_" sprintf("%05d", fmax) cext ".eps"]);
 end

+ 9 - 3
sphear_bf_power.m

@@ -17,11 +17,9 @@
 %% Copyright Fernando Lopez-Lezcano 2016
 %% 
 
-function [B] = sphear_bf_power(fmin, fmax, N, Fs)
+function [B] = sphear_bf_power(fmin, fmax, N, Fs, plotz)
   pkg load signal;
 
-  %% R = zeros(16, 4);
-
   %% indexes in array for frequency bins
   imin = round((N/2) * fmin / (Fs/2));
   imax = round((N/2) * fmax / (Fs/2));
@@ -31,8 +29,16 @@ function [B] = sphear_bf_power(fmin, fmax, N, Fs)
     %% all b format components, 4 channel soundfile
     bsignal = wavread(["../cal/2016.04.20/export/b-format-" sprintf("%02.0f", m) ".wav"]);
     bfft = fft(bsignal, N);
+    if (plotz == 0)
+      %% calculate a forward facing cardiod
+      cfft = fft(bsignal(:,1) + 1.0 * bsignal(:,2), N);
+    end
     %% return total power of signal in frequency range
     B(m, :) = sqrt(sum(bfft(imin:imax,:).*conj(bfft(imin:imax,:)))/size(bfft(imin:imax,:),1));
+    %% make a cardiod if we don't want Z
+    if (plotz == 0)
+      B(m, 4) = sqrt(sum(cfft(imin:imax).*conj(cfft(imin:imax)))/size(cfft(imin:imax),1)) / 2.0;
+    end
   end
   
 end

+ 8 - 1
sphear_common.m

@@ -52,8 +52,15 @@ end
 %% signal: vector with time domain signal
 
 function [i, v] = findmaxpeak(signal);
-  [peaks, locs] = findpeaks(signal, "DoubleSided");
+  [peaks, locs] = findpeaks(signal, "DoubleSided", "MinPeakDistance", 8);
   [~, index] = max(peaks);
   i = locs(index);
   v = peaks(index);
 end
+
+function [i, v] = findfirstpeak(signal);
+  [peaks, locs] = findpeaks(signal, "DoubleSided", "MinPeakHeight", 0.01, "MinPeakDistance", 8);
+  [~, index] = max(peaks);
+  i = locs(1);
+  v = peaks(1);
+end