This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 用于计算 SNR、SNDR、THD SFDR 的 MATLAB 代码

Guru**** 2421050 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/607074/matlab-code-to-calculate-snr-sndr-thd-sfdr

大家好、

我想使用  Matlab 仿真精密和高速系列 ADC 的 SFDR、SNR、THD 和 SINAD 参数。  我需要 MATLAB 代码来计算它。

 我很感谢你们的帮助;)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Sina Kamar!

    从 FFT 计算 SNR、THD、SFDR 和 SINAD 相对简单。 我没有 Matlab 代码用于此目的、但下面是假设您从 Matlab 生成的复杂 FFT 开始的过程。 此外、我假设您的输入频率与您的采样频率"彼此同相"、这将导致您的基波仅显示在 FFT 的一个区间中。

    1.对于 FFT 的每个二进制文件,取(实部和虚部平方和的平方和的平方根)/(2^(2 * NumberOfADCBits)以获得 Power Half-FFT。 停止循环、使 FFT 的最高 bin 为奈奎斯特 bin。 (使用类似于"0到 BinCount/2 -1"的内容。)
    2.将直流槽(元素0)设置为其余 FFT 元素的最小值、以将其卸下。

    SFDR:
    公式为 SFDR = 10 * log10 (FundamentalPower / MaxSpurPower)。
    MaxSpurPower 是 FFT 功率阵列中不是基波的最大功率。 (可能是数组中第二大元素。)

    SINAD:
    公式为 SINAD_Power =(FFT 阵列中所有功率的总和)- FundamentalPower。
    由于 FFT 中的疯狂 FFT 伪影发生在零单元和奈奎斯特单元附近、因此您可能需要从结果中减去这些伪影。 此外、当频率不能完全相干(这几乎总是如此)时、您可能还需要在基波任一侧的大约3个单元中减去功率。
    SINAD = 10 * log10 (FundamentalPower / SINAD_Power)

    THD:
    我们通常考虑基波的10个谐波。 (2倍的基波或二次谐波将是第一个考虑的谐波。 因此、考虑10次谐波意味着考虑2到11次谐波。)
    对于每个谐波、您需要知道它在中显示了什么容器。
    1. BinNumber =(HarmonicNumber * FundamentalBin) mod NumberOfTbins (这将查找折叠的容器数。)
    FoldCount = ConvertToInteger ((HarmonicNumber * FundamentalBin)/NumberOfTbins)
    3.如果 FoldCount 为偶数、则 HarmonicBin = BinNumber。
    如果 FoldCount 为奇数、则 HarmonicBin = NumberOfTbins - BinNumber。

    HARM 功率=所有(被考虑)谐波单元中功率的总和。
    THD = 10 * log10 (HAR_Power / FundamentalPower)

    SNR:
    Noise_Power = SINAD_Power - HAR_Power
    SNR = 10 * log10 (基本功率/噪声功率)

    您可以将其用作开发 Matlab 代码的指南。 希望这对您有所帮助!