Valhalla Room aliasing artifacts

RELATED
PRODUCTS

Post

First of all, I don't want to offend anybody. Please don't get me wrong, Valhalla Room is a very good reverb, one of the most musical reverbs I ever heard and definitely has the best value for price. Moreover, I even bought it and am very glad. But there are some things I don't like very much. I just want to share my observations. Also my thoughts and observations can be totally wrong.

The Room has very pleasant character of modulations, which can be almost unaudible, but have an effect of pleasant blurring the signal.

But there are some spectral artifacts in the sound (especially in dark modes) that are not so pleasant. I tryed to take in that I hear and did a 20Hz->20kHz sweep test. And yes, there is aliasing in the spectrum.

The LV-426 mode(my favorite mode due to dense tail and pleasant modulations character. I think I would like bright clean variant of LV-426 with its modulation and density but with full sample rate and high quality interpolation. May be I'm wrong):
Image
full-size:https://dl.dropbox.com/u/57065234/vroom/vr_lv-426.png

Yes, I know, the dark modes operate on low sample rate like vintage reverb units. But may be there was brickwall filter in the sound input of those reverbs to cut frequencies higher Nyquist?

The fully-sample-rated Bright Room mode has a little aliasing too (may be interpolation artifacts mirrored by Nyquist?)
Image
full-size:https://dl.dropbox.com/u/57065234/vroom ... t_room.png

Compare to Logic PlatinumVerb (but short tail. I know I had to make it longer for comparison):
Image
full-size:https://dl.dropbox.com/u/57065234/vroom ... umverb.png

But I may be wrong, and may be Valhalla Room would lost its magic without aliasing artifacts.

Post

ValhallaRoom uses an 8th order IIR Polyphase elliptical filter in its downsampling and upsampling. In theory, this should have 106 dB of rejection. In theory.

In practice...well, those graphs show a lot more aliasing than what the theory would predict.

I'm currently looking into what is going on here. I will keep you posted on progress. This upsampling/downsampling code is one of my basic building blocks, so I need to figure out what is going on in there.

Thanks for the bug report!

Sean Costello

Post

trance_lucent wrote: The fully-sample-rated Bright Room mode has a little aliasing too (may be interpolation artifacts mirrored by Nyquist?)
Image
full-size:https://dl.dropbox.com/u/57065234/vroom ... t_room.png
My guess is that you are seeing interpolation artifacts blurred by Nyquist. The Bright Room uses full bandwidth interpolation, with no attenuation at high frequencies. The delay lines are modulated by LFOs, which results in the signal being FMed. What you are probably seeing is the FM sidebands folding over. This should be fairly inaudible in real-world situations for a reverb running at the full sampling rate.

If you use delay lines with more "lossy" interpolation, such as linear interpolation, the high frequency sidebands will be more attenuated than with lossless interpolation. Some of the ValhallaRoom modes use linear interpolation in order to add the "right" amount of darkness, as well as to suppress modulation-related aliasing. My full-bandwidth interpolation doesn't cost that much more CPU than my linear interpolation, so the decision on when to use one interpolation type versus the other is usually made by testing the structure and seeing what works.

EDIT: Looking at the graph, I'm seeing less in the way of aliasing, and more in the way of noise. The full-bandwidth interpolation in Bright Room produces a little bit of noise. I have some tricks to reduce this, but a little bit of noise adds character to the algorithm. I deliberately introduce interpolation noise in some of the algorithms. In general, "pristine" is something I try to actively avoid. I am also trying to avoid aliasing, mind you, so I'm looking into the issue you found in LV-426.

Sean Costello

Post

valhallasound, thank you for explanation and for keeping plugin in maintenance. LV-426 mode without such heavy aliasing have to be really wonderful!

Also I believe that these noise bands (and aliases) in bright mode aren't fm side bands. Modulation's frequency is very low, so these bands have to be located near the source (and reverbered source) signal. Or no? :)

Edit: I think some noise is good, but right now it isn't just noise - there are these tonal bands in the spectrum. But its level is very low, so I think it is practically unhearable in bright room mode (unlike LV-426 aliased signal).

Post

trance_lucent wrote:valhallasound, thank you for explanation and for keeping plugin in maintenance. LV-426 mode without such heavy aliasing have to be really wonderful!
You're the first person that's ever noticed the aliasing, BTW. I am the second. :D
Also I believe that these noise bands (and aliases) in bright mode aren't fm side bands. Modulation's frequency is very low, so these bands have to be located near the source (and reverbered source) signal. Or no? :)
It's hard to tell with a sweep for the plot. A few steady state sine wave plots would be better at showing whether something is aliasing, or some other form of noise.

