当前位置:编程学习 > Matlab >>

对12bit的AD建模后matlab写程序对其进行FFT,计算SNR并输出频谱图,程序该怎么写???急

答案:你是不是用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

上一个:matlab程序中if (mod(j,2)==1)&&(j~=k+1)是什么意思
下一个:急求MATLAB高手建模,三组数据用前面四组建模 后面3组数据验证,求程序以及运行结果,全部身家,谢谢啦

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,