使用MATLAB快速完成对ADC信号质量的分析

目录

1 单音信号分析

2 复数信号分析


         在硬件调试初期时,通常需要对ADC采样的信号质量进行一些列分析,可以利用强大的数学工具MATLAB对信号质量进行分析,包括时域绘图、频域绘图、功率谱等。

1 单音信号分析

          通常在ADC测试时,会在ADC上输入一个单音信号,将采集回来的数据进行分析。

          使用VIVADO中的ILA将ADC数据采集下来,保存为xxxx.csv文件,保存时所有数据均设置为有符号数,以确保matlab在读取数据时不会报错。如果老版本的Vivado不支持将文件保存为xxx.csv只能保存为xxx.ila文件,这就需要在matlab中现运行解压命令,将.ila文件解压为.csv文件,命令如下:

unzip('C:/xxxx/xxxxx/xxxx.ila')

        如果ADC采样的数据不是有符号数,而是偏移二进制则需要使用如下明明进行转换:

yt = bin2dec(num2str(csvread(csv_file,srow,scol,[srow,scol,erow,ecol])));

下面给出完成代码:

%%%%%%%%%偏移二进制分析%%%%%%%%%
clc;
clear;
close all;
fclose('all');
format long g
%%unzip('C:/xxx/xxx/adc_data.ila')  %解压ILA文件 需要时打开
%% 设置CSV文件读取范围
srow = 2;       %起始行(行标从0开始);
scol = 3;       %起始列(列标从0开始);
erow = 16384;   %结束行(一般为采样深度);
ecol = 3;       %结束列;
%% 获取csv文件
[filename, pathname] = uigetfile('C:/Users/57803/Desktop/fft/waveform.csv','读取数据'); 
csv_file  = [pathname filename];

yt = bin2dec(num2str(csvread(csv_file,srow,scol,[srow,scol,erow,ecol])));
yt(yt>=2^13) = yt(yt>=2^13) - 2^14;  %偏移二进制转有符号数
figure(1)
subplot(2,1,1);
plot(yt);
title('时域');

yi = bin2dec(num2str(csvread(csv_file,srow,scol,[srow,scol,erow,ecol])));
yi(yi>=2^13) = yi(yi>=2^13) - 2^14;
subplot(2,1,2);
yi = mag2db(abs(fft(yi)));
yi = yi - 80 - 70 +4 -15;
plot(yi);
title('频域');

yc = bin2dec(num2str(csvread(csv_file,srow,scol,[srow,scol,erow,ecol])));
yc(yc>=2^13) = yc(yc>=2^13) - 2^14;
figure(2)
subplot(1,1,1);
psd(yc);
%%spectrum(yc);
title('功率谱');

%%%%%%%%%%%%%%%有符号数%%%%%%%%%%%%%%%%%%%%
clc;
clear;
close all;
fclose('all');
format long g
%%unzip('C:/xxx/xxx/adc_data.ila')  %解压ILA文件 需要时打开
%% 设置CSV文件读取范围
srow = 2;       %起始行(行标从0开始);
scol = 3;       %起始列(列标从0开始);
erow = 16384;   %结束行(一般为采样深度);
ecol = 3;       %结束列;
%% 获取csv文件
[filename, pathname] = uigetfile('C:/Users/57803/Desktop/fft/waveform.csv','读取数据'); 
csv_file  = [pathname filename];

yt = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
figure(1)
subplot(2,1,1);
plot(yt);
title('时域');

yi =csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
subplot(2,1,2);
yi = mag2db(abs(fft(yi)));
plot(yi);
title('频域');

yc = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);;
figure(2)
subplot(1,1,1);
psd(yc);
%%spectrum(yc);
title('功率谱');

2 复数信号分析

    有些时候需要对正交两路信号进行分析,两路信号构成一个复数代码如下:

%%%%%%%%%%%%%%%%%%%%%%复数信号%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
close all;
fclose('all');
format long g
%%unzip('C:/xxx/xxxx/adc_data.ila') %解压使用
%% 设置CSV文件读取范围
srow = 1;       %起始行(行标从0开始);
scol = 5;       %起始列(列标从0开始);
erow = 8192;   %结束行(一般为采样深度);
ecol = 5;       %结束列;

srow1 = 1;       %起始行(行标从0开始);
scol1 = 6;       %起始列(列标从0开始);
erow1 = 8192;    %结束行(一般为采样深度);
ecol1 = 6;       %结束列;
%% 获取csv文件
[filename, pathname] = uigetfile('C:/xxx/xxx/iladata7M.csv','读取数据'); 
csv_file  = [pathname filename];

yi = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
yq = csvread(csv_file,srow1,scol1,[srow1,scol1,erow1,ecol1]);
figure(1)
subplot(3,1,1);
plot(yi);
title('时域i');
figure(1)
subplot(3,1,2);
plot(yq);
title('时域q');

yi = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
yq = csvread(csv_file,srow1,scol1,[srow1,scol1,erow1,ecol1]);
yc = yi + yq*i;
subplot(3,1,3);
yc = mag2db(abs(fft(yc)));
yc = yc - 137;  %%幅度补偿
plot(yc);
title('频域');

yi = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
yq = csvread(csv_file,srow1,scol1,[srow1,scol1,erow1,ecol1]);
yc = yi + yq*i;
figure(2)
subplot(1,1,1);
psd(yc);
spectrum(yc);
title('功率谱');

 

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值