31template <
typename FloatType>
32typename FIR::Coefficients<FloatType>::Ptr
34 double sampleRate,
size_t order,
39 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
43 auto*
c =
result->getRawCoefficients();
44 auto normalisedFrequency = frequency / sampleRate;
46 for (
size_t i = 0;
i <= order; ++
i)
50 c[
i] =
static_cast<FloatType
> (normalisedFrequency * 2);
55 c[
i] =
static_cast<FloatType
> (std::sin (2.0 * indice * normalisedFrequency) / indice);
65template <
typename FloatType>
68 FloatType normalisedTransitionWidth,
69 FloatType amplitudedB)
72 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
73 jassert (normalisedTransitionWidth > 0 && normalisedTransitionWidth <= 0.5);
74 jassert (amplitudedB >= -100 && amplitudedB <= 0);
78 if (amplitudedB < -50)
79 beta =
static_cast<FloatType
> (0.1102 * (-amplitudedB - 8.7));
80 else if (amplitudedB <= -21)
81 beta =
static_cast<FloatType
> (0.5842 * std::pow (-amplitudedB - 21, 0.4) + 0.07886 * (-amplitudedB - 21));
93template <
typename FloatType>
96 FloatType normalisedTransitionWidth, FloatType spline)
99 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
100 jassert (normalisedTransitionWidth > 0 && normalisedTransitionWidth <= 0.5);
101 jassert (spline >= 1.0 && spline <= 4.0);
103 auto normalisedFrequency = frequency /
static_cast<FloatType
> (sampleRate);
106 auto*
c =
result->getRawCoefficients();
108 for (
size_t i = 0;
i <= order; ++
i)
110 if (
i == order / 2 && order % 2 == 0)
112 c[
i] =
static_cast<FloatType
> (2 * normalisedFrequency);
118 c[
i] =
static_cast<FloatType
> (std::sin (2 * indice * normalisedFrequency)
119 / indice * std::pow (std::sin (indice2) / indice2, spline));
126template <
typename FloatType>
129 double sampleRate,
size_t order,
130 FloatType normalisedTransitionWidth,
131 FloatType stopBandWeight)
134 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
135 jassert (normalisedTransitionWidth > 0 && normalisedTransitionWidth <= 0.5);
136 jassert (stopBandWeight >= 1.0 && stopBandWeight <= 100.0);
138 auto normalisedFrequency =
static_cast<double> (frequency) / sampleRate;
146 auto*
c =
result->getRawCoefficients();
151 auto M = (
N - 1) / 2;
162 for (
size_t i = 0;
i <=
M; ++
i)
163 b (
i, 0) = factorp *
sinc (factorp * (
double)
i);
165 q (0, 0) = factorp + stopBandWeight * (1.0 - factors);
167 for (
size_t i = 1;
i <= 2 *
M; ++
i)
168 q (
i, 0) = factorp *
sinc (factorp * (
double)
i) - stopBandWeight * factors *
sinc (factors * (
double)
i);
177 c[
M] =
static_cast<FloatType
> (
b (0, 0));
179 for (
size_t i = 1;
i <=
M; ++
i)
181 c[
M -
i] =
static_cast<FloatType
> (
b (
i, 0) * 0.5);
182 c[
M +
i] =
static_cast<FloatType
> (
b (
i, 0) * 0.5);
200 for (
size_t i = 0;
i <
M; ++
i)
201 b (
i, 0) = factorp *
sinc (factorp * ((
double)
i + 0.5));
203 for (
size_t i = 0;
i < 2 *
M; ++
i)
205 qp (
i, 0) = 0.25 * factorp *
sinc (factorp * (
double)
i);
206 qs (
i, 0) = -0.25 * stopBandWeight * factors *
sinc (factors * (
double)
i);
215 Id *= (0.25 * stopBandWeight);
226 for (
size_t i = 0;
i <
M; ++
i)
228 c[
M -
i - 1] =
static_cast<FloatType
> (
b (
i, 0) * 0.25);
229 c[
M +
i] =
static_cast<FloatType
> (
b (
i, 0) * 0.25);
236template <
typename FloatType>
239 FloatType amplitudedB)
241 jassert (normalisedTransitionWidth > 0 && normalisedTransitionWidth <= 0.5);
242 jassert (amplitudedB >= -300 && amplitudedB <= -10);
246 auto n =
roundToInt (std::ceil ((amplitudedB - 18.18840664 * wpT + 33.64775300) / (18.54155181 * wpT - 29.13196871)));
247 auto kp = (
n * wpT - 1.57111377 *
n + 0.00665857) / (-1.01927560 *
n + 0.37221484);
248 auto A = (0.01525753 *
n + 0.03682344 + 9.24760314 / (double)
n) * kp + 1.01701407 + 0.73512298 / (
double)
n;
249 auto B = (0.00233667 *
n - 1.35418408 + 5.75145813 / (double)
n) * kp + 1.02999650 - 0.72759508 / (
double)
n;
254 auto diff = (hn.size() - hnm.size()) / 2;
264 for (
int i = 0;
i < hn.size(); ++
i)
265 hh.setUnchecked (
i,
A *
hh[
i] + B * hnm[
i]);
268 auto*
c =
result->getRawCoefficients();
270 for (
int i = 0;
i <
hh.size(); ++
i)
271 c[
i] = (
float)
hh[
i];
276 return 2.0 *
result->getMagnitudeForFrequency (0.5, 1.0);
280 if (std::abs (w01) > 1.0)
281 return 2.0 *
result->getMagnitudeForFrequency (0.5, 1.0);
283 auto om01 = std::acos (-w01);
287 for (
int i = 0;
i <
hh.size(); ++
i)
288 c[
i] =
static_cast<FloatType
> ((
A * hn[
i] + B * hnm[
i]) / NN);
290 c[2 *
n + 1] =
static_cast<FloatType
> (0.5);
295template <
typename FloatType>
307 alpha.
setUnchecked (2 *
n - 4, -(4 *
n + 1 + (
n - 1) * (2 *
n - 1) * kp * kp) / (2.0 *
n) * alpha[2 *
n - 2]
308 - (2 *
n + 1) * ((
n + 1) * kp * kp + 1) / (2.0 *
n) * alpha[2 *
n]);
310 for (
int k =
n;
k >= 3; --
k)
312 auto c1 = (3 * (
n*(
n + 2) -
k * (
k - 2)) + 2 *
k - 3 + 2 * (
k - 2)*(2 *
k - 3) * kp * kp) * alpha[2 *
k - 4];
313 auto c2 = (3 * (
n*(
n + 2) - (
k - 1) * (
k + 1)) + 2 * (2 *
k - 1) + 2 *
k*(2 *
k - 1) * kp * kp) * alpha[2 *
k - 2];
314 auto c3 = (
n * (
n + 2) - (
k - 1) * (
k + 1)) * alpha[2 *
k];
315 auto c4 = (
n * (
n + 2) - (
k - 3) * (
k - 1));
323 for (
int k = 0;
k <=
n; ++
k)
327 hn.
resize (2 *
n + 1 + 2 *
n + 1 + 1);
329 for (
int k = 0;
k <=
n; ++
k)
338template <
typename FloatType>
341 FloatType normalisedTransitionWidth,
342 FloatType passbandAmplitudedB,
343 FloatType stopbandAmplitudedB)
346 passbandAmplitudedB, stopbandAmplitudedB);
349template <
typename FloatType>
352 FloatType normalisedTransitionWidth,
353 FloatType passbandAmplitudedB,
354 FloatType stopbandAmplitudedB)
357 passbandAmplitudedB, stopbandAmplitudedB);
360template <
typename FloatType>
363 FloatType normalisedTransitionWidth,
364 FloatType passbandAmplitudedB,
365 FloatType stopbandAmplitudedB)
368 passbandAmplitudedB, stopbandAmplitudedB);
371template <
typename FloatType>
374 FloatType normalisedTransitionWidth,
375 FloatType passbandAmplitudedB,
376 FloatType stopbandAmplitudedB)
379 passbandAmplitudedB, stopbandAmplitudedB);
382template <
typename FloatType>
385 FloatType normalisedTransitionWidth,
386 FloatType passbandAmplitudedB,
387 FloatType stopbandAmplitudedB)
390 jassert (0 < frequency && frequency <= sampleRate * 0.5);
391 jassert (0 < normalisedTransitionWidth && normalisedTransitionWidth <= 0.5);
392 jassert (-20 < passbandAmplitudedB && passbandAmplitudedB < 0);
393 jassert (-300 < stopbandAmplitudedB && stopbandAmplitudedB < -20);
395 auto normalisedFrequency = frequency / sampleRate;
397 auto fp = normalisedFrequency - normalisedTransitionWidth / 2;
398 jassert (0.0 < fp && fp < 0.5);
400 auto fs = normalisedFrequency + normalisedTransitionWidth / 2;
401 jassert (0.0 < fs && fs < 0.5);
403 double Ap = passbandAmplitudedB;
404 double As = stopbandAmplitudedB;
407 auto epsp = std::sqrt (1.0 / (Gp * Gp) - 1.0);
408 auto epss = std::sqrt (1.0 / (Gs * Gs) - 1.0);
414 auto k = omegap / omegas;
415 auto k1 = epsp / epss;
421 N =
roundToInt (std::ceil (std::log (1.0 / k1) / std::log (1.0 /
k)));
425 N =
roundToInt (std::ceil (std::acosh (1.0 / k1) / std::acosh (1.0 /
k)));
429 double K, Kp, K1, K1p;
434 N =
roundToInt (std::ceil ((K1p * K) / (K1 * Kp)));
438 const int L = (
N -
r) / 2;
439 const double H0 = (
type == 1 ||
type == 3) ? std::pow (Gp, 1.0 -
r) : 1.0;
447 pa.
add (-omegap * std::pow (epsp, -1.0 / (
double)
N));
449 for (
int i = 1;
i <= L; ++
i)
451 auto ui = (2 *
i - 1.0) / (
double)
N;
452 pa.
add (omegap * std::pow (epsp, -1.0 / (
double)
N) *
j * exp (
ui * halfPi *
j));
457 auto v0 = std::asinh (1.0 / epsp) / (
N * halfPi);
460 pa.
add (-omegap * std::sinh (v0 * halfPi));
462 for (
int i = 1;
i <= L; ++
i)
464 auto ui = (2 *
i - 1.0) / (
double)
N;
465 pa.
add (omegap *
j * std::cos ((
ui -
j * v0) * halfPi));
470 auto v0 = std::asinh (epss) / (
N * halfPi);
473 pa.
add(-1.0 / (
k / omegap * std::sinh (v0 * halfPi)));
475 for (
int i = 1;
i <= L; ++
i)
477 auto ui = (2 *
i - 1.0) / (
double)
N;
479 pa.
add (1.0 / (
k / omegap *
j * std::cos ((
ui -
j * v0) * halfPi)));
480 za.
add (1.0 / (
k / omegap *
j * std::cos (
ui * halfPi)));
490 for (
int i = 1;
i <= L; ++
i)
492 auto ui = (2 *
i - 1.0) / (
double)
N;
496 za.
add (omegap *
j / (
k * zetai));
504 p.add ((1.0 + pa[0]) / (1.0 - pa[0]));
505 g.add (0.5 * (1.0 -
p[0]));
508 for (
int i = 0;
i < L; ++
i)
510 p.add ((1.0 + pa[
i +
r]) / (1.0 - pa[
i +
r]));
511 z.add (za.
size() == 0 ? -1.0 : (1.0 + za[
i]) / (1.0 - za[
i]));
512 g.add ((1.0 -
p[
i +
r]) / (1.0 -
z[
i]));
519 auto b0 =
static_cast<FloatType
> (H0 * std::real (
g[0]));
521 auto a1 =
static_cast<FloatType
> (-std::real (
p[0]));
526 for (
int i = 0;
i < L; ++
i)
528 auto gain = std::pow (std::abs (
g[
i +
r]), 2.0);
530 auto b0 =
static_cast<FloatType
> (gain);
531 auto b1 =
static_cast<FloatType
> (std::real (-
z[
i] - std::conj (
z[
i])) * gain);
532 auto b2 =
static_cast<FloatType
> (std::real (
z[
i] * std::conj (
z[
i])) * gain);
534 auto a1 =
static_cast<FloatType
> (std::real (-
p[
i+
r] - std::conj (
p[
i +
r])));
535 auto a2 =
static_cast<FloatType
> (std::real (
p[
i+
r] * std::conj (
p[
i +
r])));
540 return cascadedCoefficients;
543template <
typename FloatType>
546 double sampleRate,
int order)
549 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
558 for (
int i = 0;
i < order / 2; ++
i)
562 static_cast<FloatType
> (Q)));
567 for (
int i = 0;
i < order / 2; ++
i)
571 static_cast<FloatType
> (Q)));
578template <
typename FloatType>
581 double sampleRate,
int order)
584 jassert (frequency > 0 && frequency <= sampleRate * 0.5);
593 for (
int i = 0;
i < order / 2; ++
i)
597 static_cast<FloatType
> (Q)));
602 for (
int i = 0;
i < order / 2; ++
i)
606 static_cast<FloatType
> (Q)));
613template <
typename FloatType>
616 FloatType stopbandAmplitudedB)
618 jassert (normalisedTransitionWidth > 0 && normalisedTransitionWidth <= 0.5);
619 jassert (stopbandAmplitudedB > -300 && stopbandAmplitudedB < -10);
625 auto kp = std::sqrt (1.0 -
k *
k);
626 auto e = (1 - std::sqrt (kp)) / (1 + std::sqrt (kp)) * 0.5;
627 auto q =
e + 2 * std::pow (
e, 5.0) + 15 * std::pow (
e, 9.0) + 150 * std::pow (
e, 13.0);
629 auto k1 = ds * ds / (1 - ds * ds);
630 int n =
roundToInt (std::ceil (std::log (k1 * k1 / 16) / std::log (
q)));
638 auto q1 = std::pow (
q, (
double)
n);
639 k1 = 4 * std::sqrt (q1);
641 const int N = (
n - 1) / 2;
644 for (
int i = 1;
i <=
N; ++
i)
650 while (std::abs (delta) > 1
e-100)
652 delta = std::pow (-1,
m) * std::pow (
q,
m * (
m + 1))
658 num *= 2 * std::pow (
q, 0.25);
664 while (std::abs (delta) > 1
e-100)
666 delta = std::pow (-1,
m) * std::pow (
q,
m *
m)
675 auto api = std::sqrt ((1 - wi * wi *
k) * (1 - wi * wi /
k)) / (1 + wi * wi);
677 ai.
add ((1 - api) / (1 + api));
682 for (
int i = 0;
i <
N;
i += 2)
684 0, 1, 1, 0,
static_cast<FloatType
> (ai[
i])));
688 for (
int i = 1;
i <
N;
i += 2)
690 0, 1, 1, 0,
static_cast<FloatType
> (ai[
i])));
class MasterUI * ui
Definition Connection.cpp:39
#define sinc(x)
Definition analyzer.cpp:35
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Array.h:56
void setUnchecked(int indexToChange, ParameterType newValue)
Definition juce_Array.h:568
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Definition juce_Array.h:583
int size() const noexcept
Definition juce_Array.h:215
void add(const ElementType &newElement)
Definition juce_Array.h:418
void resize(int targetNumItems)
Definition juce_Array.h:670
static Type decibelsToGain(Type decibels, Type minusInfinityDb=Type(defaultMinusInfinitydB))
Definition juce_Decibels.h:42
Definition juce_ReferenceCountedArray.h:51
ObjectClass * add(ObjectClass *newObject)
Definition juce_ReferenceCountedArray.h:354
Definition juce_Matrix.h:41
static Matrix hankel(const Matrix &vector, size_t size, size_t offset=0)
Definition juce_Matrix.cpp:61
static Matrix identity(size_t size)
Definition juce_Matrix.cpp:32
static Matrix toeplitz(const Matrix &vector, size_t size)
Definition juce_Matrix.cpp:43
Definition juce_Windowing.h:43
@ kaiser
Definition juce_Windowing.h:56
void multiplyWithWindowingTable(FloatType *samples, size_t size) noexcept
Definition juce_Windowing.cpp:169
* e
Definition inflate.c:1404
unsigned z
Definition inflate.c:1589
unsigned * m
Definition inflate.c:1559
register unsigned k
Definition inflate.c:946
register unsigned j
Definition inflate.c:1576
int g
Definition inflate.c:1573
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
static void c4(register WDL_FFT_COMPLEX *a)
Definition fft.c:283
#define A(x)
Definition lice_arc.cpp:13
Definition juce_AudioBlock.h:29
std::complex< Type > Complex
Definition juce_dsp.h:194
Definition carla_juce.cpp:31
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
#define N
Definition nseel-cfunc.c:36
#define M
Definition nseel-cfunc.c:37
static bool diff(const std::string fn1, const std::string fn2)
Definition playertest.cpp:161
static constexpr FloatType halfPi
Definition juce_MathsFunctions.h:388
static constexpr FloatType twoPi
Definition juce_MathsFunctions.h:385
static constexpr FloatType pi
Definition juce_MathsFunctions.h:382
Definition juce_FIRFilter.h:219
ReferenceCountedObjectPtr< Coefficients > Ptr
Definition juce_FIRFilter.h:238
Definition juce_FilterDesign.h:259
Array< double > alpha
Definition juce_FilterDesign.h:261
ReferenceCountedArray< IIRCoefficients > directPath
Definition juce_FilterDesign.h:260
ReferenceCountedArray< IIRCoefficients > delayedPath
Definition juce_FilterDesign.h:260
Definition juce_FilterDesign.h:42
static ReferenceCountedArray< IIRCoefficients > designIIRLowpassHighOrderButterworthMethod(FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:340
static FIRCoefficientsPtr designFIRLowpassLeastSquaresMethod(FloatType frequency, double sampleRate, size_t order, FloatType normalisedTransitionWidth, FloatType stopBandWeight)
Definition juce_FilterDesign.cpp:128
static FIRCoefficientsPtr designFIRLowpassKaiserMethod(FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType amplitudedB)
Definition juce_FilterDesign.cpp:67
typename WindowingFunction< FloatType >::WindowingMethod WindowingMethod
Definition juce_FilterDesign.h:46
static Array< double > getPartialImpulseResponseHn(int n, double kp)
Definition juce_FilterDesign.cpp:296
static IIRPolyphaseAllpassStructure designIIRLowpassHalfBandPolyphaseAllpassMethod(FloatType normalisedTransitionWidth, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:615
static ReferenceCountedArray< IIRCoefficients > designIIRLowpassHighOrderChebyshev1Method(FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:351
static ReferenceCountedArray< IIRCoefficients > designIIRLowpassHighOrderGeneralMethod(int type, FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:384
static ReferenceCountedArray< IIRCoefficients > designIIRHighpassHighOrderButterworthMethod(FloatType frequency, double sampleRate, int order)
Definition juce_FilterDesign.cpp:580
static FIRCoefficientsPtr designFIRLowpassTransitionMethod(FloatType frequency, double sampleRate, size_t order, FloatType normalisedTransitionWidth, FloatType spline)
Definition juce_FilterDesign.cpp:95
static ReferenceCountedArray< IIRCoefficients > designIIRLowpassHighOrderChebyshev2Method(FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:362
static ReferenceCountedArray< IIRCoefficients > designIIRLowpassHighOrderEllipticMethod(FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
Definition juce_FilterDesign.cpp:373
static FIRCoefficientsPtr designFIRLowpassHalfBandEquirippleMethod(FloatType normalisedTransitionWidth, FloatType amplitudedB)
Definition juce_FilterDesign.cpp:238
static FIRCoefficientsPtr designFIRLowpassWindowMethod(FloatType frequency, double sampleRate, size_t order, WindowingMethod type, FloatType beta=static_cast< FloatType >(2))
Definition juce_FilterDesign.cpp:33
Definition juce_IIRFilter.h:129
static Ptr makeFirstOrderHighPass(double sampleRate, NumericType frequency)
Definition juce_IIRFilter.cpp:316
static Ptr makeHighPass(double sampleRate, NumericType frequency)
Definition juce_IIRFilter.cpp:345
static Ptr makeLowPass(double sampleRate, NumericType frequency)
Definition juce_IIRFilter.cpp:330
static Ptr makeFirstOrderLowPass(double sampleRate, NumericType frequency)
Definition juce_IIRFilter.cpp:309
static Complex< double > sne(Complex< double > u, double k) noexcept
Definition juce_SpecialFunctions.cpp:97
static Complex< double > cde(Complex< double > u, double k) noexcept
Definition juce_SpecialFunctions.cpp:74
static Complex< double > asne(Complex< double > w, double k) noexcept
Definition juce_SpecialFunctions.cpp:120
static void ellipticIntegralK(double k, double &K, double &Kp) noexcept
Definition juce_SpecialFunctions.cpp:51
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
int r
Definition crypt.c:458
uch hh[RAND_HEAD_LEN]
Definition crypt.c:595
register uch * q
Definition fileio.c:817
int result
Definition process.c:1455