《DSP using MATLAB》Problem 2.14 (scilab脚本)

        从过年到现在,疫情看上去此起彼伏,没完没了,

     代码全放,图的话只放第4(Identity)性质的验证,某序列和有时移的脉冲序列卷积相当于某序列直接进行时移。

     代码如下:

// <<DSP using MATLAB>>3rd edition 
// Book Author:Vinay K Ingle, John G Proakis
//
// Problem 2.14
// script by: KY
//
clear, clc, clf();

mode(2);
funcprot(0);
exec('fun_banner.sci');          // output version and OS info
exec('fun_stepseq.sci');
exec('fun_impseq.sci');
exec('fun_sigfold.sci');        
exec('fun_conv_m.sci');        
exec('fun_sigadd.sci');
exec('fun_sigshift.sci');
exec('fun_dnsample.sci');
exec('fun_sigmult.sci');

// ------------------------------------------------------------------------
//            START        Output Info about this sce-file                 
mprintf('\n***********************************************************\n');
[ban1,ban2] = fun_banner();
mprintf("\n     <DSP using MATLAB> 3rd edition, Problem 2.14          \n");
mprintf(" ----------------------------------------------------------\n\n"); 

// -----------END----------------------------------------------------------



n1 = [-10:30]; 
x1 = cos(%pi*n1/4) .* (fun_stepseq(-5, -10, 30) - fun_stepseq(25, -10, 30)); 

n2 = [-10:30];
x2 = (0.9 .^ (-n2)) .* (fun_stepseq(0, -10, 30) - fun_stepseq(20, -10, 30));

n3 = [-10:10];
x3 = round( 5 * (-1+2*rand(21,1,'uniform')));

[x4, n4] = fun_impseq(2, -10, 30);


// ------------START  f0 figure-------------------------------------------------
f0=scf(0);                    //creates figure with id==0 and make it the current one
  f0.figure_size=[900,700];                // adjust window size
  f0.background=8;                         // add background color 8-white
  f0.figure_name="Problem 2.14 Fig0-Original Sequence ";          // name window
  subplot(2, 2, 1); 
     plot(n1,x1,'bo');
     plot(n1,x1,'b.');
  plot2d3(n1,x1,2);                      // Create plot with blue line
