输出信噪比计算.docx
《输出信噪比计算.docx》由会员分享,可在线阅读,更多相关《输出信噪比计算.docx(2页珍藏版)》请在冰点文库上搜索。
![输出信噪比计算.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/a8f8d184-fb02-4810-a982-b35bddcc64d6/a8f8d184-fb02-4810-a982-b35bddcc64d61.gif)
输出信噪比计算
functionsnr_vec=fftdisto(x,C,varargin)
%FFTDISTOcomputedistortionofsinusoidalsignal
%SNR_VEC=FFTDISTO(X,C,N)
%input:
%xsignalvector
%CnumberoffullsinusoidsinX
%Nlengthofsignaltoconsider(mustbeapowerof2)
%onlyNlastsamplesinxareusedinfft
%outputvector:
%1pwrsignalpower[dB](amplitude1-->0dB)
%2sndrsignal-to-noise+distortionratio(DComitted)[dB]
%3snronlyuncorrelatednoise(harmonics+DComitted)[dB]
%4sdrsignal-to-distortion(onlyharmonics,noise+DComitted)[dB]
%5tdhtotalharmonicdistortion[%]
%NOTE:
makeN>6*C-->
%considersonlyapprox.firstN/2Charmonics,
%restaretreatedasnoise
ifnargin>3
fprintf('nargin=%d\n',nargin)
error('Toomanyarguments.');
end
N=length(x);
ifnargin==3
ifvarargin{1}>N
error('Nexceedslength(x)');
end
lenx=N;
N=varargin{1};
iflenx>N
x(1:
(lenx-N))=[];
end
end
N2=0.5*N;
iflog2(N2)~=round(log2(N2))
error('Nmustbepowerof2');
end
ifC>N2
error('C>N/2(signalfrequency>samplingfrequency');
end
ifN<6*C
%warning('computinglessthan3harmonics!
');
end
a=abs(fft(x))/N2;%amplitudevector
p=a.*a;%powervector
dc=1;%indexofDCcomponent
sig=C+1;%indexofsignal
harm=(2*C+1):
C:
N2;%indicesofharmonics
noise=1:
N2;noise([dcsigharm])=[];
%indicesofnoise
sp=p(sig)+1e-100;%signalpower
dp=sum(p(harm))+1e-100;%distortionpower
np=sum(p(noise))+1e-100;%noisepower(notincludingdistortion)
snr_vec=zeros(1,5);
snr_vec
(1)=dB10(sp);
snr_vec
(2)=dB10(sp/(np+dp));
snr_vec(3)=dB10(sp/np);
snr_vec(4)=dB10(sp/dp);
snr_vec(5)=100*sqrt(dp/sp);