dan@0
|
1 function [A b A_sys,b_sys] = ddm_lin_sys_fft_zp_fact(Q, R, win, win_der, mf_ders, sig, N, zp_fct, fs,all_zp_bins)
|
dan@0
|
2
|
dan@0
|
3 assert(R == size(mf_ders, 2) );
|
dan@0
|
4 N_fft = N*zp_fct;
|
dan@0
|
5 win_mat = repmat(win, 1, R);
|
dan@0
|
6 frqs_fft = [0:N_fft-1]'*fs*2*pi/N_fft;
|
dan@0
|
7 [str_idx end_idx] = zpzh_idxs(N);
|
dan@0
|
8 sig_mat = repmat(sig, 1, R);
|
dan@0
|
9 fft_sig_mat_bffr = win_mat .* sig_mat .* mf_ders;
|
dan@0
|
10 fft_sig_win_der_bffr = win_der .* sig;
|
dan@0
|
11 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);
|
dan@0
|
12 A = fft([fft_sig_mat_bffr(str_idx,:);zeros(N_fft-N,R);fft_sig_mat_bffr(end_idx,:)], N_fft, 1); %zero padded sheeza
|
dan@0
|
13 b = -(fft_sig_win_der - 1j*frqs_fft.* A(:,1));
|
dan@0
|
14 % create the actual matrixes
|
dan@0
|
15 A_sys = zeros(Q,Q,N_fft-Q+1);
|
dan@0
|
16 b_sys = zeros(Q,1,N_fft-Q+1);
|
dan@0
|
17 stp = zp_fct;
|
dan@0
|
18 if ~exists('all_cp_bins','var') || all_cp_bins == 1
|
dan@0
|
19 stp = 1;
|
dan@0
|
20 end
|
dan@0
|
21 for k=1:Q
|
dan@0
|
22 A_sys(k,:,:) = shiftdim(A(k:stp:N_fft-Q+k,:).',-1);
|
dan@0
|
23 b_sys(k,:,:) = shiftdim(b(k:stp:N_fft-Q+k).',-1);
|
dan@0
|
24 end
|
dan@0
|
25 end
|