Error 20023 or Error 20020 from Filter VIs

Updated Apr 3, 2023

Reported In

Software

  • LabVIEW

Driver

  • NI-DAQmx

Issue Details

A filter VI in my program is returning one of the following errors:

Error 20023: Analysis: The following conditions must be met: 0 < f_low <= f_high <= fs/2. 

or
 
Error 20020: Analysis: The cut-off frequency, fc, must meet: 0 <= fc <= fs/2.


Why am I getting this error?

Solution

Some possible reasons for this error are:
 
  • The cutoff frequencies are invalid.
When using any type of filter (highpass, lowpass, bandpass, bandstop), the upper and lower cutoff frequencies must meet the following criteria:
0 < flow <= fhigh <= fs/2
Where flow is the lower cutoff frequency, fhigh is the upper cutoff frequency and fs is the sampling frequency. 
Notice that this means the lower frequency limit cannot equal zero. In addition the upper frequency limit cannot be greater than half the waveform sampling rate.
 
  • An array of data is being passed to the filter without waveform information:
If you wire an array into the input, most filter VIs will automatically place a Convert to Dynamic Data Express VI between the array and the input. The new dynamic data will not have time data. The filter needs to know dt (the time between samples in seconds). You can configure an array into a waveform by adding a Build Waveform VI to your block diagram as shown below. You can then specify dt, and connect the resulting waveform to the filter VI. 
Also, you should check the source of your data. If you are getting data from a VI and the output is an array, sometimes you can change the type of output to waveform in the context menu (right-click).
  • An array of waveforms is being passed into the filter:
If you wire in an array of waveforms into a single filter, the filter will not be able to display a filtered signal for each of the signals, thus producing an error.  If you want to filter multiple signals, index your array of signals so that you pass each signal into their own filter.
  • Trying to run more tasks than permitted per module when using a cDAQ chassis:
Make sure that the number of DAQmx tasks that you are trying to run meets the number of tasks permitted  on the cDAQ chassis you are using. If you are running too many tasks, combine the tasks by creating one task with multiple channels/configurations as shown below. 
Steps on how to do this can also be found in the Synchronizing Analog Input C Series Modules tutorial .