rochesterlmg的个人空间 https://blog.eetop.cn/308521 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

计算SNR

已有 404 次阅读| 2023-12-20 15:28 |个人分类:杂谈|系统分类:生活杂谈

function [snrdB,ptotdB,psigdB,pnoisedB] = calcSNR_lu(vout,Fin,Fs,N,R)

% vout: input size is  data(1,N)

% Fin : signal 's frequency in analog domain

% Fs : sampling rate for current stage

% N:    samples number for current stage

% R:    total oversampling  factor for current stage after previous stage's

% decimation


% snrdB:     SNR in dB

% ptotdB:    Bit-stream power spectral density (vector)

% psigdB:    Extracted signal power spectral density (vector)

% pnoisedB:  Noise power spectral density (vector)

%


N=floor(N);


%w=hann(N)';         % windowing vector

w=blackman(N,'periodic')'; 

f=Fin/Fs; % Normalized signal frequency,Fin=Fs*nper/N;=> f=nper/N % Normalized signal frequency,Fin=Fs*nper/N;=> f=nper/N

fB=N/2/R; % Base-band frequency bins,always keep same,bw=Fs/2/R;=>fB=N/2/R,R is osr in current stage


fB=ceil(fB);

signal=(N/sum(w))*sinusx(vout(1:N).*w,f,N); % Extracts sinusoidal signal

noise=vout(1:N)-signal;             % Extracts noise components

stot=((abs(fft((vout(1:N).*w)'))).^2); % Bit-stream PSD

ssignal=(abs(fft((signal(1:N).*w)'))).^2; % Signal PSD

snoise=(abs(fft((noise(1:N).*w)'))).^2; % Noise PSD

pwsignal=sum(ssignal(1:fB));                % Signal power

pwnoise=sum(snoise(5:fB));             % Noise power,skip DC

snr=pwsignal/pwnoise;

snrdB=dbp(snr);

norm=sum(stot)/sum(vout(1:N).^2)*N; % PSD normalization

if nargout > 1

ptot=stot/norm;

ptotdB=dbp(ptot);

end


if nargout > 2

psig=ssignal/norm;

psigdB=dbp(psig);

end


if nargout > 3

pnoise=snoise/norm;

pnoisedB=dbp(pnoise);

end


function SNR = snr_qian_lvkun(s_y,frq,sfrq,bw)

% s_y: data

% frq: Input frequency

% sfrq: sampling frequency

% bw: bandwitdh of the signal

% frq/fres= frq/sfrq*Ns=int number,=>Ns=int_number*sfrq/frq

format long

Ns=20*sfrq/frq;

s_y=s_y(1:Ns);

%Ns <=length(s_y)


w = hanning(Ns, 'periodic');

z = 1;

[a, fre] = pwelch(s_y, w, [], Ns, sfrq);

fres = sfrq / Ns;



                     

bx = round(Ns * bw/sfrq + 1);

bbpwr = fres * sum(a(z+2:bx));

sigbin = 1+ round(frq/fres);

sigbinmin = max([(sigbin-z) 1]);

sigbinmax = sigbin+z;

sigpwr = fres * sum(a(sigbinmin:sigbinmax));

SNR = 20*log10(sqrt(sigpwr/(bbpwr-sigpwr)));

figure

semilogx(fre, pow2db(a), 'r');

xlabel('Frequency(Hz)', 'FontWeight', 'Bold', 'FontSize',10);

ylabel('PSD(dB/Hz)', 'FontWeight', 'Bold', 'FontSize',10);

title('CIFB3L7B output PSD');

txt = ['\leftarrow SNR=', num2str(SNR)];

text(20e3, pow2db(max(a))-10, txt);

grid on;

hold on;

plot([fres 20e3], [pow2db(max(a)) pow2db(max(a))], 'b--', 'LineWidth', 1);

plot([20e3 20e3], [pow2db(min(a)) pow2db(max(a))], 'b--', 'LineWidth', 1);

plot([20e3 0.5*sfrq], [pow2db(min(a)) pow2db(min(a))], 'b--', 'LineWidth', 1);



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 1

    粉丝
  • 3

    好友
  • 1

    获赞
  • 3

    评论
  • 398

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 07:33 , Processed in 0.026262 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部