前言
目前內(nèi)外網(wǎng)自用ADC動態(tài)參數(shù)計算的matlab程序都是同一套模板的改版,存在共同的問題,遲遲沒有得到解決,也困擾了我?guī)滋?,不過還好,最終搞明白了幾點。
一、ADC動態(tài)參數(shù)分析的源程序從何而來?
? ? ? ? 目前看到的各種文章,很多都可以追溯到2002年的這篇文章:
https://www.maximintegrated.com/en/design/technical-documents/tutorials/7/729.html后面附帶的示例程序,大部分改編的文章都是在這個基礎(chǔ)上改了數(shù)據(jù)讀出的方式(每個人采集數(shù)據(jù)的保留格式不同),后面的具體程序幾乎沒有實質(zhì)性改變,這也造成了幾個問題:
? ? ? ? 1,沒有交代清楚 signal 的 span 該取,諧波的spanh 該取多少,為什么要使用這個公式,為什么取這個值:
??? %Span of the input frequency on each side
???????? span=max(round(numpt/200),5);
???????????%Approximate search span for harmonics on each side
?????????? spanh=2;
????????2, 沒有考慮非滿量程下的幅度比例因子的問題,導(dǎo)致程序結(jié)果有偏差。
????????3,迭代過程中數(shù)組可以預(yù)設(shè)置內(nèi)存大小,加快計算速度。
二、直接上代碼
1.修改后的matlab code
代碼如下(示例):
clc
clear
%extract array data from the datasource file ?
fileID = fopen('E:\data\matlab\100mV_0912_1.c','r');
[data4,~] = ?fscanf(fileID,'%d');
data4 = data4'; ? ? ? ? ? ? %轉(zhuǎn)置數(shù)組
numpt = 20000; ? ? ? ? ? ? ?%數(shù)據(jù)點個數(shù)(可根據(jù)需求調(diào)節(jié))
num_bit=12; % ? ? ? ? ? ? ? %ADC數(shù)據(jù)位。(有符號整型數(shù))
fclose(fileID); ? ? ? ? ? ? %關(guān)閉文件
x = 1:1001; ? ? ? ? ? ? ? ? %作圖點數(shù)
data100 = data4(1:1001); ? ?%原始波形取作圖點數(shù)個點
subplot(1,2,1); ? ? ? ? ? ? %作圖 一行 二列 中的第一個小圖
plot(x,data100); ? ? ? ? ? ?%作圖,僅作波形示意,和后面的數(shù)據(jù)處理關(guān)系不大
mul=mean(data4); ? ? ? ? ? ?%求數(shù)據(jù)平均值,用于后面的數(shù)據(jù) 正負中心對齊
%span=40; ? ? ? ? ? ? ? ? ? ?%信號頻率+ -span范圍都算作信號能量
span=max(round(numpt/200),5);%一種經(jīng)驗公式,來自maxim網(wǎng)站源碼,基本正確,確實可以涵蓋信號帶寬 ? ? ? ? ? ? ? ??
spanh=5; ? ? ? ? ? ? ? ? ? ? %諧波頻率+ -spanh范圍都算作諧波能量,可由小達到實驗,ENOB數(shù)值穩(wěn)定后即可
Fsample=125; ? ? ? ? ? ? ? ? %采樣率125M,單位MHz
m=1:numpt; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%生成數(shù)組
data33=(data4(m)-mul)/(2^(num_bit-1)-1); ? ?%正負中心(基線)對齊,并轉(zhuǎn)化為具體幅度0-1;
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % data33,需要做FFT變換的數(shù)據(jù),4000個點,必須是連續(xù)的周期信號
beta=5.658; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %沒有使用此變量
data44=data33'.*hanning(numpt); ? ? ? ? ? ?%加窗,漢寧窗
%data44=data33'.*hamming(numpt); ? ? ? ? ? ?%加窗,漢明窗
%data44=data33; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
data55=fft(data44); ? ? ? ? ? ? ? ? ? ? ? ? %fft變換
data66=abs((data55)); ? ? ? ? ? ? ? ? ? ? ? %取絕對值,表示信號幅度
data77=20*log10(data66); ? ? ? ? ? ? ? ? ? ?%取對數(shù),分貝
data88=data66.*data66; ? ? ? ? ? ? ? ? ? ? ?%平方,表示信號能量
max_voltage = ?max(abs(data33)); ? ? ? ? ? ?%最大電壓值
max_voltagedb = 20*log10(max_voltage/1); ? ?%最大電壓分貝
%max_voltagedb = 0; ? ? ? ? ? ? ? ? ? ? ? ? %試驗不設(shè)置為零的時候頻譜圖形狀
bili_factor_1=1/max_voltage; ? ? ? ? ? ? ? ?%幅度比例因子
bili_factor=bili_factor_1^2; ? ? ? ? ? ? ? ?%功率比例因子
%bili_factor=1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? %測試比例因子為1時參數(shù)變化 ? ?
maxdb=max(data77(1:numpt/2)); ? ? ? ? ? ? ? %最大幅值,分貝
x=((0:(numpt/2-1)).*Fsample/numpt); ? ? ? ? %x軸,頻率單位,Mhz,
y1=data77(1:numpt/2)-maxdb+max_voltagedb; ? %y軸,幅值,db,最大0db
figure(1);
subplot(1,2,2)
plot(x,y1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % 作圖
fin=find(data77(1:numpt/2)==maxdb); ? ? ? ? %輸入信號,賦值,找到最大的頻率
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % ?fin=fin+1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % 如果含直流成分過大,那么fin可能是直流頻率
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %所以不考慮直流分量
Fh= zeros(1:8); ? %諧波頻率 數(shù)組 預(yù)設(shè)置內(nèi)存
Ph= zeros(1:8); ? %諧波能量 數(shù)組 預(yù)設(shè)置內(nèi)存
for har_num=1:8 ? ? ?%1到15次諧波分量
?? ?tone=rem((har_num*(fin)+1)/numpt,1); ?
? ? %各次諧波對應(yīng)的能量
? ? if tone>0.5
? ? ? ? ? ? tone=1-tone; ? ? ?%對稱
? ? end
%Fh=[Fh tone]; %舊版本,每次迭代的時候append 數(shù)據(jù),速度慢,現(xiàn)改稱預(yù)設(shè)內(nèi)存大小,根據(jù)數(shù)組下標賦值
Fh(har_num)=tone;
%諧波,在Fh中加入tone
if round(tone*numpt)-spanh>0
har_peak=max(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh));%諧波附近+-spanh最大值
har_bin=find(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh)==har_peak);%最大值對應(yīng)頻率
?? ?har_bin=har_bin+round(tone*numpt)-spanh-1;
?? ?Ph(har_num)=sum(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh));?
?% ?har_bin-spanh:har_bin+spanh;
else?
har_peak=max(data88(1:round(tone*numpt)+spanh));%諧波附近+-spanh最大值
har_bin=find(data88(1:round(tone*numpt)+spanh)==har_peak); %最大值對應(yīng)頻率
?? ?har_bin=har_bin+round(tone*numpt)-spanh-1;
?? ?Ph(har_num)=sum(data88(1:har_bin+spanh)); %舊版本,每次迭代的時候append 數(shù)據(jù),速度慢,現(xiàn)改稱預(yù)設(shè)內(nèi)存大小,根據(jù)數(shù)組下標賦值
end
%某諧波分量
end
%你好
Pdc=sum(data88(1:span)); ? ? ? ? ? ? ? ? ? ? ? ?%直流能量
Ps=bili_factor*sum(data88(fin-span:fin+span)); ?%信號能量,前后span個都算作信號能量,
Pd=bili_factor*sum(Ph(2:8)); ? ? ? ? ? ? ? ? ? ?%諧波能量
Pn=sum(data88(1:numpt/2))-Pdc-Pd/bili_factor-Ps/bili_factor; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %噪聲能量%
fin_MHz=fin/numpt*Fsample; ? ? ? ? ? ? ? ? ? ? ?%信號頻率
SNR=10*log10(Ps/Pn); ? ? ? ? ? ? ? ? ? ? ? ? ? ?%信噪比
SINAD=10*log10(Ps/(Pn+Pd)); ? ? ? ? ? ? ? ? ? ? %信納比
SFDR=10*log10(Ph(1)/max(Ph(2:8))); ? ? ? ? ? ? ?%無雜散動態(tài)范圍
ENOB=(SINAD-1.76+20*log10(1/max_voltage))/6.02; %幅度校正后有效位
2.代碼處理的數(shù)據(jù)
????????代碼+數(shù)據(jù)壓縮文件鏈接https://download.csdn.net/download/qq_38239093/86533881
三、講解
? ? ? ? 1,span、spanh本質(zhì)都是測出來的
? ? ? ? 放大信號的頻譜圖,測量頻譜圖信號峰值兩邊到峰值頻率的-3dB帶寬的,再除以FFt的Bin寬取整,就得到了span的數(shù)值,經(jīng)過驗證,段落一中引用的經(jīng)驗公式,基本可以將信號的能量囊簡括在內(nèi),保證ADC參數(shù)結(jié)果基本穩(wěn)定。
? ? ? ? 諧波的范圍參數(shù)spanh則是試出來的!從最小的正整數(shù)1開始,逐漸增加,直到SINAD或者ENOB數(shù)值不發(fā)生明顯變化即可,省去了計算的過程,不過理論是可行的,基本上此數(shù)值下,已經(jīng)囊括了大部分的諧波能量。
? ? ? ? 2,整型數(shù)據(jù)需要中心對齊(recenter),需要轉(zhuǎn)化成幅度,這是源程序沒有的,原因是其數(shù)據(jù)格式已經(jīng)是代表幅度的浮點數(shù)。
????????
data33=(data4(m)-mul)/(2^(num_bit-1)-1); ? ?%正負中心(基線)對齊,并轉(zhuǎn)化為具體幅度0-1;
? ? ? ? 3,最好根據(jù)迭代的次數(shù)(根據(jù)計算的諧波個數(shù))預(yù)設(shè)置內(nèi)存大小,加快運算速度
Fh= zeros(1:8); ? %諧波頻率 數(shù)組 預(yù)設(shè)置內(nèi)存
Ph= zeros(1:8); ? %諧波能量 數(shù)組 預(yù)設(shè)置內(nèi)存
????????4,比例因子的引入,如代碼所示,需要提醒的是最后的ENOB也要考慮到這一點:
ENOB=(SINAD-1.76+20*log10(1/max_voltage))/6.02; %幅度校正后有效位
理論來源:馮雪. ADC動態(tài)參數(shù)估算算法的優(yōu)化與實現(xiàn)[D]. 江蘇:東南大學(xué),2016. DOI:10.7666/d.Y3142543.文章來源:http://www.zghlxwxcb.cn/news/detail-418679.html
總結(jié)
????????本文簡單介紹了關(guān)于ADC動態(tài)參數(shù)matlab程序的一些思考和改進。文章來源地址http://www.zghlxwxcb.cn/news/detail-418679.html
到了這里,關(guān)于ADC 動態(tài)參數(shù)分析matlab code的幾個問題(span,spanh取值問題,幅度比例因子的添加等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!