Compare commits

...

2 Commits

Author SHA1 Message Date
82e5b5f80a
clean derivation with summary table 2025-01-03 18:51:10 +01:00
59d13d46d1
progress on analytics 2025-01-01 16:45:38 +01:00

View File

@ -47,7 +47,19 @@ to transmit amplitude modulated symbols. As we will see the approach of using
generator functions will allow us to synthesize high-precision waveforms with generator functions will allow us to synthesize high-precision waveforms with
exact frequency characteristics with just a few predetermined coefficients. exact frequency characteristics with just a few predetermined coefficients.
## Initial Conditions At first glance, we can reason that many of the desirable properties that one would
like to see here are similar to that of window functions (e.g. Hanning or
Kaiser Windows)[^1]. This is because we are interested in both the time and
frequency properties of the generated sequence simultaneously. The key
difference here however is that we are constrained to polynomial dynamics.
As a result the text-book approach for approximating a sum of weighted cosines
may not be the best approach. Although taking a padé-approximant, using a
rational polynomial basis, may be a good choice in some cases. More generally
nesting or convolving our polynomial basis will result in higher oder
polynomal. In order to realize a transcendental response we would need to
revisit the feedback coefficient for each integrator.
## Determining Initial Conditions
There are a few ways to go about defining a polynomial \\(P(x)\\). Either in terms of There are a few ways to go about defining a polynomial \\(P(x)\\). Either in terms of
the roots or in terms of the characteristic equation. Both are useful, the roots or in terms of the characteristic equation. Both are useful,
@ -104,6 +116,7 @@ def mapping_coefficients(order: int) -> np.array:
# for each element calculate new coefficient # for each element calculate new coefficient
# Based on expanding d/dx * P(x) * (x+1) # Based on expanding d/dx * P(x) * (x+1)
coef[elem + 1] = (order - elem - 1) * (base[elem] + base[elem + 1]) coef[elem + 1] = (order - elem - 1) * (base[elem] + base[elem + 1])
# m_n will always be n!
coef[0] = base[0] * order coef[0] = base[0] * order
return coef return coef
@ -124,11 +137,55 @@ def initial_condition(self, poly_coef: np.array) -> np.array:
``` ```
It is worthwhile to point out that not all polynomial functions can be realized
with this method. While not all zeros in \\( P(x) \\) have to be real, we do
require the characteristic coefficients \\( a_n \\) and thereby \\( c_n \\) to
to be real numbers.
## Frequency Response ## Frequency Response
Here we will consider polynomials of even orders with real roots such Here we will consider a simplified scenario to exemplify the frequency \
characteristics for generated polynomials.
Specifically polynomials of even orders with real roots such
that we can decompose the polynomial \\(P(x)\\) as a product of several that we can decompose the polynomial \\(P(x)\\) as a product of several
elements in the form of \\( (x+p_1)(x+p_2) \\). We can show that the elements in the form of \\( (x+p_1)(x+p_2) \\). We can show that the
fourier-transform of of this element is in the form of \\( 16d^2 sinc(d ω)^4 \\) fourier-transform of of this element is in the form of \\( sinc(d ω)^2 \\)
where \\( d = (p_1 - p_2) \\). where \\( d = (p_1 - p_2)/2 \\) such that we can derive relations for the
polynomial \\( P(x) = d^2-x^2 \\) and scale them accordingly.
$$
\hat{P}(x) = \int^{d/2}_{d/2} (d^2-x^2) cos(k x) dx
\quad = \quad
\frac{8 \sin{ (d k) }}{k^3} - \frac{8 d \cos{ (d k ) }}{k^2}
$$
We can numerically solve for some of the filter properties of interest and
compare to other simple windows. There is little suprise in the table below
as the roll-off and rejection is closely related to the 3dB bandwidth.
Here we see that the frequency response of P(x) is somewhere inbetween a
rectangular window and that of the raise-cosine or Hann window.
| Property | 2nd Order Poly len(2d) | Rectangle len(2d) | Hann len(2d) |
|---------------|------------------------|-----------------------|-----------------------|
| DC Value | \\(\frac{2d^3}{3}\\) | \\(2d^2\\) | \\(2d^2\\) |
| 3db Bandwidth | \\(\sim 2.498/d\\) | \\(\sim 1.895/d\\) | \\(\sim 3.168/d\\) |
| 1st Null | \\(\sim 4.5/d\\) | \\(\frac{\pi}{d}\\) | \\(\frac{2\pi}{d}\\) |
| Roll Off | 40 dB / decade | 20 dB / decade | 60 dB / decade |
For completeness we also include the analytical expression for the Hann window
frourier transform.
$$
\hat{H}(x) = \int^{d/2}_{d/2} (1+cos(\frac{2\pi x}{d})) cos(k x) dx
\quad = \quad
\frac{2 \pi^2 sin(d k)}{k(d^2 k^2-\pi^2)}
$$
## References:
[^1]: A. Nuttall, ''Some windows with very good sidelobe behavior,'' IEEE
Trans. Acoust., Speech, Signal Process. , vol. 29, no. 1, pp. 84-91, February
1981 [Online]: http://dx.doi.org/10.1109/TASSP.1981.1163506.