Mercurial > hg > ddm
view ddm_lin_sys_fft_frq_hop.m @ 2:e2b116f3b69b
fixed reallocate and pinv_2_fast to work on Octave
added short example very quickly, might not be working properly
author | smusevic |
---|---|
date | Thu, 25 Jul 2013 13:07:07 +0100 |
parents | a4a7e3405062 |
children |
line wrap: on
line source
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