diff ddm_lin_sys_fft_frq_hop.m @ 0:a4a7e3405062

Import DDM code by Sašo Muševič
author Dan Stowell <dan.stowell@elec.qmul.ac.uk>
date Thu, 09 May 2013 20:04:15 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ddm_lin_sys_fft_frq_hop.m	Thu May 09 20:04:15 2013 +0100
@@ -0,0 +1,35 @@
+function [A_sys,b_sys] = ddm_lin_sys_fft_frq_hop(R, Q, frq_hop, win, win_der, mf_ders, sig, N, N_fft, fs)
+  
+  assert(size(mf_ders,1) == N );
+  assert(size(mf_ders, 2) == Q);
+  assert(size(win,1) == N );
+  assert(size(win,2) == 1 );
+  assert(size(win_der,1) == N );
+  assert(size(win_der,2) == 1 );
+  assert(size(sig,1) == N );
+  assert(size(sig,2) == 1 );
+  assert(N <= N_fft);
+  
+  win_mat  = repmat(win, 1, Q);
+  frqs_fft = [0:N_fft-1]'*fs*2*pi/N_fft;
+  [str_idx end_idx] = zpzh_idxs(N);
+  sig_mat  = repmat(sig, 1, Q);
+  fft_sig_mat_bffr     = win_mat .* sig_mat .* mf_ders;
+  fft_sig_win_der_bffr = win_der .* sig;
+  fft_sig_win_der = fft([fft_sig_win_der_bffr(str_idx,:);zeros(N_fft-N,1);fft_sig_win_der_bffr(end_idx,:)],N_fft,1);
+  A =   fft([fft_sig_mat_bffr(str_idx,:);zeros(N_fft-N,Q);fft_sig_mat_bffr(end_idx,:)], N_fft, 1); %zero padded sheeza
+  b = -(fft_sig_win_der - 1j*frqs_fft.* A(:,1));
+% create the actual matrixes
+
+  frq_bins = [1:frq_hop:N_fft-R+1];
+  frq_lims = [frq_bins;frq_bins+R];
+  nr_frqs = length(frq_bins);
+  A_sys = zeros(R,Q,nr_frqs);
+  b_sys = zeros(R,1,nr_frqs);
+  
+  for k=1:frq_hop:R
+    A_sys(k,:,:) = shiftdim(A(k:N_fft-R+k,:).',-1);
+    b_sys(k,:,:) = shiftdim(b(k:N_fft-R+k).',-1);
+  end
+  
+end