|  | 
 
| 
根据马洛贝蒂书中所提供的程序,先使用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
 | 
 |