You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
6.9 KiB
Python
305 lines
6.9 KiB
Python
# Bug corrections for version 1.9
|
|
import cmsisdsp as dsp
|
|
import cmsisdsp.fixedpoint as f
|
|
import numpy as np
|
|
import math
|
|
import colorama
|
|
from colorama import init,Fore, Back, Style
|
|
from numpy.testing import assert_allclose
|
|
#import matplotlib.pyplot as plt
|
|
from scipy import signal
|
|
import scipy.signal.windows as win
|
|
|
|
init()
|
|
|
|
def printTitle(s):
|
|
print("\n" + Fore.GREEN + Style.BRIGHT + s + Style.RESET_ALL)
|
|
|
|
def printSubTitle(s):
|
|
print("\n" + Style.BRIGHT + s + Style.RESET_ALL)
|
|
|
|
def genwelch(n):
|
|
ik = 2*np.array(range(n)) / n
|
|
w = ik -1;
|
|
w = 1 - w**2
|
|
if len(w)!=n:
|
|
print("Error with window len in Welch")
|
|
exit(1)
|
|
return(w)
|
|
|
|
|
|
def genbartlett(n):
|
|
w = win.bartlett(n,sym=False)
|
|
return(w)
|
|
|
|
def genhamming(n):
|
|
w = win.hamming(n,sym=False)
|
|
return(w)
|
|
|
|
def genhanning(n):
|
|
w = win.hann(n,sym=False)
|
|
return(w)
|
|
|
|
def gennuttall3(n):
|
|
w = win.general_cosine(n,
|
|
[0.375, 0.5 , 0.125 ],sym=False)
|
|
return(w)
|
|
|
|
def gennuttall4(n):
|
|
w = win.general_cosine(n,
|
|
[0.3125, 0.46875,0.1875 , 0.03125],sym=False)
|
|
return(w)
|
|
|
|
def gennuttall3a(n):
|
|
w = win.general_cosine(n,
|
|
[0.40897, 0.5 ,0.09103],sym=False)
|
|
return(w)
|
|
|
|
def gennuttall3b(n):
|
|
w = win.general_cosine(n,
|
|
[0.4243801, 0.4973406 , 0.0782793 ],sym=False)
|
|
return(w)
|
|
|
|
def gennuttall4a(n):
|
|
w = win.general_cosine(n,
|
|
[0.338946, 0.481973,0.161054 , 0.018027 ],sym=False)
|
|
return(w)
|
|
|
|
def genblackman_harris_92db(n):
|
|
w = win.blackmanharris(n,sym=False)
|
|
return(w)
|
|
|
|
def gennuttall4b(n):
|
|
w = win.general_cosine(n,
|
|
[0.355768, 0.487396 ,
|
|
0.144232 , 0.012604 ],sym=False)
|
|
return(w)
|
|
|
|
def gennuttall4c(n):
|
|
w = win.nuttall(n,sym=False)
|
|
return(w)
|
|
|
|
def genhft90d(n):
|
|
w = win.general_cosine(n,
|
|
[1 ,1.942604 ,
|
|
1.340318 , 0.440811 , 0.043097 ],sym=False)
|
|
return(w)
|
|
|
|
def genhft95(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.9383379 ,
|
|
1.3045202 ,0.4028270 ,0.0350665 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft116d(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.9575375 ,
|
|
1.4780705 ,0.6367431 ,
|
|
0.1228389 ,0.0066288 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft144d(n):
|
|
w = win.general_cosine(n,
|
|
[1 ,1.96760033 ,
|
|
1.57983607 , 0.81123644 ,
|
|
0.22583558 ,0.02773848 , 0.00090360 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft169d(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.97441843 ,
|
|
1.65409889 , 0.95788187 ,
|
|
0.33673420 , 0.06364622 ,
|
|
0.00521942 ,0.00010599 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft196d(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.979280420 ,
|
|
1.710288951 , 1.081629853 ,
|
|
0.448734314 , 0.112376628 ,
|
|
0.015122992 ,0.000871252 , 0.000011896 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft223d(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.98298997309,
|
|
1.75556083063 , 1.19037717712 ,
|
|
0.56155440797 , 0.17296769663 ,
|
|
0.03233247087 ,0.00324954578 ,
|
|
0.00013801040 ,0.00000132725 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
def genhft248d(n):
|
|
w = win.general_cosine(n,
|
|
[1, 1.985844164102 ,
|
|
1.791176438506 , 1.282075284005 ,
|
|
0.667777530266 , 0.240160796576 ,
|
|
0.056656381764 ,0.008134974479 ,
|
|
0.000624544650 ,0.000019808998 ,
|
|
0.000000132974 ]
|
|
,sym=False)
|
|
return(w)
|
|
|
|
printTitle("Regular windows")
|
|
printSubTitle("Welch")
|
|
ref = genwelch(128)
|
|
wf32 = dsp.arm_welch_f32(128)
|
|
assert_allclose(ref,wf32)
|
|
|
|
wf64 = dsp.arm_welch_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Bartlett")
|
|
ref = genbartlett(128)
|
|
wf32 = dsp.arm_bartlett_f32(128)
|
|
assert_allclose(ref,wf32)
|
|
|
|
wf64 = dsp.arm_bartlett_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Hamming")
|
|
ref = genhamming(128)
|
|
wf32 = dsp.arm_hamming_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hamming_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Hanning")
|
|
ref = genhanning(128)
|
|
wf32 = dsp.arm_hanning_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hanning_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall3")
|
|
ref = gennuttall3(128)
|
|
wf32 = dsp.arm_nuttall3_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall3_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall4")
|
|
ref = gennuttall4(128)
|
|
wf32 = dsp.arm_nuttall4_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall4_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall3a")
|
|
ref = gennuttall3a(128)
|
|
wf32 = dsp.arm_nuttall3a_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall3a_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall3b")
|
|
ref = gennuttall3b(128)
|
|
wf32 = dsp.arm_nuttall3b_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall3b_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall4a")
|
|
ref = gennuttall4a(128)
|
|
wf32 = dsp.arm_nuttall4a_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall4a_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Blackman Harris")
|
|
ref = genblackman_harris_92db(128)
|
|
wf32 = dsp.arm_blackman_harris_92db_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_blackman_harris_92db_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall4b")
|
|
ref = gennuttall4b(128)
|
|
wf32 = dsp.arm_nuttall4b_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall4b_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("Nuttall4c")
|
|
ref = gennuttall4c(128)
|
|
wf32 = dsp.arm_nuttall4c_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_nuttall4c_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printTitle("Flat-top windows")
|
|
|
|
printSubTitle("HFT90D")
|
|
ref = genhft90d(128)
|
|
wf32 = dsp.arm_hft90d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft90d_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT95")
|
|
ref = genhft95(128)
|
|
wf32 = dsp.arm_hft95_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft95_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT116D")
|
|
ref = genhft116d(128)
|
|
wf32 = dsp.arm_hft116d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft116d_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT144D")
|
|
ref = genhft144d(128)
|
|
wf32 = dsp.arm_hft144d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft144d_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT196D")
|
|
ref = genhft196d(128)
|
|
wf32 = dsp.arm_hft196d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft196d_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT223D")
|
|
ref = genhft223d(128)
|
|
wf32 = dsp.arm_hft223d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft223d_f64(128)
|
|
assert_allclose(ref,wf64)
|
|
|
|
printSubTitle("HFT248D")
|
|
ref = genhft248d(128)
|
|
wf32 = dsp.arm_hft248d_f32(128)
|
|
assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
|
|
|
|
wf64 = dsp.arm_hft248d_f64(128)
|
|
assert_allclose(ref,wf64,rtol=3e-15,atol=3e-15)
|
|
|