Aliasing problems with FM
Hi,
I'm building my own FM synth based on the features of the FM7/8. I have to say everything is working out pretty well so far except for one little thing.
I also use other waveforms like tri~, rect~ and saw~ for modulation besides cycle~. These, however generate serious aliasing problems due to the many sidebands they generate when used for modulation.
I tried to avoid this by placing a brickwall lowpass filter before the dac~. As the basis I used the MSP tutorial dealing about filtering with pfft~. I used an
I'm not completely sure why this doen't work. Is it maybe because the bin center frequencies only represent the original carrier frequency and do not account for any possible sidebands due to modulation, or am I talking crazy now?
I really hope someone can explain this to me
On Aug 27, 2007, at 4:39 PM, Michael Dzjaparidze wrote:
>
> I'm building my own FM synth based on the features of the FM7/8. I
> have to say everything is working out pretty well so far except for
> one little thing.
>
> I also use other waveforms like tri~, rect~ and saw~ for modulation
> besides cycle~. These, however generate serious aliasing problems
> due to the many sidebands they generate when used for modulation.
There are relatively easy formulas for determining the highest
sideband with significant energy, given the Fc, Fm & mod index
(assuming sine waves for M & C). Try googling for FM synthesis
tutorials.
>
> I tried to avoid this by placing a brickwall lowpass filter before
> the dac~. As the basis I used the MSP tutorial dealing about
> filtering with pfft~. I used an
> filter out bin center frequencies above 22050 Hz.
>
> I'm not completely sure why this doen't work. Is it maybe because
> the bin center frequencies only represent the original carrier
> frequency and do not account for any possible sidebands due to
> modulation, or am I talking crazy now?
A filter will only remove things above the cut off - but aliasing
produces 'foldover' which places the aliased frequencies back down
below the Nyquist frequency. In other words, filters will not remove
aliasing once it has been created - the only way to get rid of it is
to avoid it in the first place.
>
> I really hope someone can explain this to me
Hope this helps - or at least gives you an idea where to look for
more info.
----
Steven M. Miller
Professor, Contemporary Music Program
College of Santa Fe
Home
SFIFEM
Atrium Sound Space
OVOS
CMP
i just use cycle~
and replace the sine
with buffers that have those other waveforms
written in the range -1. to 1.
you can get twice the modulation index before foldover
otoh
i kinda like foldover
>> I tried to avoid this by placing a brickwall lowpass filter before the dac~.
no, not there.
put a lp filter in the OSC, before its tuned, i.e. round
or filter your tri, square, and saw waves before you FM.
if you want to make it perfect, this filter is dynamic
and depends on the note played.
the keyword is "bandlimited oscillator":
make sure that an OSC never contains anything above
nyquist (=half the samplingrate), no matter at what
base frequency its currently playing.
the only problem here when using filters is that all
common filters are either remove more than neccesary
(slide~) or cause phase changes (IIR, biquad~) but its
better than without filters.
-110
Thank you all for the tips. I totally understand now that indeed a filter can't eliminate fold-over once it has been introduced. That makes perfectly sense.
Probably the best thing to do is to bandlimit the modulator waveforms proportional to the note being played before FM like you suggested. I did some experiments with my pfft~ brickwall directly after the modulating saw~ object and this definitely reduces the fold-over side-effects.
Staying clear from completely no fold-over probably is not achievable however. Especially when modulating 2 tri~'s or 2 saw~'s.
The only thing i have to do now is to find some good 'scaling' factor to dynamically link the note being played to the cutoff frequency of the lowpass filter. It's not a fullproof solution, but it should do the trick more or less.
Once again thank for the advice
don malone skrev:
> i just use cycle~
> and replace the sine
> with buffers that have those other waveforms
> written in the range -1. to 1.
> you can get twice the modulation index before foldover
>
Hi Don - do you have a quick example of this that you can show us?
> otoh
> i kinda like foldover
Same here. To me that's part of the charm.
Andreas.
>
> Staying clear from completely no fold-over probably is not achievable however. Especially when modulating 2 tri~'s or 2 saw~'s.
thats absolutely right, with a saw modulating an other
you
> do you have a quick example of this that you can show us?
the buffering technique is in cycle~.help
in the subpatcher [p generate-buffer~]
> thats absolutely right, with a saw modulating an other
> you?ll get a lot extra hf content. :)
sidebands are created around every spectral component of the carrier at the distance of every spectral component of the program
the number of sidebands (modulation index) depends on the amplitude of the program
so anything but sine -> sine can get pretty (pun intended) thick quickly
Yes, making your own waveforms, store them in a buffer~ and read them out with cycle~ is actually a great idea! There is a example of "how to" in the cycle~ helpfile. For all of you who are interested in other waveforms, I made a couple myself already. Use a buffer~, name it to the coresponding peek~ object and set the buffertime to 11.61 ms (1000ms/(44100/512):
Quote: Michael Dzjaparidze wrote on Mon, 27 August 2007 15:39
----------------------------------------------------
> Hi,
>
> I'm building my own FM synth based on the features of the FM7/8. I have to say everything is working out pretty well so far except for one little thing.
>
> I also use other waveforms like tri~, rect~ and saw~ for modulation besides cycle~. These, however generate serious aliasing problems due to the many sidebands they generate when used for modulation.
>
Aliasing problems? Dude, that's where the flavor's at. FM without aliasing is like french food without butter.
mz
mzed skrev:
> Quote: Michael Dzjaparidze wrote on Mon, 27 August 2007 15:39
> ----------------------------------------------------
>
>> Hi,
>>
>> I'm building my own FM synth based on the features of the FM7/8. I have to say everything is working out pretty well so far except for one little thing.
>>
>> I also use other waveforms like tri~, rect~ and saw~ for modulation besides cycle~. These, however generate serious aliasing problems due to the many sidebands they generate when used for modulation.
>>
>>
>
>
> Aliasing problems? Dude, that's where the flavor's at. FM without aliasing is like french food without butter.
>
> mz
>
hehe. You said it.
A.