dan@0
|
1 function [A_sys,b_sys,sig_fft] = ddm_der2_lin_sys_fft(Q, R, win, win_der, mf_ders, sig, N, N_fft, fs)
|
dan@0
|
2
|
dan@0
|
3 assert(size(mf_ders,1) == N );
|
dan@0
|
4 assert(size(mf_ders, 2) == R);
|
dan@0
|
5 assert(size(win,1) == N );
|
dan@0
|
6 assert(size(win,2) == 1 );
|
dan@0
|
7 assert(size(win_der,1) == N );
|
dan@0
|
8 assert(size(win_der,2) == 1 );
|
dan@0
|
9 assert(size(sig,1) == N );
|
dan@0
|
10 assert(size(sig,2) == 1 );
|
dan@0
|
11 assert(N <= N_fft);
|
dan@0
|
12
|
dan@0
|
13 win_mat = repmat(win, 1, R);
|
dan@0
|
14 frqs_fft = [0:N_fft-1]'*fs*2*pi/N_fft;
|
dan@0
|
15 [str_idx end_idx] = zpzh_idxs(N);
|
dan@0
|
16 sig_mat = repmat(sig, 1, R);
|
dan@0
|
17 t = disc_time_axis(N)/fs;
|
dan@0
|
18 fft_sig_win_bffr = win .* sig * 2.* t';
|
dan@0
|
19 fft_sig_win = fft([fft_sig_win_bffr(str_idx,:);zeros(N_fft-N,1);fft_sig_win_bffr(end_idx,:)],N_fft,1);
|
dan@0
|
20 fft_sig_mat_bffr = win_mat .* sig_mat .* mf_ders; % S_t^2w, S_t^3w
|
dan@0
|
21 fft_sig_win_der_bffr = win_der .* sig .* mf_ders(:,1); % S_t^2w'
|
dan@0
|
22 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
|
23 A = fft([fft_sig_mat_bffr(str_idx,:);zeros(N_fft-N,R);fft_sig_mat_bffr(end_idx,:)], N_fft, 1); %zero padded sheezl
|
dan@0
|
24 %b = -(-1j*fft_sig_win_der - 1j* fft_sig_win - frqs_fft.* A(:,1));
|
dan@0
|
25 b = -(-fft_sig_win_der - 2 * fft_sig_win + 1j*frqs_fft.* A(:,1));
|
dan@0
|
26 % create the actual matrixes
|
dan@0
|
27 A_sys = zeros(Q,R,N_fft-Q+1);
|
dan@0
|
28 b_sys = zeros(Q,1,N_fft-Q+1);
|
dan@0
|
29 for k=1:Q
|
dan@0
|
30 A_sys(k,:,:) = -1j*shiftdim(A(k:N_fft-Q+k,:).',-1);
|
dan@0
|
31 b_sys(k,:,:) = shiftdim(b(k:N_fft-Q+k).' ,-1);
|
dan@0
|
32 end
|
dan@0
|
33 sig_fft = A(:,1);
|
dan@0
|
34 end
|