使用MATLAB快速完成对ADC信号质量的分析
生活随笔
收集整理的這篇文章主要介紹了
使用MATLAB快速完成对ADC信号质量的分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
1 單音信號分析
2 復數(shù)信號分析
? ? ? ? ?在硬件調(diào)試初期時,通常需要對ADC采樣的信號質(zhì)量進行一些列分析,可以利用強大的數(shù)學工具MATLAB對信號質(zhì)量進行分析,包括時域繪圖、頻域繪圖、功率譜等。
1 單音信號分析
? ? ? ? ? 通常在ADC測試時,會在ADC上輸入一個單音信號,將采集回來的數(shù)據(jù)進行分析。
? ? ? ? ? 使用VIVADO中的ILA將ADC數(shù)據(jù)采集下來,保存為xxxx.csv文件,保存時所有數(shù)據(jù)均設(shè)置為有符號數(shù),以確保matlab在讀取數(shù)據(jù)時不會報錯。如果老版本的Vivado不支持將文件保存為xxx.csv只能保存為xxx.ila文件,這就需要在matlab中現(xiàn)運行解壓命令,將.ila文件解壓為.csv文件,命令如下:
unzip('C:/xxxx/xxxxx/xxxx.ila')? ? ? ? 如果ADC采樣的數(shù)據(jù)不是有符號數(shù),而是偏移二進制則需要使用如下明明進行轉(zhuǎn)換:
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文件 需要時打開 %% 設(shè)置CSV文件讀取范圍 srow = 2; %起始行(行標從0開始); scol = 3; %起始列(列標從0開始); erow = 16384; %結(jié)束行(一般為采樣深度); ecol = 3; %結(jié)束列; %% 獲取csv文件 [filename, pathname] = uigetfile('C:/Users/57803/Desktop/fft/waveform.csv','讀取數(shù)據(jù)'); 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; %偏移二進制轉(zhuǎn)有符號數(shù) 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('功率譜');%%%%%%%%%%%%%%%有符號數(shù)%%%%%%%%%%%%%%%%%%%% clc; clear; close all; fclose('all'); format long g %%unzip('C:/xxx/xxx/adc_data.ila') %解壓ILA文件 需要時打開 %% 設(shè)置CSV文件讀取范圍 srow = 2; %起始行(行標從0開始); scol = 3; %起始列(列標從0開始); erow = 16384; %結(jié)束行(一般為采樣深度); ecol = 3; %結(jié)束列; %% 獲取csv文件 [filename, pathname] = uigetfile('C:/Users/57803/Desktop/fft/waveform.csv','讀取數(shù)據(jù)'); 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 復數(shù)信號分析
? ? 有些時候需要對正交兩路信號進行分析,兩路信號構(gòu)成一個復數(shù)代碼如下:
%%%%%%%%%%%%%%%%%%%%%%復數(shù)信號%%%%%%%%%%%%%%%%%%%%% clc; clear; close all; fclose('all'); format long g %%unzip('C:/xxx/xxxx/adc_data.ila') %解壓使用 %% 設(shè)置CSV文件讀取范圍 srow = 1; %起始行(行標從0開始); scol = 5; %起始列(列標從0開始); erow = 8192; %結(jié)束行(一般為采樣深度); ecol = 5; %結(jié)束列;srow1 = 1; %起始行(行標從0開始); scol1 = 6; %起始列(列標從0開始); erow1 = 8192; %結(jié)束行(一般為采樣深度); ecol1 = 6; %結(jié)束列; %% 獲取csv文件 [filename, pathname] = uigetfile('C:/xxx/xxx/iladata7M.csv','讀取數(shù)據(jù)'); 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('功率譜');?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的使用MATLAB快速完成对ADC信号质量的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年 全国坐火车的少了36.4%!
- 下一篇: PREFACE FPGA经典案例序言