diff --git a/matlab/tfgm/tf_tools/compute_ambiguity_function.m b/matlab/tfgm/tf_tools/compute_ambiguity_function.m new file mode 100644 index 0000000000000000000000000000000000000000..313667488ae6c749e57a2a2a7759b1bd3932c5f6 --- /dev/null +++ b/matlab/tfgm/tf_tools/compute_ambiguity_function.m @@ -0,0 +1,27 @@ +function w = compute_ambiguity_function(w, dgt ,apply_fftshift) +%% x = compute_ambiguity_function(x, dgt ,fftshift_) +% Compute the ambiguity function of the window +% +% Inputs: +% - w (nd array): vector +% - dgt (handle): DGT operator. see utils/get_stft_operators.m +% -apply_fftshift: Boolean If true, shift the window in time before +% computing its DGT. +% +%Author: Marina KREME +%% + +switch apply_fftshift + + case 'True' + w = dgt(fftshift(w)); + + case 'False' + w = dgt(w); + otherwise + fprintf('Incorrect value fftshift_\n') + +end + + + diff --git a/matlab/tfgm/tf_tools/generate_rectangular_mask.m b/matlab/tfgm/tf_tools/generate_rectangular_mask.m new file mode 100644 index 0000000000000000000000000000000000000000..21555acacf77755cd4242dfcaced2093c8654554 --- /dev/null +++ b/matlab/tfgm/tf_tools/generate_rectangular_mask.m @@ -0,0 +1,32 @@ +function mask = generate_rectangular_mask(nbins, hop, sig_len, t_lim, f_lim) +%% GENERATE_RECTANGULAR_MASK +% Generate a rectangular time-frequency mask +% mask = generate_rectangular_mask(nbins, hop, sig_len, t_lim, f_lim) +% Inputs: +% - nbins: numbers of frequency bins (int) +% - hop : hop size (int) +% - sig_len: signal length (int) +% - t_lim : time boundaries of the mask +% - f_lim : frequency boundaries of the mask +% +% Outputs: +% - mask : the boolean 2D array containing the time-frequency mask (True values) +% +% Author : A. Marina KREME +%% + + +M = nbins/2 +1; +N = sig_len/hop; + +if size(f_lim,2)~=2 || size(t_lim,2)~=2 + error("Incorrect value. f_lim or t_lim must be an interval") +end + +mask = zeros(M,N); +f_lim = round(f_lim*size(mask,1)); +t_lim =round(t_lim*size(mask,2)); + +mask(f_lim(1):f_lim(2),t_lim(1):t_lim(2))=1; + +end diff --git a/matlab/tfgm/tf_tools/plot_ambiguity_function.m b/matlab/tfgm/tf_tools/plot_ambiguity_function.m new file mode 100644 index 0000000000000000000000000000000000000000..1442a015fa0246ca993d839115660bc1e25bf457 --- /dev/null +++ b/matlab/tfgm/tf_tools/plot_ambiguity_function.m @@ -0,0 +1,31 @@ +function plot_ambiguity_function(x, dgt , dgt_params, signal_params,..., + dynrange, apply_fftshift) + +%% plot_ambiguity_function(x, dgt , dgt_params, signal_params, dynrange) +% +% This function compute and plot ambiguity function for a given vector +% +% Inputs: +% - x: signal +% -dgt: Gabor transform operator +% - dgt_params: Signals parameters(sig_len, fs) +% - signal_params: Discrete Gabor Transform parameters(hop, nbins,win, ect..) +% - dynrange : dynamic range (optional) +% +% Author: Marina KREME +%%s + +apply_fftshift = [upper(apply_fftshift(1)),apply_fftshift(2:end)]; +if nargin==4 + dynrange = 100; + apply_fftshift='True'; +end +if nargin==5 + apply_fftshift='True'; +end + +x = compute_ambiguity_function(x, dgt ,apply_fftshift); +plotdgtreal(x, dgt_params.hop, dgt_params.nbins, signal_params.fs,'dynrange', dynrange) + + +end