Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • D dblclockfft
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3
    • Issues 3
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Dan Gisselquist
  • dblclockfft
  • Issues
  • #5
Closed
Open
Issue created Jun 26, 2020 by Ariel Kukulanski@akukulanski

unexpected output

Hello!

I run a testbench with random input data and found out that about half of the times the output doesn't match the expected result (dismissing some rounding error). In some runs the output data matches the expected result for the DFT while in some others the output data alternates samples in the form of "right-wrong-right-wrong-...".

If I calculate the difference between the output vs expected in the wrong samples, the abs() is always about 16384 (max value for 14 bits, or 15 if signed), which makes me think of an overflow somewhere.. but not sure really.

Here goes an horrible dump of the first values in a test example, where the complex numbers in the left are the output samples, and the ones in the right are the expected values:

d, r = ((-21120+44291j), (-21120+44291j)) (err = 0.0)
d, r = ((-77852-20660j), (-77855-37045j)) (err = 16385.00027464144)
d, r = ((-30079+14j), (-30078+14j)) (err = 1.0)
d, r = ((-33996-5932j), (-43099+7690j)) (err = 16383.634914145274)
d, r = ((29684-18098j), (29684-18097j)) (err = 1.0)
d, r = ((-21408-9626j), (-6272-15895j)) (err = 16382.883049085103)
d, r = ((31267+13250j), (31268+13250j)) (err = 1.0)
d, r = ((283+31702j), (-15786+28506j)) (err = 16383.747343022596)
d, r = ((10194-12038j), (10194-12039j)) (err = 1.0)
d, r = ((-6952-10386j), (4633+1200j)) (err = 16384.371242131936)
d, r = ((-27051+23808j), (-27052+23807j)) (err = 1.4142135623730951)
d, r = ((-5240-9459j), (-8436-25528j)) (err = 16383.747343022596)
d, r = ((-6422+174j), (-6422+174j)) (err = 0.0)
d, r = ((-656+28250j), (-6926+43386j)) (err = 16383.265730616713)
d, r = ((18130+40819j), (18130+40819j)) (err = 0.0)
d, r = ((-4588-12407j), (9036-21510j)) (err = 16385.297830677355)

Something that could also help is that if I write real inputs (with the lowest 16 bits corresponding to the imaginary component = 0) the algorithm works flawlessly.

I'm leaving the testcase here and also an example with the input/output data and waveforms: testcase.tar.gz

Let me know if I can help with more info or by checking something else! Thanks!

Assignee
Assign to
Time tracking