{"id":10305,"date":"2022-04-08T21:45:46","date_gmt":"2022-04-08T21:45:46","guid":{"rendered":"https:\/\/liquidinstruments.com\/?p=10305"},"modified":"2025-12-18T00:20:45","modified_gmt":"2025-12-18T00:20:45","slug":"precise-delay-generation-with-mokus-fir-filter-builder","status":"publish","type":"post","link":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/","title":{"rendered":"Precise delay generation with the FIR Filter Builder","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Moku is a software-defined instrumentation platform for <\/span><span style=\"font-weight: 400;\">developing<\/span><span style=\"font-weight: 400;\">, <\/span><span style=\"font-weight: 400;\">testing<\/span><span style=\"font-weight: 400;\">, and <\/span><span style=\"font-weight: 400;\">controlling<\/span><span style=\"font-weight: 400;\"> new technology and designs. Combining instrument integration with unrivaled flexibility, Moku\u2019s intuitive workflow helps scientists, students, and engineers boost efficiency and de-risk projects.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h3>Signal Delay Generation<\/h3>\n<p>Precisely adjusting the delay of a signal can be important in many applications. For example, in high-speed signal transmission it is important to balance and compensate for the delays between different signal paths induced by cable length mismatches, differences in signal processing time, and many other factors. The most common way to generate delay digitally is to use a delay register to temporarily store the input signal and then output the signal in the next clock cycle. The amount of delay can be adjusted simply by chaining additional delay registers in between the signal path. The minimum delay is limited by the clock speed. For digital signals, increasing clock speed is relatively low cost. However, for analog signals the price for a high-speed ADC can be significantly higher. The extra sampling rate and bandwidth may also introduce additional noise to the system.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10344 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure1-1.png\" alt=\"Figure 1: Digital delays can be generated by a delay register.\" width=\"608\" height=\"441\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure1-1.png 608w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure1-1-300x218.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure1-1-600x435.png 600w\" sizes=\"(max-width: 608px) 100vw, 608px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>1<\/em><em>: Digital delays can be generated by a delay register.<\/em><\/p>\n<p>To introduce a delay that is not an integer multiple of the clock period can be more complicated. For sinusoidal signals, delay can be generated by a phase-locked loop (PLL). The Phasemeter can be configured as a PLL capable of tracking a sinusoidal signal from 1000 Hz to 200 MHz and output a phase-locked copy of the input signal with an arbitrary phase shift. However, the output is limited to sinusoidal waveforms. The triggered output function on the Arbitrary Waveform Generator can be used to generate delays by outputting a shifted preloaded signal. However, this method would only work for well-defined repetitive signal. In this article, we will demonstrate how to use Moku:Lab\u2019s FIR Filter Builder to generate fractional delays for arbitrary analog inputs. This method can be implemented with Moku:Go and Moku:Pro FIR Filter Builders as well.<\/p>\n<h3>Finite Impulse Response (FIR) Filters and Integer Delay<\/h3>\n<p>Finite impulse response (FIR) filters are used for implementing a band selection filter on digitized data. The filter is typically defined by a discrete impulse response function. The system conducts a numerical convolution of the input signal with a user-defined impulse response function on each sampling cycle and continuously outputs the convolved result. This time-domain convolution process can be considered as a multiplication process (of the Fourier transform function) in the frequency domain. By designing the shape of the impulse response function, we can effectively perform frequency band selection in the time domain. For example, if the impulse response of the system is a delta function, the Fourier transform of the delta function is a constant, and therefore gives a flat response in the frequency domain. After the multiplication in the frequency domain, the spectrum of the input signal remains unchanged. Therefore, a delta impulse response function corresponds to an all-pass filter.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10345 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure2-1.png\" alt=\"Figure 2: A delta impulse response function generates an all-pass frequency response.\" width=\"910\" height=\"554\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure2-1.png 910w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure2-1-300x183.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure2-1-768x468.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure2-1-600x365.png 600w\" sizes=\"(max-width: 910px) 100vw, 910px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>2<\/em><em>: A delta impulse response function generates an all-pass frequency response.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>By adding additional zeros before the impulse, we can add integer delay (with respect to the clock speed) to our system. Moku:Lab\u2019s FIR Filter Builder instrument can deploy two FIR filters at a time with up to 14,819 coefficients (length of the impulse response function). It allows users to deploy predefined impulse functions or upload impulse response functions from a file. To demonstrate the effect of integer delay, a 10 kHz sine wave was sent to Input 1 of a Moku:Lab with the FIR Filter Builder instrument deployed. The control matrix in the FIR Filter Builder combines, rescales, and redistributes the input signal to the two independent filter paths. The output vector is the product of the control matrix multiplied by the input vector:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10346 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-1.png\" alt=\"The output vector is the product of the control matrix multiplied by the input vector\" width=\"388\" height=\"108\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-1.png 388w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-1-300x84.png 300w\" sizes=\"(max-width: 388px) 100vw, 388px\" \/><\/p>\n<p>The control matrix was set [1, 0; 1, 0] to route Input 1 to both filter paths as shown in Figure 3 below. An impulse response of [0, 1] was used on the top (green) filter, and [0,0,1] was used on the bottom (purple) filter. Both filters were running at 122.1 kHz. At the output probe point, we could see a delay of 1\/122.1 kHz was generated between the two channels.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10306 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1.png\" alt=\"Figure 3: Integer clock delay generated with Moku:Lab\u2019s FIR Filter Builder\" width=\"2388\" height=\"1668\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1.png 2388w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-300x210.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-1024x715.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-768x536.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-1536x1073.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-2048x1431.png 2048w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure-1-600x419.png 600w\" sizes=\"(max-width: 2388px) 100vw, 2388px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>3<\/em><em>: Integer clock delay generated with Moku:Lab\u2019s FIR Filter Builder<\/em><\/p>\n<h2><\/h2>\n<h3>From Integer to Fractional Delay<\/h3>\n<p>While it is easy to generate integer delay by adding zeros before the delta function, it may not be apparent at first glance how fractional delays can be generated by the FIR filters. The first step is to expand the single point delta function to a finite\/windowed sinc function. Although the sinc function has a finite rectangular response in the frequency domain, which limits the bandwidth of the filter compared to the delta function all-pass filter (sampling rate limited), this gives us additional non-zero points in the time domain to generate a delay for the filter. Let us assume the delayed output\u00a0 <img decoding=\"async\" class=\"alignnone wp-image-10347 \" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-2.png\" alt=\"\" width=\"152\" height=\"25\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-2.png 304w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-2-300x49.png 300w\" sizes=\"(max-width: 152px) 100vw, 152px\" \/> , the Fourier transform of <img decoding=\"async\" class=\"alignnone wp-image-10348\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-3.png\" alt=\"\" width=\"88\" height=\"25\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-3.png 154w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-3-150x44.png 150w\" sizes=\"(max-width: 88px) 100vw, 88px\" \/>\u00a0can be written as:<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" class=\"aligncenter wp-image-10349 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4.png\" alt=\"Equation\" width=\"1082\" height=\"116\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4.png 1082w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4-300x32.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4-1024x110.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4-768x82.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-4-600x64.png 600w\" sizes=\"(max-width: 1082px) 100vw, 1082px\" \/><\/p>\n<p>Similarly, the Fourier transform of the delayed filter <img decoding=\"async\" class=\"alignnone wp-image-10350\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-5.png\" alt=\"\" width=\"150\" height=\"25\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-5.png 312w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-5-300x50.png 300w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/> \u00a0can be written as:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10351 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-6.png\" alt=\"Equation\" width=\"390\" height=\"90\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-6.png 390w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-6-300x69.png 300w\" sizes=\"(max-width: 390px) 100vw, 390px\" \/><\/p>\n<p>When the input signal <img decoding=\"async\" class=\"alignnone wp-image-10352\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-7.png\" alt=\"\" width=\"31\" height=\"25\" \/> convolves with the delayed filter <img decoding=\"async\" class=\"alignnone wp-image-10353\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-8.png\" alt=\"\" width=\"60\" height=\"25\" \/>, the output <img decoding=\"async\" class=\"alignnone wp-image-10354\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-9.png\" alt=\"\" width=\"30\" height=\"25\" \/>\u00a0in the frequency domain can be expressed as:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10355 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10.png\" alt=\"Equation\" width=\"1278\" height=\"98\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10.png 1278w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10-300x23.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10-1024x79.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10-768x59.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-10-600x46.png 600w\" sizes=\"(max-width: 1278px) 100vw, 1278px\" \/><\/p>\n<p>To convert everything back to the time domain, this can be described with the following equation:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10356 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-11.png\" alt=\"Equation\" width=\"514\" height=\"94\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-11.png 514w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Equation-11-300x55.png 300w\" sizes=\"(max-width: 514px) 100vw, 514px\" \/><\/p>\n<p>Therefore, we can effectively generate a fractional delay by convolving the signal with a delayed filter. A more detailed derivation can be found in reference 1.<\/p>\n<p>However, there is one limitation to this approach. The sinc impulse response function is a doubled-sided even function. Therefore, it is not possible to place the center of the impulse response at time 0. Otherwise, the system would need to start responding before the signal arrives at the input. This is considered a non-casual filter. To make the filter casual, we need to shift the entire impulse response to a later point in time (to the right). Therefore, the total input and output latency (group delay) is limited by the number of points in the impulse response.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10357 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure4.png\" alt=\"Equation\" width=\"883\" height=\"716\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure4.png 883w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure4-300x243.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure4-768x623.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure4-600x487.png 600w\" sizes=\"(max-width: 883px) 100vw, 883px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>4<\/em><em>: The overall process for generating a fractional delay impulse response function<\/em><\/p>\n<p>There are several tools that can generate fractional delay FIR coefficients. In the following demonstration, we used MATLAB\u2019s\u00a0<a href=\"https:\/\/www.mathworks.com\/help\/dsp\/ref\/designfracdelayfir.html\">designFracDelayFIR\u00a0<\/a>function and generated a 16-coefficient fractional delay filter with a delay of 0 and 0.5. The filters were generated using the following MATLAB code:<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" class=\"aligncenter wp-image-10358 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation.png\" alt=\"MATLAB code\" width=\"2167\" height=\"146\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation.png 2167w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-300x20.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-1024x69.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-768x52.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-1536x103.png 1536w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-2048x138.png 2048w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/MATLAB-equation-600x40.png 600w\" sizes=\"(max-width: 2167px) 100vw, 2167px\" \/><\/p>\n<p>Next, the 0 delay and 0.5 delay filter coefficients were uploaded to the top (green) and bottom (purple) FIR filters, respectively. The same 10 kHz sine wave was sent to Input 1 of the Moku:Lab. At the output, a 4.095 \u03bcs delay (1\/2 sampling cycle) was observed.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10359 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5.png\" alt=\"Figure 5: A 0.5 fractional delay was generated by Moku:Lab\u2019s FIR Filter Builder.\" width=\"1320\" height=\"925\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5.png 1320w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5-300x210.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5-1024x718.png 1024w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5-768x538.png 768w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure5-600x420.png 600w\" sizes=\"(max-width: 1320px) 100vw, 1320px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>5<\/em><em>: A 0.5 fractional delay was generated by Moku:Lab\u2019s FIR Filter Builder.<\/em><\/p>\n<h3>Tradeoff between Total Delay, Impulse Response Length, and Filter Bandwidth<\/h3>\n<p>By increasing the length of the impulse responses function, given the same sampling rate, we can effectively narrow the impulse response in the time domain. Therefore, the passband of the fractional delay filter increases. On the other hand, a longer filter requires a larger shift in the time domain to make the filter casual. Therefore, the total input-to-output latency increases. To demonstrate this effect, we implemented two 0.5 fractional delay filters with 16 and 64 coefficients. A Moku:Go Frequency Response Analyzer was used to characterize the frequency response of the filter. Channel 1 (blue) showed the frequency and phase response of the 16-coefficient filter, and channel 2 (orange) showed the frequency and phase response of the 64-coefficient filter. The 64-coefficient filter had a wider passband (closer to the Nyquist frequency), and the 16-coefficient filter had a shorter group delay.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-10360 size-full\" src=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure6.png\" alt=\"Figure 6: Frequency and phase responses of 16 and 64-coefficient FIR filters.\" width=\"650\" height=\"468\" srcset=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure6.png 650w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure6-300x216.png 300w, https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/Figure6-600x432.png 600w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Figure <\/em><em>6<\/em><em>: Frequency and phase responses of 16 and 64-coefficient FIR filters.<\/em><\/p>\n<h3>Reference and Further Readings<\/h3>\n<ol>\n<li>Valimaki, V. P. (1998). Discrete-time modeling of acoustic tubes using fractional delay filters.<\/li>\n<li>Valimaki, Vesa, and Timo I. Laakso. &#8220;Principles of fractional delay filters.&#8221; In 2000 <em>IEEE International Conference on Acoustics, Speech, and Signal Processing. Proceedings <\/em>(Cat. No. 00CH37100), vol. 6, pp. 3870-3873. IEEE, 2000.<\/li>\n<li>Shaddock, Daniel A., Brent Ware, Robert E. Spero, and M. Vallisneri. &#8220;Postprocessed time-delay interferometry for LISA.&#8221; Physical Review D 70, no. 8 (2004): 081101.<\/li>\n<li><em>Design of fractional delay FIR filters. Design of Fractional Delay FIR Filters<\/em>. Retrieved November 1, 2021, from https:\/\/www.mathworks.com\/help\/dsp\/ug\/design-of-fractional-delay-fir-filters.html.<\/li>\n<\/ol>\n<h2>Have questions or want a printable version?<\/h2>\n<p>Please contact us at <a href=\"mailto:support@liquidinstruments.com\">support@liquidinstruments.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Moku is a software-defined instrumentation platform for developing, testing, and controlling new technology and designs. Combining instrument integration with unrivaled flexibility, Moku\u2019s intuitive workflow helps scientists, students, and engineers boost efficiency and de-risk projects.\u00a0 &nbsp; Signal Delay Generation Precisely adjusting the delay of a signal can be important in many applications. For example, in high-speed [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":22,"featured_media":10362,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[5],"tags":[],"class_list":["post-10305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-notes","site-category-fir-filter-builder"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v27.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Precise delay generation with the FIR Filter Builder - Liquid Instruments<\/title>\n<meta name=\"description\" content=\"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Precise delay generation with the FIR Filter Builder\" \/>\n<meta property=\"og:description\" content=\"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\" \/>\n<meta property=\"og:site_name\" content=\"Liquid Instruments\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/LiquidInstruments\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-08T21:45:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-18T00:20:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"rachael\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@liquidinstrmnts\" \/>\n<meta name=\"twitter:site\" content=\"@liquidinstrmnts\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rachael\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\"},\"author\":{\"name\":\"rachael\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/c30848156f54c832d2cfdc67ea534b67\"},\"headline\":\"Precise delay generation with the FIR Filter Builder\",\"datePublished\":\"2022-04-08T21:45:46+00:00\",\"dateModified\":\"2025-12-18T00:20:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\"},\"wordCount\":1362,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/liquidinstruments.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg\",\"articleSection\":[\"Application notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\",\"url\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\",\"name\":\"Precise delay generation with the FIR Filter Builder - Liquid Instruments\",\"isPartOf\":{\"@id\":\"https:\/\/liquidinstruments.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg\",\"datePublished\":\"2022-04-08T21:45:46+00:00\",\"dateModified\":\"2025-12-18T00:20:45+00:00\",\"description\":\"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.\",\"breadcrumb\":{\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage\",\"url\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg\",\"contentUrl\":\"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg\",\"width\":1920,\"height\":1280},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/liquidinstruments.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Precise delay generation with the FIR Filter Builder\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/liquidinstruments.com\/#website\",\"url\":\"https:\/\/liquidinstruments.com\/\",\"name\":\"Liquid Instruments\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/liquidinstruments.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/liquidinstruments.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/liquidinstruments.com\/#organization\",\"name\":\"Liquid Instruments\",\"url\":\"https:\/\/liquidinstruments.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1\",\"width\":1000,\"height\":924,\"caption\":\"Liquid Instruments\"},\"image\":{\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/LiquidInstruments\/\",\"https:\/\/x.com\/liquidinstrmnts\",\"https:\/\/www.instagram.com\/liquidinstruments\/\",\"https:\/\/www.linkedin.com\/company\/liquidinstruments\/\",\"https:\/\/www.youtube.com\/c\/LiquidInstruments\",\"https:\/\/vimeo.com\/liquidinstruments\"],\"hasMerchantReturnPolicy\":{\"@type\":\"MerchantReturnPolicy\",\"merchantReturnLink\":\"https:\/\/liquidinstruments.com\/support\/warranty-repairs-and-service\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/c30848156f54c832d2cfdc67ea534b67\",\"name\":\"rachael\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/liquidinstruments.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/27d5dd06f62f14045f0e42382e650e70fd2ec744e5ceef0e82458d7775937336?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/27d5dd06f62f14045f0e42382e650e70fd2ec744e5ceef0e82458d7775937336?s=96&d=wavatar&r=g\",\"caption\":\"rachael\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Precise delay generation with the FIR Filter Builder - Liquid Instruments","description":"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/","og_locale":"en_US","og_type":"article","og_title":"Precise delay generation with the FIR Filter Builder","og_description":"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.","og_url":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/","og_site_name":"Liquid Instruments","article_publisher":"https:\/\/www.facebook.com\/LiquidInstruments\/","article_published_time":"2022-04-08T21:45:46+00:00","article_modified_time":"2025-12-18T00:20:45+00:00","og_image":[{"width":1920,"height":1280,"url":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg","type":"image\/jpeg"}],"author":"rachael","twitter_card":"summary_large_image","twitter_creator":"@liquidinstrmnts","twitter_site":"@liquidinstrmnts","twitter_misc":{"Written by":"rachael","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#article","isPartOf":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/"},"author":{"name":"rachael","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/c30848156f54c832d2cfdc67ea534b67"},"headline":"Precise delay generation with the FIR Filter Builder","datePublished":"2022-04-08T21:45:46+00:00","dateModified":"2025-12-18T00:20:45+00:00","mainEntityOfPage":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/"},"wordCount":1362,"commentCount":0,"publisher":{"@id":"https:\/\/liquidinstruments.com\/#organization"},"image":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage"},"thumbnailUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg","articleSection":["Application notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/","url":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/","name":"Precise delay generation with the FIR Filter Builder - Liquid Instruments","isPartOf":{"@id":"https:\/\/liquidinstruments.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage"},"image":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage"},"thumbnailUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg","datePublished":"2022-04-08T21:45:46+00:00","dateModified":"2025-12-18T00:20:45+00:00","description":"Precisely adjust the delay of a signal with the FIR Filter Builder \u2013 a cost-effective solution for generating fractional delays for arbitrary analog inputs.","breadcrumb":{"@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#primaryimage","url":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg","contentUrl":"https:\/\/liquidinstruments.com\/wp-content\/uploads\/2022\/04\/AppNoteBlogPost_00-Hero-min.jpg","width":1920,"height":1280},{"@type":"BreadcrumbList","@id":"https:\/\/liquidinstruments.com\/application-notes\/precise-delay-generation-with-mokus-fir-filter-builder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/liquidinstruments.com\/"},{"@type":"ListItem","position":2,"name":"Precise delay generation with the FIR Filter Builder"}]},{"@type":"WebSite","@id":"https:\/\/liquidinstruments.com\/#website","url":"https:\/\/liquidinstruments.com\/","name":"Liquid Instruments","description":"","publisher":{"@id":"https:\/\/liquidinstruments.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/liquidinstruments.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/liquidinstruments.com\/#organization","name":"Liquid Instruments","url":"https:\/\/liquidinstruments.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1","contentUrl":"https:\/\/i0.wp.com\/liquidinstruments.com\/wp-content\/uploads\/2020\/10\/BrandMark-Preferred-RGB-Color.png?fit=1000%2C924&ssl=1","width":1000,"height":924,"caption":"Liquid Instruments"},"image":{"@id":"https:\/\/liquidinstruments.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/LiquidInstruments\/","https:\/\/x.com\/liquidinstrmnts","https:\/\/www.instagram.com\/liquidinstruments\/","https:\/\/www.linkedin.com\/company\/liquidinstruments\/","https:\/\/www.youtube.com\/c\/LiquidInstruments","https:\/\/vimeo.com\/liquidinstruments"],"hasMerchantReturnPolicy":{"@type":"MerchantReturnPolicy","merchantReturnLink":"https:\/\/liquidinstruments.com\/support\/warranty-repairs-and-service\/"}},{"@type":"Person","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/c30848156f54c832d2cfdc67ea534b67","name":"rachael","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/liquidinstruments.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/27d5dd06f62f14045f0e42382e650e70fd2ec744e5ceef0e82458d7775937336?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/27d5dd06f62f14045f0e42382e650e70fd2ec744e5ceef0e82458d7775937336?s=96&d=wavatar&r=g","caption":"rachael"}}]}},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/10305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/comments?post=10305"}],"version-history":[{"count":4,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/10305\/revisions"}],"predecessor-version":[{"id":26929,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/posts\/10305\/revisions\/26929"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/media\/10362"}],"wp:attachment":[{"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/media?parent=10305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/categories?post=10305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liquidinstruments.com\/wp-json\/wp\/v2\/tags?post=10305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}