Simulink Spectrum Analyzer shows noise floor below max SQNR

4 views (last 30 days)
I am using the HDL Coder Toolbox for Simulink to build a DDS (direct digital synthesizer).
I am using a converter Block (uintN_t) to convert the double value range {-1 ... 1} to uint16_t.
(add +1 offset, scale by 1/2 * 2^N-1)
Now I want to see the spectrum of the generated Signal with the spectrum analyzer, which gives me the following image:
The blue graph shows a noise floor >120dB below the carrier frequency.
This is wrong since I expect a maximum SQNR of: 1.76 + 6.02 * N = 98dB (for N = 16 bit).
If I export the uint16_t values to the workspace and analyze the datapoints with snr(x, fs, n) it outputs a correct value of 98dB.
Hence I suspect that the issue lies within the Spectrum Analyzer settings.
How do I set the Spectrum Analyzer correctly to show me the correct spectrum?

Accepted Answer

Kiran Kintali
Kiran Kintali on 15 Oct 2020
https://www.mathworks.com/help/dsp/ref/spectrumanalyzer.html
There are multiple settings that could affect the observed noise floor..
  1. The window being used.
  2. RBW (Resolution Bandwidth specified)
  3. Spectrum estimation method Welch vs Filter bank
  4. Exponential averaging with large forgetting factors and
  5. Short simulation times etc.,
If you can share a sample model we may be able to provide additional guidance.
kiran.kintali@mathworks.com
  1 Comment
Simon Burkhardt
Simon Burkhardt on 16 Oct 2020
Yes, the window settings were affecting the spectrum.
I checked the docs and the snr() function uses a Kaiser Window. If I set the Kaiser window (with parameter at 50dB) I get similar results for both the snr() and sfdr() function.
I still can't explain why the noise floor is affected since the window should affect the main lobe width. but ok, it works ¯\_(ツ)_/¯

Sign in to comment.

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!