zoukankan      html  css  js  c++  java
  • 《DSP using MATLAB》Problem 8.41

    代码:

    %% ------------------------------------------------------------------------
    %%            Output Info about this m-file
    fprintf('
    ***********************************************************
    ');
    fprintf('        <DSP using MATLAB> Problem 8.41.2 
    
    ');
    
    banner();
    %% ------------------------------------------------------------------------
    
    % Digital lowpass Filter Specifications:
    wplp = 0.4*pi;                 % digital passband freq in rad
    wslp = 0.5*pi;                 % digital stopband freq in rad
    Rp = 1.0;                       % passband ripple in dB
    As = 50.0;                        % stopband attenuation in dB
    
    Ripple = 10 ^ (-Rp/20)           % passband ripple in absolute
    Attn = 10 ^ (-As/20)             % stopband attenuation in absolute
    
    fprintf('
    *******Digital lowpass, Coefficients of DIRECT-form***********
    ');
    [blp, alp] = cheb2lpf(wplp, wslp, Rp, As);
    [C, B, A] = dir2cas(blp, alp)
    
    % Calculation of Frequency Response:
    [dblp, maglp, phalp, grdlp, wwlp] = freqz_m(blp, alp);
    
    % ---------------------------------------------------------------
    %    find Actual Passband Ripple and Min Stopband attenuation
    % ---------------------------------------------------------------
    delta_w = 2*pi/1000;
    Rp_lp = -(min(dblp(1:1:ceil(wplp/delta_w)+1)));                            % Actual Passband Ripple
    
    fprintf('
    Actual Passband Ripple is %.4f dB.
    ', Rp_lp);
    
    As_lp = -round(max(dblp( ceil(wslp/delta_w)+1:1:501 )));                    % Min Stopband attenuation
    fprintf('
    Min Stopband attenuation is %.4f dB.
    
    ', As_lp);
    
    %% -----------------------------------------------------------------
    %%                             Plot
    %% -----------------------------------------------------------------  
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.1 Chebyshev-2 lowpass by cheb2lpf function')
    set(gcf,'Color','white'); 
    M = 2;                          % Omega max
    
    subplot(2,2,1); plot(wwlp/pi, maglp); axis([0, M, 0, 1.2]); grid on;
    xlabel('Digital frequency in pi units'); ylabel('|H|'); title('Lowpass Filter Magnitude Response');
    set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.5, M]);
    set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.8913, 1]);
    
    subplot(2,2,2); plot(wwlp/pi, dblp); axis([0, M, -100, 2]); grid on;
    xlabel('Digital frequency in pi units'); ylabel('Decibels'); title('Lowpass Filter Magnitude in dB');
    set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.5, M]);
    set(gca, 'YTickMode', 'manual', 'YTick', [-80, -60, -50, -1, 0]);
    set(gca,'YTickLabelMode','manual','YTickLabel',['80'; '60'; '50';'1 ';' 0']);
    
    
    subplot(2,2,3); plot(wwlp/pi, phalp/pi); axis([0, M, -1.1, 1.1]); grid on;
    xlabel('Digital frequency in pi nuits'); ylabel('radians in pi units'); title('Lowpass Filter Phase Response');
    set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.5, M]);
    set(gca, 'YTickMode', 'manual', 'YTick', [-1:1:1]);
    
    subplot(2,2,4); plot(wwlp/pi, grdlp); axis([0, M, 0, 50]); grid on;
    xlabel('Digital frequency in pi units'); ylabel('Samples'); title('Lowpass Filter Group Delay');
    set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.5, M]);
    set(gca, 'YTickMode', 'manual', 'YTick', [0:20:50]);
    
    % ------------------------------------------------------------
    %                 PART 2   A/D and Reconstruction
    % ------------------------------------------------------------
    
    % Discrete time signal, Samples of analog signal xa(t)
    Ts = 0.01;                       % sample intevel, second
    Fs = 1/Ts;                       % sample frequency, Hz
    n1_start = 0; n1_end = 500;
          n1 = [n1_start:1:n1_end];
         nTs = n1 * Ts;                   % [0, 5]s
    
    xn1 = 3 * sin(40*pi*nTs) + 3 * cos(50*pi*nTs);    % digital signal
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41 xn1')
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(n1, xn1);
    xlabel('n'); ylabel('x(n)');
    title('xn sequence');  grid on;
    
    % ----------------------------
    %       DTFT of xn1
    % ----------------------------
    M = 500;
    [X1, w] = dtft1(xn1, n1, M);
    
    magX1  = abs(X1);  angX1  = angle(X1);  realX1  = real(X1);  imagX1  = imag(X1);
    
    %% --------------------------------------------------------------------
    %%              START X(w)'s  mag ang real imag
    %% --------------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41 X1 DTFT');
    set(gcf,'Color','white'); 
    subplot(2,1,1); plot(w/pi,magX1); grid on;  %axis([-1,1,0,1.05]); 
    title('Magnitude Response');
    xlabel('digital frequency in pi units'); ylabel('Magnitude  |H|'); 
    subplot(2,1,2); plot(w/pi, angX1/pi); grid on;  %axis([-1,1,-1.05,1.05]);
    title('Phase Response');
    xlabel('digital frequency in pi units'); ylabel('Radians/pi');
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41 X1 DTFT');
    set(gcf,'Color','white'); 
    subplot(2,1,1); plot(w/pi, realX1); grid on;
    title('Real Part');
    xlabel('digital frequency in pi units'); ylabel('Real');
    subplot(2,1,2); plot(w/pi, imagX1); grid on;
    title('Imaginary Part');
    xlabel('digital frequency in pi units'); ylabel('Imaginary');
    %% -------------------------------------------------------------------
    %%             END X's  mag ang real imag
    %% -------------------------------------------------------------------
    
    
    
    % -----------------------------------------
    %       Reconstruction
    %       methods: ZOH FOH spline  sinc
    % -----------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction xa(t) by ZOH');
    set(gcf,'Color','white'); 
    subplot(1,1,1); stairs(nTs*100, xn1); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from x1(n) using Zero-Order-Hold function');
    xlabel('t in msec units.'); ylabel('xa(n)'); hold on;
    stem(nTs*100, xn1); gtext('Ts = 0.01 sec'); hold off;
    
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction xa(t) by FOH');
    set(gcf,'Color','white'); 
    subplot(1,1,1); plot(nTs*100, xn1); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from x1(n) using First-Order-Hold');
    xlabel('t in msec units.'); ylabel('xa(n)'); hold on;
    stem(nTs*100, xn1); gtext('Ts = 0.01 sec'); hold off;
    
    
    
    % Reconstruction by spline function
    Dt = 0.005; t = 0:Dt:5; xa = spline(nTs, xn1, t);
    figure('NumberTitle', 'off', 'Name', sprintf('Problem 8.41.2 Reconstruction xa(t) by spline, Ts = %.4fs', Ts));
    set(gcf,'Color','white'); 
    %subplot(2,1,1);
    plot(100*t, xa); xlabel('t in ms units'); ylabel('x');  
    title(sprintf('Reconstructed Signal from x1(n) using spline function')); grid on; hold on;
    stem(100*nTs, xn1); gtext('spline');
    
    
    
    %% --------------------------------------------------------------------
    %%         Analog Signal reconstructed by sinc(x) function     
    %% --------------------------------------------------------------------
    
    Dt = 0.005; t = 0:Dt:5; 
    xa = xn1 * sinc(Fs*(ones(length(n1),1)*t - nTs'*ones(1,length(t)))) ;
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction by sinc function');
    set(gcf,'Color','white'); 
    subplot(1,1,1); plot(t*100, xa, 'r'); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from x1(n) using sinc function');
    xlabel('t in msec units.'); ylabel('xa(n)'); hold on;
    stem(nTs*100, xn1, 'b', 'filled'); gtext('Ts=0.01 msec'); hold off;
    
    
    
    % --------------------------------------------
    %             PART 3:  Filter and D/A
    % --------------------------------------------
    yn1 = filter(blp, alp, xn1);
    
    % ----------------------------
    %       DTFT of yn1
    % ----------------------------
    M = 500;
    [Y1, w] = dtft1(yn1, n1, M);
    
    magY1  = abs(Y1);  angY1  = angle(Y1);  realY1  = real(Y1);  imagY1  = imag(Y1);
    
    %% --------------------------------------------------------------------
    %%              START Y1(w)'s  mag ang real imag
    %% --------------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41 Y1 DTFT');
    set(gcf,'Color','white'); 
    subplot(2,1,1); plot(w/pi,magY1); grid on;  %axis([-1,1,0,1.05]); 
    title('Magnitude Response');
    xlabel('digital frequency in pi units'); ylabel('Magnitude  |H|'); 
    subplot(2,1,2); plot(w/pi, angY1/pi); grid on;  %axis([-1,1,-1.05,1.05]);
    title('Phase Response');
    xlabel('digital frequency in pi units'); ylabel('Radians/pi');
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41 Y1 DTFT');
    set(gcf,'Color','white'); 
    subplot(2,1,1); plot(w/pi, realY1); grid on;
    title('Real Part');
    xlabel('digital frequency in pi units'); ylabel('Real');
    subplot(2,1,2); plot(w/pi, imagY1); grid on;
    title('Imaginary Part');
    xlabel('digital frequency in pi units'); ylabel('Imaginary');
    %% -------------------------------------------------------------------
    %%             END Y1's  mag ang real imag
    %% -------------------------------------------------------------------
    
    
    
    % -----------------------------------------
    %       Reconstruction
    %       methods: ZOH FOH spline  sinc
    % -----------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction ya(t) by ZOH');
    set(gcf,'Color','white'); 
    subplot(1,1,1); stairs(nTs*100, yn1); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from y1(n) using Zero-Order-Hold function');
    xlabel('t in msec units.'); ylabel('ya(n)'); hold on;
    stem(nTs*100, yn1); gtext('Ts = 0.01 sec'); hold off;
    
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction ya(t) by FOH');
    set(gcf,'Color','white'); 
    subplot(1,1,1); plot(nTs*100, yn1); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from y1(n) using First-Order-Hold');
    xlabel('t in msec units.'); ylabel('ya(n)'); hold on;
    stem(nTs*100, yn1); gtext('Ts = 0.01 sec'); hold off;
    
    
    
    % Reconstruction by spline function
    Dt = 0.005; t = 0:Dt:5; ya = spline(nTs, yn1, t);
    figure('NumberTitle', 'off', 'Name', sprintf('Problem 8.41.2 Reconstruction ya(t) by spline, Ts = %.4fs', Ts));
    set(gcf,'Color','white'); 
    %subplot(2,1,1);
    plot(100*t, ya); xlabel('t in ms units'); ylabel('ya');  
    title(sprintf('Reconstructed Signal from y1(n) using spline function')); grid on; hold on;
    stem(100*nTs, yn1); gtext('spline');
    
    
    
    %% --------------------------------------------------------------------
    %%         Analog Signal reconstructed by sinc(x) function     
    %% --------------------------------------------------------------------
    
    Dt = 0.005; t = 0:Dt:5; 
    ya = yn1 * sinc(Fs*(ones(length(n1),1)*t - nTs'*ones(1,length(t)))) ;
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.41.2 Reconstruction by sinc function');
    set(gcf,'Color','white'); 
    subplot(1,1,1); plot(t*100, ya, 'r'); grid on;  %axis([0,1,0,1.5]); 
    title('Reconstructed Signal from y1(n) using sinc function');
    xlabel('t in msec units.'); ylabel('ya(n)'); hold on;
    stem(nTs*100, yn1, 'b', 'filled'); gtext('Ts=0.01 msec'); hold off;
    

      运行结果:

            通带、阻带指标,绝对值单位

            采用cheb2lpf函数,设计的Chebyshev-2型数字低通,系统函数串联形式系数

            低通,幅度谱、相位谱和群延迟响应

            采样信号的谱(DTFT变换),可看出,有两个数字频率分量,0.4π和0.5π

            将采样信号通过设计的Chebyshev-2数字低通,得到输出y(n),其频谱如下,可看出,滤除了0.5π分量,仅保留0.4π分量

            对离散信号y(n)采用sinc(插值函数)重建连续信号,如下图

  • 相关阅读:
    unittest详解(二) 跳过用例的执行(skip)
    Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
    python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
    获取当前运行函数名称和类方法名称
    python中datetime模块中strftime/strptime函数
    面试题
    H5测试-缓存机制
    cp命令
    Java面试
    名词解释。。
  • 原文地址:https://www.cnblogs.com/ky027wh-sx/p/11801780.html
Copyright © 2011-2022 走看看