diff --git a/Classes/Hilbert.sc b/Classes/Hilbert.sc index 65f2c80..31bcb1e 100644 --- a/Classes/Hilbert.sc +++ b/Classes/Hilbert.sc @@ -231,16 +231,16 @@ HilbertH { }) } - // calculate real coefficients as delayed impulse + /* To be deprecated */ *calcRealCoeffs { |size| - - ^HilbertHRe.calcCoeffs(size) + "HilbertH *calcRealCoeffs to be deprecated. Use SignalBox Quark: Signal *hilbert.real".warn; + ^Signal.hilbert(size).real.as(Array) } - // calculate imag coefficients via (1-cos(t)) / t + /* To be deprecated */ *calcImagCoeffs { |size| - - ^HilbertHIm.calcCoeffs(size) + "HilbertH *calcImagCoeffs to be deprecated. Use SignalBox Quark: Signal *hilbert.imag".warn; + ^(Signal.kaiserWindow(size, a: 1) * Signal.hilbert(size).imag).as(Array) } *arMag { |in, size = 2048, mul = 1, add = 0| @@ -310,65 +310,43 @@ HilbertHRe { // between real and imaginary parts, at the expense of an // extra convolution *arConv { |in, size=2048, mul=1.0, add=0.0| - var r, kernel_r; - - r = HilbertHRe.calcCoeffs(size); - kernel_r = LocalBuf.new(size, 1).set(r); - - ^Convolution2.ar(in, kernel_r, framesize: size, mul: mul, add: add); + ^Convolution2.ar( + in, + LocalBuf.new(size, 1).set( + Signal.hilbert(size).real + ), + framesize: size, + mul: mul, + add: add + ) } - // calculate real coefficients as delayed impulse + /* To be deprecated */ *calcCoeffs { |size| - var half_win, xReal; - - half_win = size/2; - - // real response - xReal = Array.fill(size, { 0.0 }); - xReal.put(half_win, 1.0); - - ^xReal + "HilbertHRe *calcCoeffs to be deprecated. Use SignalBox Quark: Signal *hilbert.real".warn; + ^Signal.hilbert(size).real.as(Array) } - - // // calculate real coefficients via sinc - // *calcCoeffs { |size| - // var half_win, window, xReal; - // - // half_win = size/2; - // window = Signal.hanningWindow(size+1); - // - // // imaginary response - // xReal = Array.series(size+1, half_win.neg, 1); - // xReal = xReal.collect({|i| (i == 0).if({ 1 }, { sin(pi * i) / (pi * i) }) }) * window; - // - // ^xReal.keep(size) - // } } HilbertHIm { *ar { | in, size=2048, mul=1.0, add=0.0 | - var i, kernel_i, image; - - i = HilbertHIm.calcCoeffs(size); - kernel_i = LocalBuf.new(size, 1).set(i); - - ^Convolution2.ar(in, kernel_i, framesize: size, mul: mul, add: add); + ^Convolution2.ar( + in, + LocalBuf.new(size, 1).set( + Signal.kaiserWindow(size, a: 1) * Signal.hilbert(size).imag + ), + framesize: size, + mul: mul, + add: add + ) } - // calculate imag coefficients via (1-cos(t)) / t + /* To be deprecated */ *calcCoeffs { |size| - var half_win, window, xImag; - - half_win = size/2; - window = Signal.hanningWindow(size+1); - - // imaginary response - xImag = Array.series(size+1, half_win.neg, 1); - xImag = xImag.collect({|i| (i == 0).if({ 0 }, { 1 - cos(pi * i) / (pi * i) }) }) * window; - ^xImag.keep(size); + "HilbertHIm *calcCoeffs to be deprecated. Use SignalBox Quark: Signal *hilbert.imag".warn; + ^(Signal.kaiserWindow(size, a: 1) * Signal.hilbert(size).imag).as(Array) } } @@ -540,4 +518,3 @@ HilbertPDNIm { ^((hilbertSin * mul) + add) } } - diff --git a/HelpSource/Classes/HilbertH.schelp b/HelpSource/Classes/HilbertH.schelp index 25c1a90..ff334c6 100644 --- a/HelpSource/Classes/HilbertH.schelp +++ b/HelpSource/Classes/HilbertH.schelp @@ -34,6 +34,10 @@ This value will be added to the output. returns:: An array of channels: code::[real, imag]:: +NOTE::The kernel used for emphasis::Hartley Phasing:: filtering is windowed with the link::Classes/Signal#*kaiserWindow::, where emphasis::alpha:: is set to 1.:: + + + METHOD:: arRotate Rotate footnote::decrement:: the phase of the input. @@ -139,6 +143,7 @@ returns:: emphasis::Instantaneous phase::, in radians. + METHOD:: calcRealCoeffs Generate real coefficients. @@ -147,6 +152,15 @@ ARGUMENT:: size The size of the kernel used for emphasis::Hartley Phasing:: filtering. +DISCUSSION:: + +WARNING::To be deprecated! Use link::Classes/Signal#*hilbert#Signal *hilbert.real:: instead.:: + +code:: +Signal.hilbert(1000).real.plot("Hilbert Real Coefficients") +:: + + METHOD:: calcImagCoeffs Generate imaginary coefficients. @@ -155,6 +169,17 @@ ARGUMENT:: size The size of the kernel used for emphasis::Hartley Phasing:: filtering. +DISCUSSION:: + +WARNING::To be deprecated! Use link::Classes/Signal#*hilbert#Signal *hilbert.imag:: instead.:: + +code:: +( +var size = 1000; +(Signal.kaiserWindow(size, a: 1) * Signal.hilbert(size).imag).plot("Hilbert Imaginary Coefficients") +) +:: + SECTION:: Frequency response @@ -585,147 +610,3 @@ freq = dur.reciprocal; ) ) :: - -SUBSECTION:: calcRealCoeffs - -code:: -/* - -FFT analysis functions - -NOTE: FFT returns linear frequency - -*/ -( -~calcMag = { arg kernel; - - var fftResponse, fftMag; - - // FFT analysis here! - fftResponse = fft( - kernel.as(Signal), - Signal.newClear(kernel.size), - Signal.fftCosTable(kernel.size) - ); - - // find (& trim magnitude) - fftMag = fftResponse.magnitude; - fftMag = fftMag.copyFromStart((kernel.size/2).asInteger); - - fftMag; -}; -) - - -/* - TEST Hartley : *calcRealCoeffs - - coefficients -*/ - -( -var size; -var kernel; -var plotDbMin, plotDbMax, plotDegMin, plotDegMax; - -// kernel size -size = 2048; - -// plot params -plotDbMin = -60.0; -plotDbMax = 6.0; -plotDegMin = 0.0; -plotDegMax = 180.0; - - -// calculate coefficients -kernel = HilbertH.calcRealCoeffs(size); - -// plot coefficients -kernel.plot( - name: "Real Coefficients", - minval: -1, - maxval: 1 -); - -// plot magnitude -~calcMag.value(kernel).ampdb.plot( - name: "Real Magnitude Response", - minval: plotDbMin, - maxval: plotDbMax -); - -) -:: - -SUBSECTION:: calcImagCoeffs - -code:: -/* - -FFT analysis functions - -NOTE: FFT returns linear frequency - -*/ -( -~calcMag = { arg kernel; - - var fftResponse, fftMag; - - // FFT analysis here! - fftResponse = fft( - kernel.as(Signal), - Signal.newClear(kernel.size), - Signal.fftCosTable(kernel.size) - ); - - // find (& trim magnitude) - fftMag = fftResponse.magnitude; - fftMag = fftMag.copyFromStart((kernel.size/2).asInteger); - - fftMag; -}; -) - - -/* - TEST Hartley : *calcImagCoeffs - - coefficients -*/ - -( -var size; -var kernel; -var plotDbMin, plotDbMax, plotDegMin, plotDegMax; - -// kernel size -size = 2048; - -// plot params -plotDbMin = -60.0; -plotDbMax = 6.0; -plotDegMin = 0.0; -plotDegMax = 180.0; - - -// calculate coefficients -kernel = HilbertH.calcImagCoeffs(size); - -// plot coefficients -kernel.plot( - name: "Imaginary Coefficients", - minval: -1, - maxval: 1 -); - -// plot magnitude -~calcMag.value(kernel).ampdb.plot( - name: "Imaginary Magnitude Response", - minval: plotDbMin, - maxval: plotDbMax -); - -) -:: diff --git a/HelpSource/Classes/HilbertHIm.schelp b/HelpSource/Classes/HilbertHIm.schelp index 0058adb..294b25c 100644 --- a/HelpSource/Classes/HilbertHIm.schelp +++ b/HelpSource/Classes/HilbertHIm.schelp @@ -33,6 +33,9 @@ This value will be added to the output. returns:: The imaginary part of the Hilbert Transform. +NOTE::The kernel used for emphasis::Hartley Phasing:: filtering is windowed with the link::Classes/Signal#*kaiserWindow::, where emphasis::alpha:: is set to 1.:: + + METHOD:: calcCoeffs Generate imaginary coefficients. @@ -41,6 +44,17 @@ ARGUMENT:: size The size of the kernel used for emphasis::Hartley Phasing:: filtering. +DISCUSSION:: + +WARNING::To be deprecated! Use link::Classes/Signal#*hilbert#Signal *hilbert.imag:: instead.:: + +code:: +( +var size = 1000; +(Signal.kaiserWindow(size, a: 1) * Signal.hilbert(size).imag).plot("Hilbert Imaginary Coefficients") +) +:: + @@ -174,73 +188,3 @@ freq = dur.reciprocal; ); ) :: - -SUBSECTION:: caclCoeffs - -code:: -/* - -FFT analysis functions - -NOTE: FFT returns linear frequency - -*/ -( -~calcMag = { arg kernel; - - var fftResponse, fftMag; - - // FFT analysis here! - fftResponse = fft( - kernel.as(Signal), - Signal.newClear(kernel.size), - Signal.fftCosTable(kernel.size) - ); - - // find (& trim magnitude) - fftMag = fftResponse.magnitude; - fftMag = fftMag.copyFromStart((kernel.size/2).asInteger); - - fftMag; -}; -) - - -/* - TEST Hartley : *calcCoeffs - - coefficients -*/ - -( -var size; -var kernel; -var plotDbMin, plotDbMax; - -// kernel size -size = 2048; - -// plot params -plotDbMin = -60.0; -plotDbMax = 6.0; - - -// calculate coefficients -kernel = HilbertHIm.calcCoeffs(size); - -// plot coefficients -kernel.plot( - name: "Imaginary Coefficients", - minval: -1, - maxval: 1 -); - -// plot magnitude -~calcMag.value(kernel).ampdb.plot( - name: "Imaginary Magnitude Response", - minval: plotDbMin, - maxval: plotDbMax -); - -) -:: diff --git a/HelpSource/Classes/HilbertHRe.schelp b/HelpSource/Classes/HilbertHRe.schelp index 2153b29..f4f24b7 100644 --- a/HelpSource/Classes/HilbertHRe.schelp +++ b/HelpSource/Classes/HilbertHRe.schelp @@ -63,7 +63,13 @@ ARGUMENT:: size The size of the kernel used for emphasis::Hartley Phasing:: filtering. +DISCUSSION:: +WARNING::To be deprecated! Use link::Classes/Signal#*hilbert#Signal *hilbert.real:: instead.:: + +code:: +Signal.hilbert(1000).real.plot("Hilbert Real Coefficients") +:: SECTION:: Frequency response @@ -320,73 +326,3 @@ freq = dur.reciprocal; ); ) :: - -SUBSECTION:: caclCoeffs - -code:: -/* - -FFT analysis functions - -NOTE: FFT returns linear frequency - -*/ -( -~calcMag = { arg kernel; - - var fftResponse, fftMag; - - // FFT analysis here! - fftResponse = fft( - kernel.as(Signal), - Signal.newClear(kernel.size), - Signal.fftCosTable(kernel.size) - ); - - // find (& trim magnitude) - fftMag = fftResponse.magnitude; - fftMag = fftMag.copyFromStart((kernel.size/2).asInteger); - - fftMag; -}; -) - - -/* - TEST Hartley : *calcCoeffs - - coefficients -*/ - -( -var size; -var kernel; -var plotDbMin, plotDbMax; - -// kernel size -size = 2048; - -// plot params -plotDbMin = -60.0; -plotDbMax = 6.0; - - -// calculate coefficients -kernel = HilbertHRe.calcCoeffs(size); - -// plot coefficients -kernel.plot( - name: "Real Coefficients", - minval: -1, - maxval: 1 -); - -// plot magnitude -~calcMag.value(kernel).ampdb.plot( - name: "Real Magnitude Response", - minval: plotDbMin, - maxval: plotDbMax -); - -) -::