FFT分析频谱图导出的话可以参考这里
2.THD谐波总畸变率计算参考这里
3.谐波分量提取参考这里
4.谐波PLOT:HIT ME!!
基本指令格式:
power_fftscope
FFTDATA = power_fftscope(ScopeData)
FFTDATA = power_fftscope(FFTDATA)
power_fftscope(ScopeData)
power_fftscope(FFTDATA)例子:
假设要分析的信号是电流iL(在scope里命名为"iL1a")
先在powergui里分析一遍
然后在command窗口里输入:
>>FFTDATA = power_fftscope(iL1a) % FFTDATE是傅立叶分析相关参数的结构体
FFTDATA =
time: [120001x1 double]
signals: [1x1 struct]
blockName: 'apf6_PR/Scope13'
input: 1
signal: 1
startTime: 'last'
cycles: 1
fundamental: 60
maxFrequency: 1000
THDmaxFrequency: Inf
THDbase: 'fund'
mag: [17x1 double]
phase: [17x1 double]
freq: [17x1 double]
THD: 27.5218
samplingTime: 1.0000e-06
samplesPerCycle: 16667
DCcomponent: 0.0662
magFundamental: 8.9817
>>FFTDATE.fundamental=50 % 修改基频
FFTDATE =
fundamental: 50
text(x坐标,y坐标,['参数a的值为',num2str(a)]注意上面的第三个参数是字符串,如果要将数值输出,要用num2str函数,这这个数值先转成字符串才可以输出。
最后用中括号括起来,表示字符串的拼接。
你是不是用simulink将数据输出到workbench?再用matlab计算其SFDR,SNR....等等参数?最近也在做DAC的动态校准的东西,就把代码给你吧。我注释了一部分,你根据自己的需要自己改回来。
%load ScopeData
dynamic_data=ScopeData.signals.values
data_size=size(dynamic_data)
N=max(data_size)
sample_number=input('输入采样点数:')
if sample_number>N
display('样本数据数量不够,请检查')
else data=dynamic_data(1:sample_number)
N=sample_number
end
F_samples=input('输入采样频率:')
Mean_code=mean(data)
V=data-Mean_code
V=V.*hanning(N)
dout_spect=fft(V)
dout_dB=20*log10(abs(dout_spect))
max_dB=max(dout_dB(1:N/2))
x=(0:N/2-1).*F_samples/N
y=dout_dB(1:N/2)-max_dB
figure(1)
plot(x,y)
axis([0,F_samples/2,-120,0])
grid off
title('FFT图')
xlabel('模拟输入频率(Hz)')
ylabel('幅值(dB)')
F_in=find(dout_dB(1:N/2)==max_dB)
span=max(round(N/200),5)
spanh=2
spectp=(abs(dout_spect)).*(abs(dout_spect))
Pdc=sum(spectp(1:span))
%Ps=sum(spectp(F_in-span:F_in+span))
F_harmonic=[]
P_harmonic=[]
for har_number=1:10
tone=rem((har_number*(F_in-1)+1)/N,1)
if tone>0.5
tone=1-tone
end
F_harmonic=[F_harmonic tone]
har_peak=max(spectp(round(tone*N)-spanh:round(tone*N)+spanh))
har_bin=find(spectp(round(tone*N)-spanh:round(tone*N)+spanh)==har_peak)
har_bin=har_bin+round(tone*N)-spanh-1
P_harmonic=[P_harmonic sum(spectp(har_bin-1:har_bin+1))]
end
disp(F_harmonic)
disp(P_harmonic)
%
% Pd=sum(P_harmonic(2:5))
%
% Pn=sum(spectp(1:N/2))-Pdc-Ps-Pd
format
% SNR=10*log10(Ps/Pn)
%
% SINAD=10*log10(Ps/(Pn+Pd))
SFDR=10*log10(P_harmonic(1)/max(P_harmonic(2:5)))
% THD=10*log10(Pd/P_harmonic(1))
%
% ENOB=(SINAD-1.76)/6.02
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)