 
  
  
 Command-line Fourier filter function for time-series signal vector y; 'samplingtime' is the total duration of sampled signal in sec, millisec, or microsec; 'centerfrequency' and 'frequencywidth' are the center frequency and width of the filter in Hz, KHz, or MHz, respectively. If 'shape' = 1, the filter is Gaussian; as 'shape' increases, the filter shape becomes more and more rectangular (faster cut-off rate). Set 'mode' = 0 for band-pass filter, 'mode' = 1 for band-reject (notch) filter. Click here to view or download just this function.
Example: plot(FouFilter(tan(1:1000),15,2,2,0))
iFilter is a
      keyboard-operated interactive Fourier filter function for
      time-series signal (x,y), with keyboard controls that allow you to
      adjust the filter parameters continuously while observing the
      effect on your signal dynamically. Optional input arguments set
      the initial values of center frequency, filter width, shape,
      plotmode (1=linear; 2=semilog frequency; 3=semilog amplitude;
      4=log-log) and filter mode ('band-pass', 'low-pass', 'high-pass',
      'band-reject (notch), 'comb pass', and 'comb notch'). In the comb
      modes, the filter has multiple bands located at frequencies 1, 2,
      3, 4... times the center frequency, each with the same
      (controllable) width and shape.
      
      The filtered signal can be returned as the function value, saved
      as a ".mat" file on the disk, or plays through the computer's
      sound system. Press K to list keyboard commands. 
      This is a self-contained Matlab function that does not require any
      toolboxes or add-on functions. Click here
      to view or download and place it in the Matlab path. 
      
      At the Matlab command prompt, type:  ifilter(x,y) or ifilter(y) or ifilter(xymatrix) or
        ry=ifilter(x,y,center,width,shape,plotmode,filtermode)
      
      Version 4.3, June 2016
      
        
      Example 1:
       Periodic waveform with 2 frequency components at 60 and 440
      Hz.
      x=[0:.001:2*pi];
        y=sin(60.*x.*2.*pi)+2.*sin(440.*x.*2.*pi);
        ifilter(x,y);
       
      Example 2: uses optional input arguments to set initial
      values:
        x=0:(1/8000):.3;
       y=(1+12/100.*sin(2*47*pi.*x)).*sin(880*pi.*x)+(1+12/100.*sin(2*20*pi.*x)).*sin(2000*pi.*x);
       ry=ifilter(x,y,440,31,18,3,'Band-pass');
        
    

      
        Example 3: Picking one frequency out of a noisy sine wave.
       x=[0:.01:2*pi]';
       y=sin(20*x)+3.*randn(size(x));
       ifilter(x,y,3.1,0.85924,15,1,'Band-pass');
       
      Example 4: Square wave with band-pass vs Comb pass filter
        t = 0:.0001:.0625;
       y=square(2*pi*64*t);
       ifilter(t,y,64,32,12,1,'Band-pass');
       ifilter(t,y,48,32,2,1,'Comb
        pass');
        
       Example 5:  MorseCode.m uses iFilter to demonstrate
      the abilities and limitations of Fourier filtering. It creates a
      pulsed fixed frequency (0.05) sine wave
      that spells out "SOS" in Morse code
      (dit-dit-dit/dah-dah-dah/dit-dit-dit), adds random white noise so
      that the SNR is very poor
      (about 0.1 in this example). The white noise has a frequency
      spectrum that is spread out over
        the entire range of frequencies; the signal itself is
      concentrated mostly at a fixed frequency (0.05) but the
        modulation of the sine wave by the Morse Code pulses spreads
      out its spectrum over a narrow
        frequency range of about 0.0004. This suggests that a
      Fourier bandpass filter tuned to the signal frequency might be
      able to isolate the signal from the noise. As the bandwidth is reduced, the
      signal-to-noise ratio improves and the signal begins to emerges from the
        noise until it
        becomes clear, but if the bandwidth is too narrow,
      the step response time is too slow to give distinct "dits"
      and "dahs". The step response time is inversely proportional to
      the bandwidth. (Use the ? and " keys to adjust the bandwidth.
      Press 'P' or the Spacebar to hear the sound). You can
      actually hear that sine wave component better than you
      can see it in the waveform plot (upper panel), because the
        ear works like a spectrum analyzer, with separate nerve
      endings assigned to to specific frequencies, whereas the eye
      analyzes the graph spatially, looking at the overall amplitude and
      not at individual frequencies.  Watch
        an mp4 video of this script in operation, with sound. Also on YouTube.
       
      
      
      Example
          6:  This example shows a 1.58 sec duration
      audio recording of the spoken phrase "Testing, one, two, three",
      previously recorded at 44000 Hz and saved in WAV format (download link) and in ".mat"
      format (download link), loaded into iFilter, which is initially set to bandpass
      mode and tuned to a narrow segment that is well above the
      frequency range of most of the signal. It seems as if though this
      passband would miss most of the frequency components in the
      signal, yet even in this case the speech is intelligible,
      demonstrating the remarkable ability of the ear-brain system to
      make do with a highly compromised signal. Press P or space
      to hear the filter's output. Different filter settings will
      change the timbre
      of the sound.
    
>> v=wavread('TestingOneTwoThree.wav');
      >> time=0:1/44001:1.5825;
      >> waveform=v(:,2);
      >> ifilter(time,waveform,1267,700,10,2,'Band-pass');
    
         iFilter 4.3 KEYBOARD CONTROLS when figure window is
      topmost 
        
          Adjust filter frequency.......Coarse (10% change): < and >
                                       
        Fine (1% change): left and right cursor
        arrows
          Adjust filter width...........Coarse (10% change): / and " 
        
                                       
        Fine  (1% change): up and
        down cursor arrows
          Filter shape..................A,Z (A
        more rectangular, Z
        more Gaussian)
          Filter mode...................B=bandpass; N
        or R=notch (band
                         
                       reject);H=High-pass;
                                       
        L=Low-pass; C=Comb pass; V=Comb notch.
          Select plot mode..............1=linear; 2=semilog
        frequency
                                       
        3=semilog amplitude; 4=log-log
          Print keyboard commands.......K  Pints this list
          Print filter parameters.......Q or W Prints ifilter with input
                         
                       
        arguments: center, width, shape,
                         
                       
        plotmode, filtermode
          Print current settings........T  Prints list of current settings
          Switch SPECTRUM X-axis scale..X switch between frequency and period 
                                         
        on the horizontal axis
          Switch OUTPUT Y-axis scale....Y switch output plot between fixed or
                         
                        variable
        vertical axis. 
          Play output as sound..........P or Enter
          Save output as .mat file......S
This page is part of "A Pragmatic Introduction to Signal Processing", created and maintained by Prof. Tom O'Haver , Department of Chemistry and Biochemistry, The University of Maryland at College Park. Comments, suggestions and questions should be directed to Prof. O'Haver at toh@umd.edu.

 
         
  
      Last updated: December, 2021. Number of unique visits to this site since May 17, 2008: