The BLK_CON function computes a “fast convolution” of a digital signal and an impulse-response sequence. It returns the filtered signal.

This routine is written in the IDL language. Its source code can be found in the file in the lib subdirectory of the IDL distribution.


The following lines create the plot shown at the top of this topic:

; Create a filter of length P = 32
filter = REPLICATE(1.0 ,32) ;Set all points to 1.0
filter(2*INDGEN(16)) = 0.5 ;Set even points to 0.5
; Create a sampled signal with random noise
signal = SIN((FINDGEN(1000)/35.0)^2.5)
noise = (RANDOMU(SEED,1000)-.5)/2.
signal = signal + noise
; Convolve the filter and signal using block convolution
result = BLK_CON(filter, signal)
plot1 = PLOT(signal, TITLE='Signal + Noise', $
  DIMENSIONS=[960,480], LAYOUT=[2,1,1])
plot2 = PLOT(result, TITLE='Convolved Filter and Signal', $
  LAYOUT=[2,1,2], /CURRENT)


Result = BLK_CON( Filter, Signal [, B_LENGTH=scalar] [, /DOUBLE] )

Return Value

This function returns a vector with the same length as Signal. If either of the input arguments are double-precision or the DOUBLE keyword is set, the result is double-precision, otherwise the result is single-precision.



A P-element floating-point vector containing the impulse-response sequence of the digital filter.


An n-element floating-point vector containing the discrete signal samples.



A scalar specifying the block length of the subdivided signal segments. If this parameter is not specified, a near-optimal value is chosen by the algorithm based upon the length P of the impulse-response sequence. If P is a value less than 11 or greater than 377, then B_LENGTH must be specified.

B_LENGTH must be greater than the filter length, P, and less than the number of signal samples.


Set this keyword to force the computation to be done using double-precision arithmetic.

Version History

Pre 4.0


See Also