title("$x1(n)\ =cos(\pi n/4)[u(n+5)-u(n-25)]\ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('x1(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
a0.data_bounds=[-10,30,-2,2];

 subplot(2, 2, 2); 
     plot(n2,x2,'bo');
     plot(n2,x2,'b.');
  plot2d3(n2,x2,2);                      // Create plot with blue line
title("$x2=(10/9)^n[u(n)-u(n-20)] \ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('x2(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
//a1.data_bounds=[0,15,-1.10,1.10];

 subplot(2, 2, 3); 
     plot(n3,x3,'bo');
     plot(n3,x3,'b.');
  plot2d3(n3,x3,2);                      // Create plot with blue line
title("$x3=round[5w(n)]\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('x3(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
a1.data_bounds=[-10,10,-5,5];

 subplot(2, 2, 4); 
     plot(n4,x4,'bo');
     plot(n4,x4,'b.');
  plot2d3(n4,x4,2);                      // Create plot with blue line
title("$x4=\delta(n-2)\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('x4(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
a1.data_bounds=[-10,30,-0.10,1.10];
// -----------END f0------------------------------------------------------------



//%% ------------------------------------------
//%%             Commutation
//%% ------------------------------------------
[y1, ny1] = fun_conv_m(x1, n1, x2, n2);
[y2, ny2] = fun_conv_m(x2, n2, x1, n1);

// ------------START  f1 figure-------------------------------------------------
f1=scf(1);                    //creates figure with id==0 and make it the current one
  f1.figure_size=[800,650];                // adjust window size
  f1.background=8;                         // add background color 8-white
  f1.figure_name="Problem 2.14 Commutation ";          // name window
  subplot(2, 1, 1); 
     plot(ny1,y1,'bo');
     plot(ny1,y1,'b.');
  plot2d3(ny1,y1,2);                      // Create plot with blue line
title("$x1*x2\ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y1(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
//a0.data_bounds=[0,120,-10,10];

 subplot(2, 1, 2); 
     plot(ny2,y2,'bo');
     plot(ny2,y2,'b.');
  plot2d3(ny2,y2,2);                      // Create plot with blue line
title("$x2*x1\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y2(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
//a1.data_bounds=[0,15,-1.10,1.10];

// -----------END f1------------------------------------------------------------


//%% -----------------------------------------------
//%%               Association
//%% -----------------------------------------------
[y1, ny1] = fun_conv_m(x1, n1, x2, n2);
[y2, ny2] = fun_conv_m(y1, ny1, x3, n3);

[y3, ny3] = fun_conv_m(x2, n2, x3, n3);
[y4, ny4] = fun_conv_m(y3, ny3, x1, n1);

// ------------START  f2 figure-------------------------------------------------
f2=scf(2);                    //creates figure with id==0 and make it the current one
  f2.figure_size=[800,650];                // adjust window size
  f2.background=8;                         // add background color 8-white
  f2.figure_name="Problem 2.14 Association ";          // name window
  subplot(2, 1, 1); 
     plot(ny2,y2,'bo');
     plot(ny2,y2,'b.');
  plot2d3(ny2,y2,2);                      // Create plot with blue line
title("$(x1*x2)*x3\ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y2(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
//a0.data_bounds=[0,120,-10,10];

 subplot(2, 1, 2); 
     plot(ny4,y4,'bo');
     plot(ny4,y4,'b.');
  plot2d3(ny4,y4,2);                      // Create plot with blue line
title("$x1*(x2*x3)\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y4(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
//a1.data_bounds=[0,15,-1.10,1.10];

// -----------END f2------------------------------------------------------------


//%% ------------------------------------------------
//%%                 Distribution
//%% ------------------------------------------------
[y1, ny1] = fun_sigadd(x2, n2, x3, n3);        // x2+x3
[y2, ny2] = fun_conv_m(x1, n1, y1, ny1);       // x1*(x2+x3)

[y3, ny3] = fun_conv_m(x1, n1, x2, n2);        // x1*x2
[y4, ny4] = fun_conv_m(x1, n1, x3, n3);        // x1*x3
[y5, ny5] = fun_sigadd(y3, ny3, y4, ny4);      // x1*x2 + x1*x3

// ------------START  f3 figure-------------------------------------------------
f3=scf(3);                    //creates figure with id==0 and make it the current one
  f3.figure_size=[800,650];                // adjust window size
  f3.background=8;                         // add background color 8-white
  f3.figure_name="Problem 2.14 Distribution ";          // name window
  subplot(2, 1, 1); 
     plot(ny2,y2,'bo');
     plot(ny2,y2,'b.');
  plot2d3(ny2,y2,2);                      // Create plot with blue line
title("$x1*[x2+x3]\ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y2(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
//a0.data_bounds=[0,120,-10,10];

 subplot(2, 1, 2); 
     plot(ny5,y5,'bo');
     plot(ny5,y5,'b.');
  plot2d3(ny5,y5,2);                      // Create plot with blue line
title("$x1*x2+x1*x3\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y5(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
//a1.data_bounds=[0,15,-1.10,1.10];

// -----------END f3------------------------------------------------------------


//%% -------------------------------------------------------------
//%%                Identity
//%% -------------------------------------------------------------

[y1, ny1] = fun_conv_m(x1, n1, x4, n4);     // x1*delta(n-2)
[y2, ny2] = fun_sigshift(x1, n1, 2);        // x1(n-2)

[y3, ny3] = fun_conv_m(x2, n2, x4, n4);     // x2*delta(n-2)
[y4, ny4] = fun_sigshift(x2, n2, 2);        // x2(n-2)

[y5, ny5] = fun_conv_m(x3, n3, x4, n4);     // x3*delta(n-2)
[y6, ny6] = fun_sigshift(x3, n3, 2);        // x3(n-2)

// ------------START  f4 figure-------------------------------------------------
f4=scf(4);                    //creates figure with id==0 and make it the current one
  f4.figure_size=[800,650];                // adjust window size
  f4.background=8;                         // add background color 8-white
  f4.figure_name="Problem 2.14 Identity1 ";          // name window
  subplot(2, 1, 1); 
     plot(ny1,y1,'bo');
     plot(ny1,y1,'b.');
  plot2d3(ny1,y1,2);                      // Create plot with blue line
title("$x1*\delta(n-n0)\ n0=2 \ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y1(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
//a0.data_bounds=[0,120,-10,10];

 subplot(2, 1, 2); 
     plot(ny2,y2,'bo');
     plot(ny2,y2,'b.');
  plot2d3(ny2,y2,2);                      // Create plot with blue line
title("$x1(n-n0)\ n0=2\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y2(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
a1.data_bounds=[-20,60,-1.10,1.10];

// -----------END f4------------------------------------------------------------


// ------------START  f5 figure-------------------------------------------------
f5=scf(5);                    //creates figure with id==0 and make it the current one
  f5.figure_size=[800,650];                // adjust window size
  f5.background=8;                         // add background color 8-white
  f5.figure_name="Problem 2.14 Identity2 ";          // name window
  subplot(2, 1, 1); 
     plot(ny3,y3,'bo');
     plot(ny3,y3,'b.');
  plot2d3(ny3,y3,2);                      // Create plot with blue line
title("$x2*\delta(n-n0)\ n0=2 \ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y3(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
a0.data_bounds=[-10,35,0,8];

 subplot(2, 1, 2); 
     plot(ny4,y4,'bo');
     plot(ny4,y4,'b.');
  plot2d3(ny4,y4,2);                      // Create plot with blue line
title("$x2(n-n0)\ n0=2\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y4(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
//a1.data_bounds=[0,15,-1.10,1.10];

// -----------END f5------------------------------------------------------------

// ------------START  f6 figure-------------------------------------------------
f6=scf(6);                    //creates figure with id==0 and make it the current one
  f6.figure_size=[800,650];                // adjust window size
  f6.background=8;                         // add background color 8-white
  f6.figure_name="Problem 2.14 Identity3 ";          // name window
  subplot(2, 1, 1); 
     plot(ny5,y5,'bo');
     plot(ny5,y5,'b.');
  plot2d3(ny5,y5,2);                      // Create plot with blue line
title("$x3*\delta(n-n0)\ n0=2 \ sequence $",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y5(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,0,7);             // color, thickness, style
a0=get("current_axes");                // get the handle of the newly created axes
a0.data_bounds=[-10,20,-6,6];

 subplot(2, 1, 2); 
     plot(ny6,y6,'bo');
     plot(ny6,y6,'b.');
  plot2d3(ny6,y6,2);                      // Create plot with blue line
title("$x3(n-n0)\ n0=2\ sequence$",'fontname',7,'fontsize',4);
xlabel('n','fontname',3); ylabel('y6(n)','fontname',3,'fontsize',3);
//xgrid();
xgrid(5,1,7);           // color, thickness, style
a1=get("current_axes");                // get the handle of the newly created axes
a1.data_bounds=[-10,20,-6,6];

// -----------END f6------------------------------------------------------------

  4个原始序列:

       前3个序列分别和第4个序列卷积,结果如下。

       以下三张图都分上下部分,上图为卷积计算所得结果,下图为序列时移所得,可看出两种方法结果一致。

 

posted @ 2022-05-10 16:07  跑啊跑  阅读(32)  评论(0编辑  收藏  举报