If you have a problem or need to report a bug please email : support@dsprobotics.com
There are 3 sections to this support area:
DOWNLOADS: access to product manuals, support files and drivers
HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects
USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here
NEW REGISTRATIONS - please contact us if you wish to register on the forum
Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright
Creating (a single) harmonic
9 posts
• Page 1 of 1
Creating (a single) harmonic
Hi,
I'm looking into creating 'single higher harmonics' - no real value for this, just playing around
Background
The customary method for creating higher harmonics, is Chebyshev polynomials which is extremely handy, but it creates a 'pair' of harmonics for the higher ones, not just a single one...
Let me explain by an example...
Example
Let's assume I'm trying to create a 'third harmonic' only (general case, it could be the 'fifth harmonic' only as well) -
so that if the input is 'pure sine wave' at 100 Hz, the output would be a single, clean 300Hz.
I came across this extremely informational thread (on SM forum) - discussing the 'Chebyshev polynomials':
http://www.synthmaker.co.uk/forum/viewtopic.php?f=12&t=10265&st=0&sk=t&sd=a&hilit=chebyshev+polynomials&start=15
wikipedia:
http://en.wikipedia.org/wiki/Chebyshev_polynomials
Which is great, however I can not prodcue a 'clean' 3rd harmonic with it.
Here is why...
Assuming this code for third harmonic:
the 'H' harmonic calculation obviously includes 'x' which is the original input. Looking at the output of 'H2' only on a 'spectrum analyzer' shows the harmonic with the original sine wave, while I'm interested in the harmonic only.
My question is how can I can I make the 'H' harmonic appear on 'spectrum analyzer' 'solo' without any other harmonics.
Is it possible?
Thanks,
Rocko
I'm looking into creating 'single higher harmonics' - no real value for this, just playing around
Background
The customary method for creating higher harmonics, is Chebyshev polynomials which is extremely handy, but it creates a 'pair' of harmonics for the higher ones, not just a single one...
Let me explain by an example...
Example
Let's assume I'm trying to create a 'third harmonic' only (general case, it could be the 'fifth harmonic' only as well) -
so that if the input is 'pure sine wave' at 100 Hz, the output would be a single, clean 300Hz.
I came across this extremely informational thread (on SM forum) - discussing the 'Chebyshev polynomials':
http://www.synthmaker.co.uk/forum/viewtopic.php?f=12&t=10265&st=0&sk=t&sd=a&hilit=chebyshev+polynomials&start=15
wikipedia:
http://en.wikipedia.org/wiki/Chebyshev_polynomials
Which is great, however I can not prodcue a 'clean' 3rd harmonic with it.
Here is why...
Assuming this code for third harmonic:
- Code: Select all
streamin x;
streamout H;
//Define variables
float x2,x3;
//Define variables for harmonics
float H;
//supportive calculation
x2=x*x;
x3=x2*x;
//3rd harmonic (x3 the original frequency)
//This is based on chebyshev as shown in wikipedia
H = 8*x3-4*x;
the 'H' harmonic calculation obviously includes 'x' which is the original input. Looking at the output of 'H2' only on a 'spectrum analyzer' shows the harmonic with the original sine wave, while I'm interested in the harmonic only.
My question is how can I can I make the 'H' harmonic appear on 'spectrum analyzer' 'solo' without any other harmonics.
Is it possible?
Thanks,
Rocko
- Rocko
- Posts: 186
- Joined: Tue May 15, 2012 12:42 pm
Re: Creating (a single) harmonic
Maybe there are other ways, depends on applications.
Is the signal slow/fixed or fast/flowing across the spectra?
How many harmonics do you wish to follow?
Is the signal slow/fixed or fast/flowing across the spectra?
How many harmonics do you wish to follow?
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
Feel free to donate. Thank you for your contribution.
- tester
- Posts: 1786
- Joined: Wed Jan 18, 2012 10:52 pm
- Location: Poland, internet
Re: Creating (a single) harmonic
You're doing it wrong... you must use Chebyshev polynomial of first kind - not of second.
So 4x^3-3x instead of 8x^3-4x
Also note, that input signal must be sinus in range <1,-1> otherwise you'll get just distorted sinus with fundamental frequency still present.
So 4x^3-3x instead of 8x^3-4x
Also note, that input signal must be sinus in range <1,-1> otherwise you'll get just distorted sinus with fundamental frequency still present.
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Creating (a single) harmonic
Thanks for the answers...
Well, it is a theoretical question, so let's assume the simplest case in which the input is a constant sine wave at 100 Hz, (-6) DbFS, never changing.
I would like the output to be 300 Hz (2nd harmonic) only. It could be 4th, 5th or other of course...
How is this doable?
Regarding "KG's" answer... well, the sine wave is limited to [-1:1] values only.
Please notice that the question is more theory related more than specific implementation.
One can notice that the Chebyshev formula's for higher harmonics include those for the lower harmonics (iterative), so it seems to me that this mechanism, can not produce a single clean high harmonic (like 3rd, 5th, etc.).
Please notice, first kind (similar in build to second kind):
T_0(x) = 1
T_1(x) = x
T_2(x) = 2x^2 - 1
T_3(x) = 4x^3 - 3x
T_4(x) = 8x^4 - 8x^2 + 1
T_5(x) = 16x^5 - 20x^3 + 5x
T_6(x) = 32x^6 - 48x^4 + 18x^2 - 1
T_7(x) = 64x^7 - 112x^5 + 56x^3 - 7x,
T_8(x) = 128x^8 - 256x^6 + 160x^4 - 32x^2 + 1
T_9(x) = 256x^9 - 576x^7 + 432x^5 - 120x^3 + 9x. ,
T_{10}(x) = 512x^{10} - 1280x^8 + 1120x^6 - 400x^4 + 50x^2-1.
T_{11}(x) = 1024x^{11} - 2816x^9 + 2816x^7 - 1232x^5 +220x^3 - 11x.
T_3 actaully include T_1 with a different gain, so it is bound to create the same harmonics as T_1. Isn't it?
Is this correct? If so, is there a way to create single high harmonics?
tester wrote:Maybe there are other ways, depends on applications.
Is the signal slow/fixed or fast/flowing across the spectra?
How many harmonics do you wish to follow?
Well, it is a theoretical question, so let's assume the simplest case in which the input is a constant sine wave at 100 Hz, (-6) DbFS, never changing.
I would like the output to be 300 Hz (2nd harmonic) only. It could be 4th, 5th or other of course...
How is this doable?
Regarding "KG's" answer... well, the sine wave is limited to [-1:1] values only.
Please notice that the question is more theory related more than specific implementation.
One can notice that the Chebyshev formula's for higher harmonics include those for the lower harmonics (iterative), so it seems to me that this mechanism, can not produce a single clean high harmonic (like 3rd, 5th, etc.).
Please notice, first kind (similar in build to second kind):
T_0(x) = 1
T_1(x) = x
T_2(x) = 2x^2 - 1
T_3(x) = 4x^3 - 3x
T_4(x) = 8x^4 - 8x^2 + 1
T_5(x) = 16x^5 - 20x^3 + 5x
T_6(x) = 32x^6 - 48x^4 + 18x^2 - 1
T_7(x) = 64x^7 - 112x^5 + 56x^3 - 7x,
T_8(x) = 128x^8 - 256x^6 + 160x^4 - 32x^2 + 1
T_9(x) = 256x^9 - 576x^7 + 432x^5 - 120x^3 + 9x. ,
T_{10}(x) = 512x^{10} - 1280x^8 + 1120x^6 - 400x^4 + 50x^2-1.
T_{11}(x) = 1024x^{11} - 2816x^9 + 2816x^7 - 1232x^5 +220x^3 - 11x.
T_3 actaully include T_1 with a different gain, so it is bound to create the same harmonics as T_1. Isn't it?
Is this correct? If so, is there a way to create single high harmonics?
- Rocko
- Posts: 186
- Joined: Tue May 15, 2012 12:42 pm
Re: Creating (a single) harmonic
Basically, as a non-programmer - I would use pitch tracking made by Martin, to find the fundamental = H1 (and maybe I would limit the H1 range with some LP filter, to track only H1), and then I would use graph and FFT graph prims, to get the spectra in green. Having H1, I can calculate where is it in spectra (indexes; at 16k resolution - this is max in stock FS prims), and then I can calculate other parts of the spectra (with some +/- tolerance), where harmonics are. Then I would calculate max values in these parts of the spectra, to get the amplitudes of my harmonics. And then - I can use individual harmonics on the display, the ones I desire.
Limitation of this method - pitch of the fundamental must be relatively stable versus amount of harmonics I can track relatively accurately.
Voice tracking?
Limitation of this method - pitch of the fundamental must be relatively stable versus amount of harmonics I can track relatively accurately.
Voice tracking?
Need to take a break? I have something right for you.
Feel free to donate. Thank you for your contribution.
Feel free to donate. Thank you for your contribution.
- tester
- Posts: 1786
- Joined: Wed Jan 18, 2012 10:52 pm
- Location: Poland, internet
Re: Creating (a single) harmonic
Here is another weird behavior of 'Chebyshev polynomials'...
Let's say I input the suggested signal (100Hz, pure sine wave, (-6 DbFS)) to create the first harmonic [200Hz].
The output is a clean 200 Hz as expected.
Now, if I cascade this 200Hz input to another 'chebyshev polynomial' module and output the first harmonic, the output is... 200Hz and 400Hz...
If I input a 200Hz to the second 'chebyshev polynomial' module only - the output is the expected 400Hz.
How does the system 'know' that in the first case, the sine wave is not original??
Let's say I input the suggested signal (100Hz, pure sine wave, (-6 DbFS)) to create the first harmonic [200Hz].
The output is a clean 200 Hz as expected.
Now, if I cascade this 200Hz input to another 'chebyshev polynomial' module and output the first harmonic, the output is... 200Hz and 400Hz...
If I input a 200Hz to the second 'chebyshev polynomial' module only - the output is the expected 400Hz.
How does the system 'know' that in the first case, the sine wave is not original??
- Attachments
-
- Dual_Harmonizer.osm
- (3.61 KiB) Downloaded 1319 times
- Rocko
- Posts: 186
- Joined: Tue May 15, 2012 12:42 pm
Re: Creating (a single) harmonic
Rocko wrote:T_3 actaully include T_1 with a different gain, so it is bound to create the same harmonics as T_1. Isn't it?
Wrong! You are using polynomials to waveshape a signal. There is very little obvious logic in relation between what the formula contains and which harmonics it will create.
Chebyshev polynomials have a property that if you waveshape cosine it will output higher freqiency cosine. However the input must be pure cosine (ranging exactly <-1,1> normalized ... so -6dBFS will not work as that is <-0.5,0.5>).
Rocko wrote:Here is another weird behavior of 'Chebyshev polynomials'...
Let's say I input the suggested signal (100Hz, pure sine wave, (-6 DbFS)) to create the first harmonic [200Hz].
The output is a clean 200 Hz as expected.
Now, if I cascade this 200Hz input to another 'chebyshev polynomial' module and output the first harmonic, the output is... 200Hz and 400Hz...
If I input a 200Hz to the second 'chebyshev polynomial' module only - the output is the expected 400Hz.
How does the system 'know' that in the first case, the sine wave is not original??
Nothing weird on that really... connect it to a oscilloscope and you'll notice what you do wrong straight away. In case of first Ch. if you enter input that is ranging lower than <-1,1> your output will be a cosine with DC offset (which is hard to notice in spectum analyzers). So to the second you are inputing a cosine with very little gain and big DC offset = the output will not be pure cosine.
Here a schematic to show you what I'm talking about. a sine oscillator with a gain knob inputed to the chebysevs you posted and connected to oscilloscope. Notice how the waveshape changes in every stage (original sine, first pass through chebysev, second pass) with the gain. Chebysevs produce expected (pure sine) output only when gain is 1 thus 0dBFS.
- Attachments
-
- Dual_Harmonizer.osm
- (126.52 KiB) Downloaded 1327 times
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Creating (a single) harmonic
Hi,
Hey - thanks for the clear explanation... I thought it should be limited to [-1,1], not exactly at that value...
This makes things much clearer.
so, going back to 'real world' cases... is there an efficient 'mathematical' way to create single high harmonics, like x3 times higher frequency, for an input of constant frequency (let's say 100Hz) and changing amplitude (limited to maximum [1])?
I find all this very interesting...
Rocko
Hey - thanks for the clear explanation... I thought it should be limited to [-1,1], not exactly at that value...
This makes things much clearer.
so, going back to 'real world' cases... is there an efficient 'mathematical' way to create single high harmonics, like x3 times higher frequency, for an input of constant frequency (let's say 100Hz) and changing amplitude (limited to maximum [1])?
I find all this very interesting...
Rocko
- Rocko
- Posts: 186
- Joined: Tue May 15, 2012 12:42 pm
Re: Creating (a single) harmonic
Rocko wrote:Hi,
Hey - thanks for the clear explanation... I thought it should be limited to [-1,1], not exactly at that value...
This makes things much clearer.
so, going back to 'real world' cases... is there an efficient 'mathematical' way to create single high harmonics, like x3 times higher frequency, for an input of constant frequency (let's say 100Hz) and changing amplitude (limited to maximum [1])?
I find all this very interesting...
Rocko
You may hard-compress the signal, preform the frequency shift and apply envelope from the original. However chebyshevs seem to be very sensitive to imperfections of the input sinus wave. And my hardlimiter introduces a lot of it unfortunately. You may cascade it with a bandpass/lowpass filter
- Attachments
-
- harmonizer sine.fsm
- (52.85 KiB) Downloaded 1352 times
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
9 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 30 guests