如何在matlab实现5次谐波提取

如何在matlab实现5次谐波提取,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8051563.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存