My guess is that the noise will go away in BrightRoom if the modulation depth is turned down to zero. The noise isn't due to any internal clipping, but rather to filter states that are jumping around. I do some warping to minimize the jumps, but a little bit of jumping is unavoidable with this sort of interpolation.
Edit: I think some noise is good, but right now it isn't just noise - there are these tonal bands in the spectrum. But its level is very low, so I think it is practically unhearable in bright room mode (unlike LV-426 aliased signal).
I think that the hashy noise from transients in Bright Room will drown out any modulation noise. In general, the top octave of an algorithmic reverb can have some weird stuff in there, which is why filtering that octave out isn't a bad idea. However, the filtering has to be done correctly to avoid aliasing.

As far as updating the plugin, I'm currently deep in the guts of the next plugin, so it may be a little bit before the next VRoom update. I was going to use the update opportunity to deal with any Mountain Lion Gatekeeper issues - I haven't heard any reports of OS 10.8 issues, but I need to look into this.

The new plugin would use similar downsampling code to VRoom, and ÜberMod uses the same code, so I'll be working on fixing this code in any case - it's just a matter of when I release the updates, and how big of an update I release. I'll send you a beta of the update when I put the downsampling fixes in there.

Sean Costello

Post

valhallasound wrote: My guess is that the noise will go away in BrightRoom if the modulation depth is turned down to zero.
You are right! I have done the test without modulation, and the spectrum was clean.
Also I have done the test with modulation and fixed frequency sine (bright room with modulation). The bands still here.
Image
full-size:https://dl.dropbox.com/u/57065234/vroom ... m-1khz.png
Of course, band's level is ridiculously small, and I think isn't audible at any conditions and isn't a problem. Have compared to a couple other (high quality) reverb demos I have, and all they have similar artifacts. So I think there is only dark modes aliasing problem remains.

Post

trance_lucent wrote:
valhallasound wrote: My guess is that the noise will go away in BrightRoom if the modulation depth is turned down to zero.
You are right! I have done the test without modulation, and the spectrum was clean.
Also I have done the test with modulation and fixed frequency sine (bright room with modulation). The bands still here.
Image
full-size:https://dl.dropbox.com/u/57065234/vroom ... m-1khz.png
Of course, band's level is ridiculously small, and I think isn't audible at any conditions and isn't a problem. Have compared to a couple other (high quality) reverb demos I have, and all they have similar artifacts. So I think there is only dark modes aliasing problem remains.
That band looks like noise. I LIKE noise. I can work with noise.

Aliasing, on the other hand, sucks. Especially when you have a fancy pants IIR Polyphase elliptical filter trying to get rid of it. Apparently that filter was programmed by a bear wearing a fez driving a clown car (that would be me). So I'm working on the downsampling/upsampling code right now, in order to hear the noise as it was intended to be heard.

EDIT: I just looked at the screenshot at night time. I didn't see the little sidebands before. These really look like modulation sidebands to me, which are a byproduct of frequency modulation. FM sidebands will only be an issue for very loud and very high frequencies, as these can fold back into the audio domain. For the slow and gentle modulation used in reverbs, this probably isn't that big of a deal.

Sean Costello
Last edited by valhallasound on Thu Sep 13, 2012 5:25 am, edited 1 time in total.

Post

Progress report:

I reimplemented my IIR Polyphase filtering from scratch, and am happy to report that the new filtering fixes the aliasing issue. I have a plugin running with both the old and new style filtering, and the new filter does a GREAT job at getting rid of the aliasing.

Unfortunately, the new filter also takes a LOT more cycles. So I need to go through the code, and make it much more efficient. Fortunately, this is a road I have gone down many times before. I'll make another copy of the code, and use the fresh copy for optimization, so I can compare the optimized code with the "ideal" code within the plugin.

Sean Costello

Post

Sean, I have to say it is a true delight to observe such dedication to your craft. :)
"Time makes fools of us all. Our only comfort is that greater shall come after us." Eric Temple Bell

http://thetomorrowfile.bandcamp.com/

Post

Indeed, MickGael. :)

And what sampling frequency were you testing at trance_lucent? 44.1? 48? 96kHz? I'm curious since you didn't mention it.

