|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
根据马洛贝蒂书中所提供的程序,先使用sinusx函数分解,再进行处理
输入信号,幅值0.85,频率170Hz,采样频率44.1kHz,带宽1k,过采样率22.05
采用一阶调制器,3位量化器,量化幅值为0.125
理论值计算为54.95dB,而马洛贝蒂提供算法计算得61.0dB
w=hanning(16384);vo=out(1001:17384);%输出取16384个点
ssignal=(16384/sum(w))*sinusx(vo.*w,170/44100,16384); % Extracts sinusoidal signal
snoise=vo-ssignal; % Extracts noise components
stot=((abs(fft((vo.*w)'))).^2); % Bit-stream PSD
sssignal=(abs(fft((ssignal(1:16384).*w)'))).^2; % Signal PSD
ssnoise=(abs(fft((snoise(1:16384).*w)'))).^2; % Noise PSD
pwsignal=sum(sssignal(1:371)); % Signal power
pwnoise=sum(ssnoise(1:371)); % Noise power
snr=pwsignal/pwnoise;
snrdB=dbp(snr);
下面附上sinusx函数
function outx = sinusx(in,f,n)
% Extracts of a sinusoidal signal (S. Brigati, P. Malcovati)
%
% outx = sinusx(in,f,n)
%
% in: Input data vector
% f: Normalized input signal frequency
% n: Number of simulation points
%
% outx: Sinusoidal signal
sinx=sin(2*pi*f*(1:n)');
cosx=cos(2*pi*f*(1:n)');
in=in(1:n);
a1=2*sinx.*in;
a=sum(a1)/n;
b1=2*cosx.*in;
b=sum(b1)/n;
outx=a.*sinx + b.*cosx;
end |
|