信号与系统实验报告

实验一:连续时间信号的频域分析

一、实验目的:

1、掌握连续时间周期信号的傅里叶级数的物理意义和分析方法;

2、观察截短傅里叶级数产生的Gibbs现象,了解其特点及产生的原因;

3、掌握连续时间傅里叶变换的分析方法及其物理意义;

4、掌握各种典型的连续时间非周期信号的频谱特征以及傅里叶变换的主要性质;

5、学习掌握利用MATLAB语言编写计算CTFS、CTFT的程序,并能利用这些程序对一些典型信号进行频谱分析,验证CTFT的若干重要性质。

二、基本要求:

  掌握并深刻理傅里叶变换的物理意义,掌握信号的傅里叶变换的计算方法,掌握利用MATLAB编程完成相关的傅里叶变换的计算。

三、实验原理:

1、连续时间周期信号的傅里叶级数CTFS分析;

2、周期信号的合成以及Gibbs现象。

四、实验内容:

1.参照例2-1程序,上机验证周期方波信号的傅里叶级数Ck并画出幅度谱|Ck|。

 1.1 程序

定义单位阶跃函数和delta函数

% filename u.m

function y = u(t)

y = (t>=0); 

% filename delta.m

function y = delta(t)

dt = 0.001;

y = (u(t)-u(t-dt))/dt;  

将u.m和delta.m分别保存到work文件夹中,并将此文件夹设为工作路径。

>> % Program2_1 Fourier series coefficients of square wave

clear, close all

T = 2;  dt = 0.00001;  t = -2:dt:2;

x1 = u(t) - u(t-1-dt);  x = 0;

w0 = 2*pi/T; N = 5; L = 2*N+1;

