$0.00 0

YOUR CART
Checkout

SUBTOTAL
DISCOUNT
VAT
TOTAL
Checkout
Banner
This tutorial is the third in a series on oversampling in Reaktor. In the previous tutorial, I...

This tutorial is the third in a series on oversampling in Reaktor. In the previous tutorial, I showed a general structure that can be extended to create a polyphase filter with any number of taps and any (reasonable) amount of upsampling. This time, I’ll focus on getting ourselves back to the original sampling rate, using a similar but different structure.

DOWNSAMPLING POLYPHASE FILTER

In this section, I’ll create a generic macro that can be used for downsampling a signal. Like before, I will focus first and foremost upon making a macro that can be easily modularized and quickly modified to fit any type of oversampling system as needed.

Focusing on this means that the given macros for both up and downsampling are not nearly as efficient as they could be. For one, the efficiency can be increased substantially by replacing the table with constant values for each coefficient. Since the table is only being read from once, during initialization, I am at a loss to explain this difference except to blame the core compiler.

However, I am going to continue working today maintaining the table rather than using a Quick Constant for each coefficient. My reason for this is that I would like this framework to be as open-ended as possible, and allow the user to quickly create a new filter and modify it as necessary to fit their needs.

In sum, these structures are designed allow the user to change the number of taps and oversampling factor with the greatest amount of ease.

Once you have decided upon a final design for a filter, it might make sense to replace the table, however. On my machine I can save 1.5% of my CPU for a single voice, so this especially makes sense for polyphonic structures.

Now let’s get started on our downsampler. After splitting the incoming signal into several different waves, the downsampling filter must take each of those signals and combine them back into a single output. Since we already have an example of an 8x oversampler, let’s now downsample by 8 as well.

Each incoming signal essentially has it’s own FIR filter, the sums of which can be added up for the final output. Here’s macro that takes 8 inputs and implements a single tap for each one before passing them on to the output:

The ‘Tot’ value contains the running sum of all 8 filters.

As with the upsampler structure introduced previously, this macro is designed to be strung together in multiple copies in a serial fashion like so:

Of course, the macro can easily be edited to have more or less sub-filters, so creating a polyphase filter with any oversampling factor you like should be pretty simple.

OVERSAMPLED WAVESHAPER

Using the simple waveshaper funtion

y = x / (|x| + 1)

An oversampled waveshaper can be made like so:

Where the ‘1->8’ macro was introduced in the previous tutorial, and the ‘8->1’ macro is shown above.

Here’s what the spectrum of this structure looks like with a high frequency Primary Sawtooth wave as an input (this is a test designed to cause bad aliasing, basically):

And here’s the same waveshaper, without oversampling:

While we are unable to completely remove the aliased signals, you can easily see a substantial reduction in aliasing across the spectrum in the top picture.

CONCLUSION

Over the last three tutorials, a system for rapidly designing and testing oversampling filters in Reaktor was introduced. I have included a download with this tutorial, which you can grab here.

It contains an ensemble for creating coefficients, and a few macros for quickly building polyphase filters. The ‘8x Tap Up’ macro can be used for 8x upsampling filters, while the ‘8x Tap Down’ is of course for downsampling. Both can easily be modified for different oversampling factors.

In the included ensemble, the filter coefficients are stored into an event table, which can be stored as a text file and loaded into a core table as demonstrated in the ‘8x Waveshaper’ macro.

I hope you have found this series useful, please feel free to ask for clarifications in the comments.

RELATED COURSES

Building in Reaktor for Beginners

ADSR Courses

Add to cart

Sequencer Modules in Reaktor

ADSR Courses

Add to cart

FFT (Fast Fourier Transform) with Reaktor

ADSR Courses

Add to cart

Reaktor Core Masterclass

ADSR Courses

Add to cart
Waveform Loaded
Waveform Played
×
PLAYLIST
Clear all
WISHLISTS
Create an account to use wishlists
×
SAVE TUTORIALS
Create an account to save tutorials
×
FOLLOW YOUR FAVORITES
Follow your favourite labels, formats and genre's and ADSR will show what's new in those on your next visit.
×
  • Create product wishlist
  • Save your favorite tutorials
  • Regular discounts and exclusives
  • Never miss a sound! Follow your favorite labels.
Sign up to My ADSR to ensure you're ahead of the pack. Save your favorite content and be notified of new content. You'll never miss a thing!
Create your account now!
CREATE ACCOUNT
Sign up to My ADSR to ensure you're ahead of the pack. Save your favorite content and be notified of new content. You'll never miss a thing!
  • Get days all ADSR courses free
  • Create product wishlist
  • Save your favorite tutorials
  • Regular discounts and exclusives
