sinc_convolution_kernel

Graph.sinc_convolution_kernel(cutoff_frequency)

Create a convolution kernel representing the sinc function.

Use this kernel to eliminate frequencies above a certain cutoff.

Parameters

cutoff_frequency (float or Tensor) – Upper limit \(\omega_c\) of the range of frequencies that you want to preserve. The filter eliminates components of the signal that have higher frequencies.

Returns

A node representing the sinc function to use in a convolution.

Return type

ConvolutionKernel

See also

convolve_pwc()

Create an Stf by convolving a Pwc with a kernel.

gaussian_convolution_kernel()

Create a convolution kernel representing a normalized Gaussian.

utils.filter_and_resample_pwc()

Filter a Pwc with a sinc filter and resample it.

Notes

The range of frequencies that this kernel lets pass is \([-\omega_c, \omega_c]\). After a Fourier transform to convert from frequency domain to time domain, this becomes:

\[\frac{1}{2\pi} \int_{-\omega_c}^{\omega_c} \mathrm{d}\omega e^{i \omega t} = \frac{\sin(\omega_c t)}{\pi t}.\]

The function on the right side of the equation is the sinc function. Its integral is the sine integral function (Si).

For more information on Stf nodes see the Working with time-dependent functions in Boulder Opal topic.

Examples

Filter a signal by convolving it with a sinc kernel.

>>> sinc_kernel = graph.sinc_convolution_kernel(cutoff_frequency=300e6)
>>> sinc_kernel
<ConvolutionKernel: operation_name="sinc_convolution_kernel">
>>> pwc_signal
<Pwc: name="pwc_signal_#1", operation_name="pwc_signal", value_shape=(), batch_shape=()>
>>> filtered_signal = graph.convolve_pwc(pwc=pwc_signal, kernel=sinc_kernel)
>>> filtered_signal
<Stf: operation_name="convolve_pwc", value_shape=(), batch_shape=()>

Refer to the How to create leakage-robust single-qubit gates user guide to find the example in context.