I'm trying to model a non-linear system using non-linear convolution with Novak's (2010) synchronized exponential sine weep (SESS) that models them with a Generalized Hammerstein (Volterra diagonal).
I get pretty clear kernels in terms of SNR but clearly phase-distorted. It's a common problem in real estimation.
I can theoretically correct them with a time compacting inverse Kirkeby filter (Farina, 2007).
[EDITED AFTER FIRST ANSWER] I use Novak's himself code from http://ant-novak.com/Swept_Sine_Simulation.php
Changes: Doubled both number of kernels and sampling frequency and raised a lot SESS duration for better kernels separation.
fs = 192000; % sampling frequency f1 = 10; % start frequency f2 = 12000; % final frequency T_ = 50; % approximative time duration N = 8; % order of nonlinearities L = round(f1/log(f2/f1)*T_)/f1; T = L*log(f2/f1); % this definitive sweep duration in theory makes Novak's SESS more robust to phase issues (synchronized) t = (0:ceil(fs*T)-1)./fs; x = sin(2*pi*f1*L*(exp(t/L)-1)); % sweep
Novak uses an elegant frequency domain definition alternative of the regular inverse sweep with amplitude correction. I've tested both with similar results, although Novak's frequency method gives better SNR.
The other change is that I model a "real" system, well, only a guitar amplifier VST plugin. So I use the plugin's output to the SESS for the deconvolution stage.
I'm not 100% sure, but the kernels look extremely "right-sided" like in Farina's 2007 paper. The frequency magnitude of the kernels is coherent with a high gain guitar amplifier VST (even harmonics stronger). The kernels phase is a mess, triangle-saw like. When I test the model with a dry guitar sound as input the output barely improves a regular (first kernel) equalization matching.
Both in the SESS (plugin input/output) and simulation (dry guitar signal) stages I apply a steep bandpass in the range 100hz-10Khz. The plugin is configured to do x2 oversampling (384Khz) to avoid aliasing artifacts.