for k = -N: N;                    % Fourier series coefficients ak

    ak(N+1+k) = (1/T)*x1*exp(-j*k*w0*t')*dt;

end

amp = abs(ak);  k=-N:N;

subplot(2,1,1); stem(k,amp); title('amplitude-freq');

phi = angle(ak);                % Evaluate the phase of ak

subplot(2,1,2); stem(k,phi); title('phase-freq');

>> 

1.2 幅度谱|Ck|相位谱图像

2.参照例2-2程序,上机验证有限项负指数信号合成周期方波信号时的Gibbs现象。

2.1程序

% Program2_2

T = 2;   w0 = 2*pi/T;   dt = 0.00001;   t = -2:dt:2;

x1 = u(t)-u(t-1-dt);  x = 0; y=0;

for m = -1:1

    x = x + u(t-m*T) - u(t-1-m*T-dt);   % Periodically extend x1(t)

end

N = input('input the number of harmonic components N=:');

L = 2*N+1;

for k = -N:N;

    ak(N+1+k) = (1/T)*x1*exp(-j*k*w0*t')*dt;

end

for q = 1:L;         % Synthesiz the periodic signal y(t)

    y = y+ak(q)*exp(j*(-(L-1)/2+q-1)*2*pi*t/T);

end;        

subplot(2,2,1),

plot(t,x),   title('The original signal x(t)'),   axis([-2,2,-0.2,1.2]),

subplot(2,2,3),

plot(t,y),   title('The synthesis signal y(t)'),   axis([-2,2,-0.2,1.2]),   xlabel('Time t'),

subplot(2,2,2) , k=-N:N;

stem(k,abs(ak),'k.'), title('The amplitude of a(k)'),   axis([-N,N,-0.1,0.6])

subplot(2,2,4)

stem(k, angle(ak),'r.'), 

title('The phase of a(k)'),   axis([-N,N,-2,2]),   xlabel('Index k')

input the number of harmonic components N=:5

Warning: Imaginary parts of complex X and/or Y arguments ignored.

>> 

2.2周期方波信号图像

5次谐波合成图像

20次谐波合成图像

200次谐波合成图像

3.参照2.1节内容,编程实现门函数g2(t)的傅里叶变换G(jw),并画出幅度谱|G(jw)|。

3.1程序

% Program2_3

T=0.01;dw=0.1;t=-10:T:10;w=-4*pi:dw:4*pi;

g=u(t+1)-u(t-1);

G=g*exp(-j*t'*w)*T; %傅里叶变换

G1=abs(G); %计算幅度谱

plot(G1);title('20122813 刘华超');

3.2图像

五、分析与结论:

1.满足狄里赫利条件,任意非周期信号可以看作是由无穷多个不同频率(这些频率都是无限的靠近)的周期复指数信号ejwt的线性组合构成。

2.傅里叶级数的合成式说明,可以用无穷多个成谐波关系的周期复指数信号来合成任意周期信号。然而,用计算机(或任何其它设备)合成一个周期信号,显然不可能做到用无限多个谐波来合成,只能取有限个谐波分量来近似合成。N越大,所选项数越多,有限项级数合成的结果越逼近原信号x(t)。

3.每次执行时,输入不同的N值,比较所得图形的区别,由此可以观察到吉伯斯现象。

实验二:抽样

一、实验目的:

1、理解信号的抽样及抽样定理以及抽样信号的频谱分析;

2、掌握和理解信号抽样以及信号重建的原理;

3、掌握傅里叶变换在信号调制与解调中的应用。

二、基本要求:

  掌握并理解“抽样”定理及其重要意义,理解抽样信号的频谱特征。一般理解信号重建的物理过程以及内插公式所描述的信号重建原理。理解调制与解调的基本概念,理解信号调制过程中的频谱搬移。掌握利用MATLAB仿真正弦幅度调制与解调的方法。

三、实验原理:

1、信号的抽样及抽样定理;

2、信号抽样过程中的频谱混叠;

3、信号重建。

四、实验内容:

1.参照程序4-1,上机考察对信号采用不同抽样频率抽样时的频谱混叠现象,验证奈奎斯特抽样定理。

1.1程序

>> % Program4_1

clear, close all,

tmax = 4; dt = 0.01; t = 0:dt:tmax; Ts = 1/5; ws = 2*pi/Ts;

w0 = 20*pi; dw = 0.1; w = -w0:dw:w0; n = 0:1:tmax/Ts; 

x = exp(-4*t).*u(t);  xn = exp(-4*n*Ts);

subplot(221), plot(t,x), title('A continuous-time signal x(t)'),

xlabel('Time t'), axis([0,tmax,0,1]), grid on

subplot(223), stem(n,xn,'.'), title('The sampled version x[n] of x(t)'),xlabel('Time index n'), axis([0,tmax/Ts,0,1]), grid on

Xa = x*exp(-j*t'*w)*dt;        % Fourier transform of x(t)

X = 0;

for k = -8:8;

    X = X + x*exp(-j*t'*(w-k*ws))*dt/Ts;  % spectrum periodic extend

end

subplot(222), plot(w,abs(Xa))

title('Magnitude spectrum of x(t)'), grid on

axis([-60,60,0,1.8*max(abs(Xa))])

subplot(224), plot(w,abs(X))

title('Magnitude spectrum of x[n]'),

xlabel('Frequency in radians/s'),grid on

axis([-60,60,0,1.8*max(abs(Xa))])

1.2图像

Ts = 1/5时:

Ts = 1/10时:

Ts = 1/40时:

2.参照程序4-2,上机验证:不同抽样频率得到的抽样信号重构原连续时间信号的重构效果,进一步验证奈奎斯特抽样定理。

2.1程序

>> % Program4_2  Signal sampling and reconstruction

% Original signal: x(t) = [1+cos(pi*t)].*[u(t+1)-u(t-1)].

clear; close all,

wm = 2*pi;                                % The highest frequency of x(t)

t0 = 2;  t = -t0:0.01:t0;

a = input('Input frequency rate ws/wm=:');

ws = a*wm;                          % Sampling frequency

Ts = 2*pi/ws;                        % Sampling period

N = fix(t0/Ts);                       % Determine the number of samplers

wc = wm;               % The cutoff frequency of the ideal lowpass filter

x = (1+cos(pi*t)).*(u(t+1)-u(t-1));

subplot(221);                              % Plot the original signal x(t)

plot(t,x); grid on, axis([-2,2,-0.5,2.5]);title('Original signal x(t)');

xlabel('Time t');

n = -N:N; nTs = n*Ts;                 % The discrete time variable

xs = (1+cos(pi*nTs)).*(u(nTs+1)-u(nTs-1));     % The sampled x[n]

subplot(2,2,2), stem(n,xs,'.'); xlabel('Time index n'); grid on,

title('Sampled version x[n]');

xr = zeros(1,length(t));  L = length(-N:N);

figure(2);                                 % Open a new figure window

stem(nTs,xs,'.'); xlabel('Time index n'); grid on;hold on

for i = 1:L                               

    m = (L-1)/2+1-i;

    xa = Ts*(wc)*xs(i)*sinc((wc)*(t+m*Ts)/pi)/pi;

    plot(t,xa,'b:');axis([-2,2,-0.5,2.5]); hold on

    pause                                   %暂停,按任意键继续执行

    xr = xr+xa;                            % Interpolation

end

plot(t,xr,'r'); axis([-2,2,-0.5,2.5]); hold on

figure(1);

subplot(223), plot(t,xr,'r');axis([-2,2,-0.5,2.5]);

xlabel('Time t');grid on, title('Reconstructed signal xr(t)');

% Compute the error of reconstruction

error = abs(xr-x);  subplot(2,2,4), plot(t,error);grid on

title('Error');xlabel('Time t')

Input frequency rate ws/wm=:1.5

2.2图像

ws/wm=:1.5时:

ws/wm=:3时:

五、分析与结论:

1.程序运行时输入1.5后回车,则Ws=1.5WM不满足采样定理,不能够由采样信号x[n]重构出原始信号x(t);程序运行时输入3后回车,则Ws=3WM满足采样定理,能够由采样信号x[n]重构出原始信号x(t)。

2.抽样信号的频谱等于原连续时间信号的频谱以抽样频率ws为周期进行周期复制的结果。

3.当抽样频率 ws > 2wM 时,将原连续时间信号x(t)抽样而得到的离散时间序列x[n]可以唯一地代表原连续时间信号,或者说,原连续时间信号x(t)可以完全由x[n]唯一地恢复。

 

第二篇:信号与系统课程设计报告--循环卷积和离散卷积的计算机计算

信号与系统

课程设计报告

学院电气与电子工程学院

班级电气1010

学号  

姓名 

目录

设计概述

   1 设计题目………………………………………………3

2 设计目的………………………………………………3

3 具体步骤………………………………………………3

4 实现方法………………………………………………4

设计目标…………………………………………………4

设计内容

   1 原理学习………………………………………………4

     1.1循环卷积…………………………………………..5

     1.2离散卷积…………………………………………..5

2 程序流程图……………………………………………6

   3 c语言编程与计算

3.1 c语言程序………………………………………...7

3.2计算结果…………………………………………..8

   4 验证计算结果

4.1 验算循环卷积……………………………………9

4.2 验算离散卷积……………………………………9

体会与感想……………………………………………..10

参考文献………………………………………………..10

一 设计概述

设计题目: 循环卷积和离散卷积的计算机计算

设计目的:1、自学C语言以及巩固信号与系统离散卷积与循环卷积的内容;

          2、培养独立思考以及灵活应用所学知识的能力;

          3、培养和掌握正确的设计思想和认真负责的设计态度;

          4、自行检验与调试出精确、简便、实用、可靠的设计方法。

具体步骤:①仔细分析设计题目、目的及内容;

          ②分析离散卷积与循环卷积的特点与异同;

          ③分析计算步骤并画出流程图;

          ④用C语言进行编程并用VC6.0进行演算;

          ⑤自行计算进行验算;

⑥分析结果并分享体会

运用软件:office word2003  VC6.0

实现方法: 通过学习课本及参阅相关书籍以及网络,从理论上分析离散卷积和循环卷积的特点;学习用Word设计程序流程图,C语言编程进行计算,并验证计算结果。

 

二 设计目标

设有两离散序列,则两序列的循环卷积和离散卷积分别为:

画出计算此两卷积的程序框图,并用C语言编写计算程序,计算出结果。

学生用C语言编程,分析计算结果。

三 设计内容

离散卷积和循环卷积的计算机计算

原理学习

卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

1.1  循环卷积

循环卷积比起线性卷积,在运算速度上有很大的优越性,它可以采用快速傅里叶变换(FFT)技术,若能利用循环卷积求线性卷积,会带来很大的方便。一般情况下,n≧N时x[n]*v[n]并不等于零,x[n]*v[n]的N点DFT和这些值不一致。因此,有必要定义一种卷积运算,使得n=0,1,…,N-1之外的卷积信号x[n]*v[n]等于零,这就引出循环卷积的概念。离散卷积和循环卷积之间的唯一区别是:用折叠位移(模N)信号代替了离散卷积式中的折叠位移信号。

对于循环卷积来说,不仅要知道这两组数而且要确定N值。

1.2离散卷积

信号与线性系统中,定义x[n],v[n],其卷积为 计算离散卷积时,首先将x[n],v[n]中的离散时间序号n改为i,得到信号x[i],v[i],下一步确定v[n-i]和乘积x[i]v[n-i]。信号v[n-i]是信号v[i]的反折和平移,通过对x[i]v[n-i]中的i求和即可计算出来,式中i取一定范围的的整数。

计算离散卷积时需要用户输入x[n]和v[m]的值,这样便可以得到所要求的离散卷积的值

3  c语言编程与计算

 3.1  c语言程序

#include<stdio.h>

#include<stdlib.h>

void discreat();

void circle(); 

void main()

{int i;

 printf("欢迎使用卷积计算程序\n");

 printf("请进行选择,输入1进行循环卷积计算,输入2进行离散卷积计算:");

scanf("%d",&i);

printf("\n");

while(i!=1&&i!=2)

{printf("输入错误,请重新选择:");

 scanf("%d",&i);

}

if(i=1)

circle();

else

discreat(),i--;

if(i=1)

discreat();

else

circle();

printf("感谢使用\n");

system("pause");

}

void circle()

{

       int i,j;

       i=j=0;

       int t;

       float a[100],b[100],c[200];

       printf("现在计算循环卷积y\n");

       printf("请输入N的值\n");

       scanf("%d",&t);

       printf("请输入x[n]\n");

       for(i=0;i<=t-1;i++)

              scanf("%f",&a[i]);

       printf("请输入v[m]\n");

       for(i=0;i<=t-1;i++)

              scanf("%f",&b[i]);

       for(j=0;j<=t-1;j++)c[j]=0;

           for(j=0;j<=t-1;j++)

              for(i=0;i<=t-1;i++)

                     if((j-i)>=0)

                            c[j]+=a[i]*b[j-i];

                     else if((j-i)<0)

                            c[j]+=a[i]*b[j-i+t];

       printf("循环卷积y[n]为\n");

       for(j=0;j<=t-1;j++)

              printf("y[%d]=%f\n",j,c[j]);

}

void discreat()

{int n,m,k,q;

       n=m=k=q=0;gg

       static float x[100],y[100],z[200];                     

       printf("计算离散卷积y\n");

       printf("请输入x[n]的长度\n");

       scanf("%d",&n);

       printf("请输入v[m]的长度\n");

       scanf("%d",&m);

       printf("请输入x[n]\n");

       for(k=0;k<=n-1;k++)

              scanf("%f",&x[k]);

       printf("请输入v[m]\n");

       for(k=0;k<=m-1;k++)

              scanf("%f",&y[k]);

       for(q=0;q<=m+n-2;q++)

              for(k=0;k<=n-1;k++)

                     if((q-k)>=0)

                            z[q]+=x[k]*y[q-k];

       printf("离散卷积y[n]为\n");

       for(q=0;q<=m+n-2;q++)

              printf("y[%d]=%f\n",q,z[q]);

       printf("其余值均为0\n");    

}

3.2计算结果

4 验证计算结果

 4.1 验算循环卷积

4.2 验算离散卷积

阵列方法:

1     2      3

3     2      1

3     2      1

      6      4

             9

3     8     14

  验算结果与编程计算结果一致。

四 体会与感想

本次课设花了不少心思,主要在细节问题上不能够做到一步到位,所以在检查过程中耗费了不少时间。同时对于C语言的学习,没有做到稳固。所以导致以前学的很多知识都已经忘记,不得不又拾起以前的课本。但至少这一次课设让我温习了以前的知识也懂得了知识需要时时刻刻去温习。免得以前的知识白学了,当然,在成功后还是蛮有成就感的。又是一个自己做的成果,很满足。

五 参考书目

1.Fundamentals of Signals and Systems -Using the Web and MATLAB

Edward W.Kamen Bonnie S.Heck著 科学出版社

2. 中文版office2003实用教程 徐贤军 著 清华大学出版社

3.《c程序设计(第三版)》 谭浩强 著 清华大学出版社

相关推荐