| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- %% -*- mode: octave -*-
- %%
- %% *SpHEAR Project
- %%
- %% sphear_bf_plot_polar_response: plot polar response of B format components
- %%
- %% usage:
- %% sphear_bf_plot_polar_response(B, frefmin, frefmax, fmin, fmax, Noct, Nfft, Fs, cardioid = 0)
- %%
- %% B: B format signal
- %% frefmin, frefmax: reference frequencies for power reference
- %% fmin, fmax: lower and upper frequency limits
- %% Noct: width of frequency ranges in fractions of an octave, this
- %% will be changed slightly so that the frequency range is
- %% covered by equally spaced frequency bands
- %% Nfft: FFT size
- %% Fs: sampling rate
- %%
- %% optional:
- %%
- %% cardioid: 1 -> replace Z component by a virtual cardioid pointing forward
- %%
- %% Copyright 2016-2017, Fernando Lopez-Lezcano, All Rights Reserved
- %% nando@ccrma.stanford.edu
- %%
- %% This program is free software: you can redistribute it and/or modify
- %% it under the terms of the GNU General Public License as published by
- %% the Free Software Foundation, either version 3 of the License, or
- %% (at your option) any later version.
- %%
- %% This program is distributed in the hope that it will be useful,
- %% but WITHOUT ANY WARRANTY; without even the implied warranty of
- %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- %% GNU General Public License for more details.
- %%
- %% You should have received a copy of the GNU General Public License
- %% along with this program. If not, see <http://www.gnu.org/licenses/>.
- function sphear_bf_plot_polar_response(B, frefmin, frefmax, fmin, fmax, Noct, Nfft, Fs, cardioid = 0)
- %% color plot
- copt = '-color';
- cext = "_color";
- 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
- N = log(2)/(log(fmax/fmin)/n);
- printf("%d frequency bands, %f bands per octave\n", n, N);
- %% first center frequency
- fcmin = fmin * 2^(1/(N * 2));
- %% all center and edge frequencies
- fc = fcmin * 2.^((0:n - 1)/N)';
- fe = fmin * 2.^((0:n)/N)';
- %% normalize amplitude with respect to W between 600 and 1200 Hz
- ref = sphear_signal_power(B, Fs, frefmin, frefmax, Nfft);
- norm = mean(ref(:,1));
-
- f = figure;
- idx = 1;
- for i = (1:size(fc))
- printf("fc = %d\n", fc(i));
- BP = sphear_signal_power(B, Fs, fe(i), fe(i + 1), Nfft, cardioid) / norm;
- sphear_bf_plot(BP, fe(i), fe(i + 1), 1.25, cardioid);
- idx = idx + 1;
- end
- %% print(f, '-deps','-tight',copt,["figures/sphear_cardioid_polar.eps"]);
- end
|