Create your account now!
SIGN IN
adsrsounds.com login Video streaming login
Remember me
Forgot your password?
DON'T HAVE AN ADSR ACCOUNT?
Create your account
FORGOT PASSWORD

Send info
  1. Enter your email address
  2. Click "Send info"
  3. Check your inbox for an activation link
  4. Visit activation link and enter set new password
Sign in
DON'T HAVE AN ADSR ACCOUNT?
Create your account
IMPORTANT: Is this product compatible with your system? Please check the product system requirements tab before purchasing. To proceed with this purchase you must check the box to confirm you have checked the requirements.


I have read the system requirements and agree to the return policy. I understand that refunds will not be given due to limitation of my software or operating system.

I don't agree
, you have loyalty credit available. To redeem click the button to claim !
Claim
Claim your free sounds

For every $5 you spend on ADSR receive 1 free credit for Sample Manager.

Even better, we have back-dated this so any purchases you made since 2017 have also been credited to your account!

Click the button below to claim your free credit.

Get my free credits
Loyalty credits
1Every purchase you make on ADSR* now earns you 1 loyalty credit for every $5 spent
2Once you make a purchase your credits are added to your account
3Credits can be redeemed in ADSR Sample Manager to download individual loops and samples
4To redeem simply download ADSR Sample Manager and/or log into Sample Manager with your ADSR login details
5Credits will have been automatically added to your account
6Loyalty credits expire 30 days after initial purchase
* Not including video subscriptions
{"uid":-1,"ud":{"id":null,"fname":"","lname":"","eml":"","ph":"","city":"","state":"","country":"","zip":"","vndr":0,"admin":0,"editor":0,"content":0,"coursesub":0,"creditsub":0,"uname":"","ufst":0,"sbt":0,"lua":1714089890,"ap":[],"hash":"5a6dfeeaf6cec0a72ca948ed7d3a6b2c283f15a6199570a5a4c070091475e385","rlp":{"add":"no","amount":0}},"vf":[],"pw":[],"tu":[],"wcc":[],"wct":{"upsell_coupons":[],"applied_coupons":[],"coupon_amounts":"","coupon_amount":"","discount_type":"","coupon_excerpt":"","subtotal":0,"total":0},"crncy":{"usd":1,"cusd":"$","eur":0.933939,"ceur":"\u20ac","gbp":0.9625596,"cgbp":"\u00a3","gbpclean":0.802133,"cgbpclean":"\u00a3","jpy":155.43,"cjpy":"\u00a5","eur-at":1.1207268,"ceur-at":"\u20ac","eur-be":1.13006619,"ceur-be":"\u20ac","eur-bg":1.1207268,"ceur-bg":"\u20ac","eur-hr":1.16742375,"ceur-hr":"\u20ac","eur-cy":1.1113874099999999,"ceur-cy":"\u20ac","eur-cz":1.13006619,"ceur-cz":"\u20ac","eur-dk":1.16742375,"ceur-dk":"\u20ac","eur-ee":1.13940558,"ceur-ee":"\u20ac","eur-fi":1.15808436,"ceur-fi":"\u20ac","eur-fr":1.1207268,"ceur-fr":"\u20ac","eur-de":1.1113874099999999,"ceur-de":"\u20ac","eur-gr":1.15808436,"ceur-gr":"\u20ac","eur-hu":1.1861025299999999,"ceur-hu":"\u20ac","eur-ie":1.1487449699999999,"ceur-ie":"\u20ac","eur-it":1.13940558,"ceur-it":"\u20ac","eur-lv":1.13006619,"ceur-lv":"\u20ac","eur-lt":1.13006619,"ceur-lt":"\u20ac","eur-lu":1.09270863,"ceur-lu":"\u20ac","eur-mt":1.1020480199999998,"ceur-mt":"\u20ac","eur-nl":1.13006619,"ceur-nl":"\u20ac","eur-pl":1.1487449699999999,"ceur-pl":"\u20ac","eur-pt":1.1487449699999999,"ceur-pt":"\u20ac","eur-ro":1.1113874099999999,"ceur-ro":"\u20ac","eur-sk":1.1207268,"ceur-sk":"\u20ac","eur-si":1.13940558,"ceur-si":"\u20ac","eur-es":1.13006619,"ceur-es":"\u20ac","eur-se":1.16742375,"ceur-se":"\u20ac"},"ga":null,"wplourl":"https:\/\/www.adsrsounds.com\/wp-login.php?action=logout&_wpnonce=72e44073ed","usmsg":"","sbswtch":[],"sbsfav":[],"sbscmpl":[],"wpt":1714119099,"pccvc":[],"lpf":["1574986","611559","324393"],"vat":0,"time":1714090299}