a
    {kÙ`[  ã                   @   sž   d Z ddlZddlmZ ddlmZ dd„ Zddd„Zdd	d
„Z	e
dkršddlmZ edddƒZeeƒ\ZZZddlmZmZ eeee e¡d ƒ eƒ  dS )z
Ambiguity functions.
é    N)Úhilbert)Únextpow2c                 C   s   t  t  | ¡¡\}|S )N)ÚnpZnonzeroÚravel)ZcondtÚres© r   úf/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/tftb/processing/ambiguity.pyÚ_find   s    r	   c           )   	   C   sx  d| j v r|  ¡ } n| jdkr&tdƒ‚tt | ¡ƒ}| j d }tt |d ¡ƒ}t 	|¡| }d}|d }	|	| }
|d u s„|d u r>tj
 |¡}t |d |… ¡d }t |¡}t dd|d ¡}|d |… }t||d kƒ ¡ }t||d kƒ ¡ }|d u rtdd	t || d	 ¡ gƒ}|d u r>d	t || d	 ¡ }|| }||| d  }t ||
 dd|   t d|d  d|d   ¡ d ¡}||d  }|d u r¸tdt|ƒ ƒ}t 	d|d ¡}|| d
|d   }|t |d t |¡ ¡ }dt | dd¡| dd¡¡ tj }t |¡}t | dd¡|¡}t ||df¡}|| }|}tj|t ||f¡f j}tj|t ||f¡f j}t 	d| ¡}t |d t |¡ ¡}tj
 tj
 |d d …df | ¡¡}t ||df¡j}tjd| |ftd}t |ƒD ]6} tj
 tj
 |d d …| f | ¡¡|d d …| f< qt 	dd| d ¡}t !t "|| ¡t "|| ¡|¡}!t |!¡}"|t #|¡ }#tj
j|#|dd}$t||d  d ƒ}%tj$|$|%|d …d d …f |$d |%…d d …f f }$t |¡}&tj
 
t|&ƒ¡}'tdt ||d  ¡ ƒ}tdt ||d  ¡ ƒ}|'|d |… }(|$tj% &|(¡d |$|%d |d f  | 9 }$|$||"fS )Né   z+The input signal should be one dimensional.r   g       @é   g      à?g      Y@g{®Gáz„?gš™™™™™©?g      ð?y       €       Àéÿÿÿÿ©Zdtype©Zaxis)'Úshaper   ÚndimÚ
ValueErrorr   r   ÚrealÚintÚroundÚarangeÚfftZfftshiftÚabsZamaxZlinspacer	   ÚminÚmaxZfixÚceilÚlogr   ÚexpÚdotZreshapeÚpiZtileZc_ÚzerosÚTZifftÚcomplexÚrangeZlogspaceÚlog10ÚconjZr_ZlinalgZnorm))ÚsignalZfminZfmaxÚNZs_anaZnxÚmÚtZtminZtmaxr    ZSTFÚspZmaxspÚfZindminZindmaxÚBÚRZnqZnminÚkÚqZgeo_fZtfmatxÚSZSbÚtauÚpZcoefZmellinSZmellinSbÚiZscaleÚthetaZ	mellinSSbÚwafZno2ÚsÚSPZsp_anar   r   r   Ú	wide_band   sz    






<
&
$4"
2
,r7   c                 C   sŒ  | j d }|du r`|d dkr8| d d |d  }}n|d  d |d d  }}t ||¡}|j d }|du r|| j d }tj||ftd}t|ƒD ]T}t|| ƒ}	t t|	ƒ|t|	ƒ ¡ t¡}
| |
|	  t 	| |
|	  ¡ ||
|f< q–tj
j
|dd}t ||d  d |¡}t ||d  d ¡}||d   d }||d  d d }tj||d td| }|t ||f¡dd…f }|||fS )a/  Narrow band ambiguity function.

    :param signal: Signal to be analyzed.
    :param lag: vector of lag values.
    :param n_fbins: number of frequency bins
    :type signal: array-like
    :type lag: array-like
    :type n_fbins: int
    :return: Doppler lag representation
    :rtype: array-like
    r   Nr   r
   r   r   )r   r   r   r   r!   r"   r   r   Zastyper$   r   ÚfloatZhstack)r%   ZlagZn_fbinsÚnZ	tau_startZtau_endZtaucolZnafZicolZtauir(   Z_ix1Z_ix2Z_xi1Z_xi2Úxir   r   r   Únarrow_bandd   s,    


(r;   Ú__main__)Úaltesé€   gš™™™™™¹?gÍÌÌÌÌÌÜ?)ÚcontourÚshowr   )NNN)NN)Ú__doc__Únumpyr   Zscipy.signalr   Z
tftb.utilsr   r	   r7   r;   Ú__name__Ztftb.generators.miscr=   Úsigr4   r0   r3   Zmatplotlib.pyplotr?   r@   r   r   r   r   r   Ú<module>	   s   
M
*