📄 dsdemo2.m
字号:
% Demonstrate simulateDSM and simulateSNRclcfprintf(1,'\t\t\tDiscrete-Time Simulation\n');if exist('LiveDemo','var') == 0 LiveDemo=0;endecho onR=32;H = synthesizeNTF(5,R,1);N = 8192;fB = ceil(N/(2*R)); ftest=floor(2/3*fB);u = 0.5*sin(2*pi*ftest/N*[0:N-1]); % half-scale sine-wave inputv = simulateDSM(u,H); echo off;figure(1); clf;t = 0:100;stairs(t, u(t+1),'r');hold on;stairs(t,v(t+1),'g');axis([0 100 -1.2 1.2]);xlabel('Sample Number');ylabel('u, v');set(gcf,'NumberTitle','off'); set(gcf,'Name','Modulator Input & Output');if LiveDemo set(1,'position',[0 372 777 355]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseif LiveDemo set(1,'position',[8 527 300 200]); changeFig;endf = linspace(0,0.5,N/2+1);echo onspec = fft(v.*hann(N))/(N/4);echo off;figure(2); clf;plot( f, dbv(spec(1:N/2+1)), 'b')figureMagic([0 0.5], 0.05, 2, [-120 0], 20, 1,[],'Output Spectrum');xlabel('Normalized Frequency')ylabel('dBFS')%title('Output Spectrum');if LiveDemo set(2,'position',[185 372 662 355]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseecho onsnr = calculateSNR(spec(3:fB+1),ftest-2);echo off;text_handle = text(0.05,-10, sprintf('SNR = %4.1fdB @ OSR = %d',snr,R),'vert','middle');if LiveDemo set(text_handle,'fontsize',18);endif ~LiveDemo fprintf(1,'paused\n');endpauseecho onNBW = 1.5/N;Sqq = 4 * evalTF(H,exp(2i*pi*f)).^2 / 3;echo offhold on;plot( f, dbp(Sqq*NBW), 'm', 'Linewidth', 2 );text(0.5, -90, sprintf('NBW = %4.1E x f_s ',NBW),'Hor','right');legend('Simulation','Expected PSD',4);if LiveDemo pause; set(2,'position',[336 527 450 200]); changeFig; legend('Simulation','Expected PSD',4);else fprintf(1,'paused\n');endpause;echo on[snr_pred,amp_pred] = predictSNR(H,R);[snr,amp] = simulateSNR(H,R);echo offfigure(3); clf;plot(amp_pred,snr_pred,'-',amp,snr,'og');figureMagic([-100 0], 10, 1, [0 100], 10, 1,[],'SQNR');xlabel('Input Level (dBFS)');ylabel('SQNR (dB)');%title('SNR curve- theory and simulation');[pk_snr pk_amp] = peakSNR(snr,amp);text(-25,85,sprintf('peak SNR = %4.1fdB\n@ OSR = %d\n',pk_snr,R),'Hor','right');if LiveDemo set(3,'position',[275 365 520 362]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseif LiveDemo set(3,'position',[815 544 218 183]); changeFig;endclc; fprintf(1,'\t\t\t Bandpass Modulator\n');echo onf0 = 1/8; R=64;H = synthesizeNTF(8,R,1,[],f0);fB = ceil(N/(2*R)); ftest=round(f0*N + 1/3*fB);u = 0.5*sin(2*pi*ftest/N*[0:N-1]); % half-scale sine-wave inputv = simulateDSM(u,H); echo off;figure(1); clf;t = 0:100;stairs(t, u(t+1),'r');hold on;stairs(t,v(t+1),'g');axis([0 100 -1.2 1.2]);xlabel('Sample Number');ylabel('u, v');%title('Modulator Input & Output');if LiveDemo set(1,'position',[0 372 777 355]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseif LiveDemo set(1,'position',[8 527 300 200]); changeFig;endecho onspec = fft(v.*hann(N))/(N/4);echo off;figure(2); clf;plot(linspace(0,0.5,N/2+1), dbv(spec(1:N/2+1)))axis([0 0.5 -140 0]);f1 = round((f0-0.25/R)*N);f2 = round((f0+0.25/R)*N);snr = calculateSNR(spec(f1:f2),ftest-f1+1);text(0.15,-10, sprintf(' SNR = %4.1f dB @ OSR=%d)',snr,R), 'vert','middle');grid on;xlabel('Normalized Frequency')ylabel('dBFS')%title('Output Spectrum');if LiveDemo set(2,'position',[185 372 662 355]); changeFig(18,2,12); pause;else fprintf(1,'paused\n'); pauseendecho onNBW = 1.5/N;Sqq = 4 * evalTF(H,exp(2i*pi*f)).^2 / 3;echo offhold on;plot( f, dbp(Sqq*NBW), 'm', 'Linewidth', 2 );text(0.5, -90, sprintf('NBW=%4.1E x f_s ',NBW),'Hor','right','Vert','mid');legend('Simulation','Expected PSD',4);if ~LiveDemo fprintf(1,'paused\n');endpauseif LiveDemo set(2,'position',[336 527 450 200]); changeFig; legend('Simulation','Expected PSD',4); drawnow;endecho on[snr_pred,amp_pred] = predictSNR(H,R,[],f0);[snr,amp] = simulateSNR(H,R,[],f0);echo offfigure(3); clf;plot(amp_pred,snr_pred,'-b',amp,snr,'og');figureMagic([-110 0], 10, 1, [0 110], 10, 1,[],'SQNR');xlabel('Input Level (dBFS)');ylabel('SQNR (dB)');%title('SNR curve- theory and simulation');[pk_snr pk_amp] = peakSNR(snr,amp);text(-20,95,sprintf('peak SNR = %4.1fdB\n@ OSR = %d\n',pk_snr,R),'Hor','right');if LiveDemo set(3,'position',[275 365 520 362]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseif LiveDemo set(3,'position',[815 544 218 183]); changeFig;endclc;fprintf(1,'\t\t\t 15-step Lowpass\n');fprintf(1,'\t\t\t(no SNR prediction)\n\n');echo onR=16; M = 15;H = synthesizeNTF(5,R,1,5);N = 8192;fB = ceil(N/(2*R)); ftest=floor(2/3*fB);u = 0.5*M*sin(2*pi*ftest/N*[0:N-1]); % half-scale sine-wave inputv = simulateDSM(u,H,M+1); echo off;figure(1); clf;t = 0:100;stairs(t, u(t+1),'r');hold on;stairs(t,v(t+1),'g');figureMagic([0 100],10,2, [-M M],2,3,[],'Input & Output');xlabel('Sample Number');ylabel('u, v');%title('Modulator Input & Output');if LiveDemo set(1,'position',[0 372 777 355]); changeFig(18,2,12);else fprintf(1,'paused\n');endpauseif LiveDemo set(1,'position',[8 527 300 200]); changeFig;endf = linspace(0,0.5,N/2+1);echo onspec = fft(v.*hann(N))/(M*N/4);echo off;figure(2); clf;plot(f, dbv(spec(1:N/2+1)))snr = calculateSNR(spec(3:fB+1),ftest-2);text(0.1,-10, sprintf(' SNR = %4.1fdB @ OSR=%d ',snr,R), 'vert','middle');figureMagic([0 0.5], 0.05, 2, [-160 0], 20, 1,[],'Output Spectrum');xlabel('Normalized Frequency')ylabel('dBFS')%title('Output Spectrum');if LiveDemo set(2,'position',[185 372 662 355]); changeFig(18,2,12); pause;endecho onNBW = 1.5/N;Sqq = 4 * evalTF(H,exp(2i*pi*f)).^2 / (3*M^2);echo offhold on;plot( f, dbp(Sqq*NBW), 'm', 'Linewidth', 2 );text(0.5, -110, sprintf('NBW=%4.1E x f_s ',NBW),'Hor','right');legend('Simulation','Expected PSD',4);pauseif LiveDemo set(2,'position',[336 527 450 200]); changeFig; legend('Simulation','Expected PSD',4);else fprintf(1,'paused\n');endecho on[snr,amp] = simulateSNR(H,R,[],[],M+1);echo off;figure(3); clf;plot(amp,snr,'og',amp,snr,'--b');figureMagic([-120 0], 10, 2, [0 120], 10, 2, [], 'SQNR');xlabel('Input Level (dBFS)');ylabel('SNR (dB)');%title('SNR curve');[pk_snr pk_amp] = peakSNR(snr,amp);text(-20,110,sprintf('peak SNR = %4.1fdB\n@ OSR = %d',pk_snr,R),'Hor','right');if LiveDemo set(3,'position',[275 365 520 362]); changeFig(18,2,12); pause set(3,'position',[815 544 218 183]); changeFig;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -