《DSP using MATLAB》Problem 7.31 随笔 第1张

        参照Example7.27,因为0.1π=2πf1   f1=0.05,0.9π=2πf2   f2=0.45

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

        所以0.1π≤ω≤0.9π,0.05≤|H|≤0.45

代码:

%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%%            Output Info about this m-file
fprintf('\n***********************************************************\n');
fprintf('        <DSP using MATLAB> Problem 7.31 \n\n');

banner();
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

f = [0  0.1  0.9   1];                          % in w/pi units
m = [0  0.05 0.45  0];                          % Magnitude values

M = 25;               % length of filter
N = M - 1;            % Nth-order 
h = firpm(N, f, m, 'differentiator');
%h
[db, mag, pha, grd, w] = freqz_m(h, [1]);

[Hr, ww, c, L] = Hr_Type3(h);
%[Hr,omega,P,L] = ampl_res(h);

l = 0:M-1;
%% -------------------------------------------------
%%                    Plot
%% -------------------------------------------------  
figure('NumberTitle', 'off', 'Name', 'Problem 7.31')
set(gcf,'Color','white'); 
subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -90 10]); 
set(gca,'YTickMode','manual','YTick',[-60,-40,-20,0])
set(gca,'YTickLabelMode','manual','YTickLabel',['60';'40';'20';' 0']);
set(gca,'XTickMode','manual','XTick',[0,0.1,0.9,1,1.1,1.9,2]);
xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB');

subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]); 
xlabel('frequency in \pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
set(gca,'XTickMode','manual','XTick',[0,0.1,0.9,1,1.1,1.9,2]);
set(gca,'YTickMode','manual','YTick',[0,1.0,2.0]);

subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]); 
xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Response in Radians');
subplot(2,2,4); plot(w/pi, grd*pi/180);  grid on; %axis([0 1 -100 10]); 
xlabel('frequency in \pi units'); ylabel('Rad'); title('Group Delay');



figure('NumberTitle', 'off', 'Name', 'Problem 7.31')
set(gcf,'Color','white'); 

subplot(2,2,1); stem(l, h); axis([-1, M, -0.6, 0.5]); grid on;
xlabel('n'); ylabel('h(n)'); title('Actual Impulse Response, M=25');
set(gca, 'XTickMode', 'manual', 'XTick', [0,12,25]);
set(gca, 'YTickMode', 'manual', 'YTick', [-0.6:0.2:0.6]);

subplot(2,2,3); plot(w/pi, db); axis([0, 1, -80, 10]); grid on;
xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB ');
set(gca,'XTickMode','manual','XTick',f)
set(gca,'YTickMode','manual','YTick',[-60,-40,-20,0]);
set(gca,'YTickLabelMode','manual','YTickLabel',['60';'40';'20';' 0']);

subplot(2,2,4); plot(ww/pi, Hr); axis([0, 1, -0.2, 1.5]); grid on;
xlabel('frequency in \pi nuits'); ylabel('Hr(w)'); title('Amplitude Response');



n = [0:1:100];
x = 3*sin(0.25*pi*n);
y = filter(h,1,x);
y_chk = 0.75*cos(0.25*pi*n);

figure('NumberTitle', 'off', 'Name', 'Problem 7.31 x(n)')
set(gcf,'Color','white'); 
subplot(2,1,1); stem([0:M-1], h); axis([0 M-1 -0.5 0.5]); grid on;
xlabel('n'); ylabel('h(n)'); title('Actual Impulse Response, M=25');

subplot(2,1,2); stem(n, x); axis([0 100 0 3]); grid on;
xlabel('n'); ylabel('x(n)'); title('Input sequence');

figure('NumberTitle', 'off', 'Name', 'Problem 7.31 y(n) and y_chk(n)')
set(gcf,'Color','white'); 
subplot(2,1,1); stem(n, y); axis([0 100 -1 1]); grid on;
xlabel('n'); ylabel('y(n)'); title('Output sequence');

subplot(2,1,2); stem(n, y_chk); axis([0 100 -1 1]); grid on;
xlabel('n'); ylabel('y\_chk(n)'); title('Output sequence');


% ---------------------------
%    DTFT of x
% ---------------------------
MM = 500;
[X, w1] = dtft1(x, n, MM);
[Y, w1] = dtft1(y, n, MM);

magX = abs(X); angX = angle(X); realX = real(X); imagX = imag(X);
magY = abs(Y); angY = angle(Y); realY = real(Y); imagY = imag(Y);

figure('NumberTitle', 'off', 'Name', 'Problem 7.31 DTFT of x(n)')
set(gcf,'Color','white'); 
subplot(2,2,1); plot(w1/pi,magX); grid on; %axis([0,2,0,15]); 
title('Magnitude Part');
xlabel('frequency in \pi units'); ylabel('Magnitude  |X|'); 
subplot(2,2,3); plot(w1/pi, angX/pi); grid on; axis([0,2,-1,1]);
title('Angle Part');
xlabel('frequency in \pi units'); ylabel('Radians/\pi');

subplot('2,2,2'); plot(w1/pi, realX); grid on;
title('Real Part');
xlabel('frequency in \pi units'); ylabel('Real');
subplot('2,2,4'); plot(w1/pi, imagX); grid on;
title('Imaginary Part');
xlabel('frequency in \pi units'); ylabel('Imaginary');


figure('NumberTitle', 'off', 'Name', 'Problem 7.31 DTFT of y(n)')
set(gcf,'Color','white'); 
subplot(2,2,1); plot(w1/pi,magY); grid on; %axis([0,2,0,15]); 
title('Magnitude Part');
xlabel('frequency in \pi units'); ylabel('Magnitude  |Y|'); 
subplot(2,2,3); plot(w1/pi, angY/pi); grid on; axis([0,2,-1,1]);
title('Angle Part');
xlabel('frequency in \pi units'); ylabel('Radians/\pi');

subplot('2,2,2'); plot(w1/pi, realY); grid on;
title('Real Part');
xlabel('frequency in \pi units'); ylabel('Real');
subplot('2,2,4'); plot(w1/pi, imagY); grid on;
title('Imaginary Part');
xlabel('frequency in \pi units'); ylabel('Imaginary');

figure('NumberTitle', 'off', 'Name', 'Problem 7.31 Magnitude Response')
set(gcf,'Color','white'); 
subplot(1,2,1); plot(w1/pi,magX); grid on; %axis([0,2,0,15]); 
title('Magnitude Part of Input');
xlabel('frequency in \pi units'); ylabel('Magnitude  |X|'); 
subplot(1,2,2); plot(w1/pi,magY); grid on; %axis([0,2,0,15]); 
title('Magnitude Part of Output');
xlabel('frequency in \pi units'); ylabel('Magnitude  |Y|'); 

  运行结果:

      根据线性相位FIR性质,differentiator为第3类线性相位FIR,下图为脉冲响应、幅度谱和振幅谱。

《DSP using MATLAB》Problem 7.31 随笔 第2张

《DSP using MATLAB》Problem 7.31 随笔 第3张

        脉冲响应和输入序列

《DSP using MATLAB》Problem 7.31 随笔 第4张

        下图分别用卷积法和数学求导数方法得到的输出,

《DSP using MATLAB》Problem 7.31 随笔 第5张

        各自求其离散时间傅氏变换DTFT,得

《DSP using MATLAB》Problem 7.31 随笔 第6张《DSP using MATLAB》Problem 7.31 随笔 第7张

《DSP using MATLAB》Problem 7.31 随笔 第8张

《DSP using MATLAB》Problem 7.31 随笔 第9张

        两种求微分结果幅度谱对比,可以看出:

        1、设计滤波器卷积输入,输出的0.5π频率附近出现能量,数学求法没有;

        2、设计滤波器卷积输入,幅度较数学求法小(能量有损失?);

《DSP using MATLAB》Problem 7.31 随笔 第10张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