Simulink Spectrum Analyzer shows noise floor below max SQNR

2 次查看(过去 30 天)
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?

采纳的回答

Kiran Kintali
Kiran Kintali 2020-10-15
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 个评论
Simon Burkhardt
Simon Burkhardt 2020-10-16
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 ¯\_(ツ)_/¯

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Spectral Analysis 的更多信息

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by