数字IC设计随笔之三(如何从fsdb波形中提取信号进行分析:python+matlab)

如何从fsdb波形中提取信号进行分析:python+matlab

在涉及ADC或DAC的芯片中,建立模拟电路的行为级模型进行仿真后,往往需要从fsdb波形文件中提取信号进行信号质量分析。

通过python执行命令将fsdb中的特定波形数据提取到report.txt文件中,再读取该文件至列表中,去除文件起始标志行,将文件中的有符号二进制数转换为10进制,以图形化的方式显示波形,既可以粗略查看仿真结果的正确性,又可以进行波形分析。

import os
import pandas as pd 
import numpy as np 
import matlab.engine
import bitvector

os.system("fsdbreport tb.fsdb -w 24 -s /tb/u1/adc_data_reg\[23:0\] -o report.txt")

f = open("report.txt","r")
lines = f.readlines()
f.close()
data = lines[2:-1]
bit_obj = bitvector.bitVector()
for i in range(len(data)):
    a = data[i].split()
    vbin = bit_obj.new_Bin(33,a[1])
    data[i] = vbin.to_Dec()
x = np.arange(len(data))
y = np.array(data)
eng = matlab.engine.start_matlab()
X = matlab.double(x.tolist())
Y = matlab.double(y.tolist())
h=eng.sig_analyze(X,Y)
os.system('pause')

上述脚本为处理Σ-ΔADC抽取滤波器输出信号的提取和显示,运行脚本后将会显示ADC转换码值,此时可以进一步调用MATLAB函数进行信噪比、有效位数等结果分析。
在这里插入图片描述
进行上述操作的核心是在python中调用MATLAB函数,为了方便调用,将需要执行的操作写成MATLAB函数,在该示例中为sig_analyze,其输入参数x,y用于显示波形,信号噪声失真比分析直接调用MATLAB函数sinad,最后输出有效位数。

安装用于 Python 的 MATLAB 引擎 API请参考:
https://ww2.mathworks.cn/help/matlab/matlab_external/install-the-matlab-engine-for-python.html