I totally agree with Sean on noise. Noise is good, especially if phase-modulated slightly I might add [for the authenticity, hint hint ;)] but aliasing sounds just harsh and gives a bad name to digital audio processing.

That's why I was immediately drawn to this thread. :hihi:

Keep up the great[est] work Sean! And thank you trance_lucent for noticing this!

Sean, you're working on a new frankenplugin? Oh my dog... yay! That's great news!! :)

Cheers!
It is no measure of health to be well adjusted to a profoundly sick society. - Jiddu Krishnamurti

Post

Update: I tracked down the bug in my original downsampling/upsampling code.

And it was really stupid.

To sum up the bug: when I change modes/sampling rate in my plugins, I call a "Reset" function to clear out all the delay lines and filter states, to keep popping sounds to a minimum. Each of the modules I use in my plugins has its own "Reset" or "Clear" function.

In my oversampling code, I reset the filter states, which is good. I also reset the filter coefficients to zero. Which is BAD. This turns the filters into straight delay lines, and the entire polyphase structure becomes a VERY shallow lowpass filter, as opposed to the brickwall filter that it is supposed to be calculating.

I'm gonna take a guess that I introduced this bug sometime after originally developing the downsampling/upsampling code. I remember testing the code pretty thoroughly prior to Dark Room being released (in Version 1.0.6), and there wasn't aliasing. I probably made a later pass at making sure everything was "reset" properly when changing modes, and added the code that set the filter coefficient to zero at that time. This is just my theory, trying to figure out how this got through the cracks.

Anyway, the good news is that the next time I recompile ValhallaRoom, the bug will automagically be fixed, as the bug fix is in my upsampling/downsampling module or "class" (hooray for object oriented programming!). There are a few other issues that I need to look at before I do the next build, and I may need to port things to the latest Juce framework, which will take some time and will probably introduce errors that I have to fix before I release the next update.

Sean Costello

Post

MickGael wrote:Sean, I have to say it is a true delight to observe such dedication to your craft. :)
+1

Post

DuX wrote:And what sampling frequency were you testing at trance_lucent? 44.1? 48? 96kHz? I'm curious since you didn't mention it.
It was 44.1 kHz.

valhallasound, great news! And also familiar situation with this bug (when you carefully tested the code, but add foolish bugs when you revisited it later with that you think is harmless modification) - I am a programmer too, and have a little bit dsp-programming experience as hobby.

Awaiting the new build of the Room! :roll:

Edit:
Also I am going on thinking that these (not audible, yes, so this reasoning is just theoretical) bands are not due to fm, but are interpolation artifacts. May be I'm wrong, but as I know fm bands are located at the carrier_freq + modulation_freq * n, where n is an integer and usually equal to +1 and -1 if modulation isn't strong. And in the case of slow modulation (1 Hz, for example) these bands will be located at carrier frequency +/- 1 Hz, not the hundreds of hertzs as in our case. I think it is still interpolation artifacts due to imperfection of interpolant. I remember when I wrote plugin with modulated delay lines, its interpolation noise also wasn't just bellish or linear curve on spectrum analyzer, but had some band-like structures (various for various interpolation algorithms). It all is interesting. I'll try to test my latest version of my code (with 6-point spline interpolation) if it consist the similar bands.

Edit2: The absence of side bands when modulation amplitude equal zero not necessary means that these bands are due to fm. Interpolation also won't give any noise when modulation amplitude is zero (even if delay line reading position located inbetween samples).

Post

Sean, may be it is interesting for you (offtopic): here is the same test for modulation in my plugin:
https://dl.dropbox.com/u/57065234/vroom/LE-1Khz.png
https://dl.dropbox.com/u/57065234/vroom/LE-sweep.png
Practically no noise, but sidebands are easy noticeable (but only for frequencies > 2kHz). I still think it's an interpolation artifacts, not fm.

Post

trance_lucent wrote:Sean, may be it is interesting for you (offtopic): here is the same test for modulation in my plugin:
https://dl.dropbox.com/u/57065234/vroom/LE-1Khz.png
https://dl.dropbox.com/u/57065234/vroom/LE-sweep.png
Practically no noise, but sidebands are easy noticeable (but only for frequencies > 2kHz). I still think it's an interpolation artifacts, not fm.
That 2nd image is purty. What are you using for your analysis/spectrograms?

Also, are you modulating at the audio rate, or at a control rate?

Sean Costello

Locked

Return to “Valhalla DSP”