|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
参考资料:
https://www.bilibili.com/video/B ... 7f8262a594bb22a901c
---
这里以sigma-deltaADC的输出码流为例,展示virtuoso数据导出到matlab做FFT分析的完整过程
首先选中你需要导出的波形
![[Pasted image 20250224101834.png]]
然后在工具栏找到这个选项
![[Pasted image 20250224101926.png]]
然后需要对数据做一些设置,clip是裁剪数据,下面的选项是滤掉一些数据,我的采样时钟是1M,所以我只需要每隔1u取一个点就好了,其他的点我是不需要的。
![[Pasted image 20250224102007.png]]
然后数据就可以导入到matlab里面进行分析了。
![[Pasted image 20250224102334.png]]
然后使用下面这一段代码就可以得到FFT的图
% 1. 读取CSV文件
filename = 'FFT_NOSYS.csv'; % 替换为你的CSV文件名
data = readmatrix(filename); % 读取CSV文件
time_series = data(:, 2); % 假设数据在第一列
% 2. 提取最后8192个数据点
num_samples = 8192; % 需要的样本数量
if length(time_series) >= num_samples
time_series = time_series(end - num_samples + 1:end); % 提取最后8192个数据
else
error('数据长度不足8192个样本,请检查数据文件。');
end
% 3. 对时间序列数据减去0.9
time_series = time_series - 0.9;
%%计算SNR
bw=2000; %信号带宽
Fs=1e6; %采样频率
Fin=7*Fs/N; %相干采样 ,要注意信号的频率在信号带宽内
w=hann_pv(N);%加窗
f=Fin/Fs;%归一化频率
fB=N*(bw/Fs); %输入信号的频点数
sdmout=zeros (1,N);
time_series=time_series';
[snr,ptot]=calcSNR(time_series(1:N),f,1,fB,w,N);
ENOB = (snr-1.76)/6.02
%% 绘图
figure(1);clf
semilogx(linspace(0,Fs/2,N/2),ptot(1:N/2),'r');
grid on;
title('PSD of ds modulator ')
xlabel('Frequency [Hz]');
ylabel('PSD [dB]');
axis([0 Fs/2 -150 0]);
%text(floor(Fs/128/2),-40,sprintf("ENOB=%4.1fbit",ENOB));
% 在图的左上角添加标注
annotation('textbox', [0.7, 0.8, 0.2, 0.1], 'String', sprintf('ENOB = %.1f bits\nSNR = %.1f dB', ENOB, snr), ...
'FitBoxToText', 'on', 'EdgeColor', 'none', 'FontSize', 10, 'BackgroundColor', 'w');
set(gcf, 'Position', [100, 100, 800, 600]); % 设置图形窗口的大小(左下角坐标和宽高)
|
|