序列的卷积和快速卷积运算的编程实现
- 格式:docx
- 大小:180.85 KB
- 文档页数:16
实验三信号卷积的MATLAB实现一、实验名称:信号卷积的MATLAB实现二、实验目的:1.增加学生对卷积的认识2.了解MATLAB这个软件的一些基础知识3.利用MATLAB计算信号卷积4.验证卷积的一些性质三、实验原理:用MATLAB实现卷积我们先必须从信号下手,先把信号用MATLAB语句描述出来,然后再将这些信号带入到我们写好的求卷积的函数当中来计算卷积。
在本章中我们将信号分为连续信号和离散序列两种来实现卷积并验证卷积的一些性质。
MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化提供了强有力的工具。
在MATLAB中通常有两种方法来表示信号,一种是用向量来表示信号,另一种则是用符号运算的方法来表示信号。
用适当的MATLAB 语句表示出信号后,我们就可以利用MATLAB的绘图命令绘制出直观的信号波形。
连续时间信号,是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的值与之对应的信号。
从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
在MATLAB中连续信号可用向量或符号运算功能来表示。
1.向量表示法对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中向量t是行如t=t1:p:t2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为中止时间,p为时间间隔。
向量f为连续信号f(t)在向量t所定义的时间点上的样值。
例如对于连续信号f(t)=sin(t),我们可以用如下两个向量来表示:t=-10:1.5:10;f=sin(t)用上述向量对连续信号表示后,就可以用plot命令来绘出该信号的时域波形。
Plot命令可将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线。
命令如下:plot(t,f)title(‘f(t)=sint’)xlabel(‘t’)axis([-10,10,-1.1,1.1])绘制的信号波形如图3.1所示,当把时间间隔p取得更小(如0.01)时,就可得到sint较好的近似波形,如图3.2所示。
姓名:高铭遥 班级:16131701 学号:1120171450 成绩:实验二 DFT/FFT 的应用-利用FFT 实现快速卷积[实验目的]1.深刻理解DFT/FFT 的概念和性质,进一步掌握圆周卷积和线性卷积两者之间的关系。
2.掌握DFT/FFT 的应用。
理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好地利用FFT 进行数字信号处理。
[实验内容及要求]1.给定两个序列()[]2,1,1,2x n =,()[]1,1,1,1h n =--。
首先直接在时域计算两者的线性卷积;然后用FFT 快速计算二者的线性卷积,验证结果。
(1)线性卷积 程序代码:figure(1);N1=4; N2=4; xn=[2,1,1,2]; hn=[1,-1,-1,1];N=N1+N2-1;%卷积后的序列长度 yn=conv(xn,hn);%线性卷积 x=0:N-1;stem(x,yn);title('线性卷积'); 运行结果:(2)FFT 卷积快速卷积 程序代码: figure(1); n=0:1:3; m=0:1:3;N1=length(n);%xn 的序列长度 N2=length(m);%hn 的序列长度 xn=[2,1,1,2]; hn=[1,-1,-1,1];姓名:高铭遥 班级:16131701 学号:1120171450 成绩:N=N1+N2-1;%卷积后的序列长度XK=fft(xn,N);%xn 的离散傅里叶变换 HK=fft(hn,N);%hn 的离散傅里叶变换 YK=XK.*HK;yn=ifft(YK,N);%逆变换if all(imag(xn)==0)&&(all(imag(hn)==0))%实序列的循环卷积仍为实序列 yn=real(yn); endx=0:N-1;stem(x,yn);title('FFT 卷积'); 运行结果:结果分析:对比(1)和(2)直接线性卷积和FFT 快速卷积的结果可以验证,用FFT 线性卷积的结果是与直接卷积的结果相同的,FFT 可以实现快速卷积,提高运算速度。
在Python中,NumPy库提供了一个快速的卷积算法,可以通过numpy.convolve 函数进行实现。
这个函数可以用于一维和二维卷积操作。
下面是一些基本的示例:一维卷积import numpy as np# 输入信号signal = np.array([1, 2, 1, 2, 1])# 卷积核kernel = np.array([1, 0, -1])# 进行卷积操作result = np.convolve(signal, kernel, mode='valid')print("原始信号:", signal)print("卷积核:", kernel)print("卷积结果:", result)二维卷积import numpy as npfrom scipy.signal import convolve2d# 输入图像image = np.array([[1, 2, 1],[0, 1, 0],[-1, 0, 1]])# 卷积核kernel = np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1]])# 进行二维卷积操作result = convolve2d(image, kernel, mode='valid')print("原始图像:")print(image)print("卷积核:")print(kernel)print("卷积结果:")print(result)这些示例使用了NumPy库的convolve 函数进行一维卷积和convolve2d 函数进行二维卷积。
mode='valid' 表示使用有效卷积(不进行边界填充)。
如果你需要更多卷积的选项,可以查阅NumPy和SciPy的文档,这两个库提供了丰富的卷积和滤波操作。
本科实验报告实验名称:数字信号处理实验实验1 利用DFT 分析信号频谱一、实验目的1.加深对DFT 原理的理解。
2.应用DFT 分析信号频谱。
3.深刻理解利用DFT 分析信号频谱的原理,分析现实过程现象及解决办法。
二、实验原理1、DFT 和DTFT 的关系有限长序列()x n 的离散时间傅里叶变换()j X e ω在频率区间(02)ωπ≤≤的N个等分点{(0),(1),(),(1)}x x x k x N-……上的N 个取样值可以由下式表示:2120()|()()01(21)N jkn j Nk k X e x n eX k k N πωωπ--====≤≤--∑由上式可知,序列()x n 的N 点DFT ()X k ,实际上就是()x n 序列的DTFT 在N 个等间隔频率点{(0),(1),(),(1)}X X X k X N -……上样本()X k 。
2、利用DFT 求DTFT方法1:由()X k 恢复出()j X eω的方法如图2.1所示:图 2.1.由 N 点DFT 恢复频谱DTFT 的流程由图2.1所示流程图可知:01()()()(22)j j nkn j n N n n k X e x n eX k W e N ωωω∞∞∞---=-∞=-∞=⎡⎤==-⎢⎥⎣⎦∑∑∑ 由式2-2可以得到12()()()(23)Nj k kx e X k N ωπφω==--∑其中()x φ为内插函数12sin()2()(24)sin()2N j N e N ωωφωω--=•-方法2:然而在实际MATLAB 计算中,上诉插值公式不见得是最好的方法。
由于DFT 是DTFT 的取样值,其相邻的两个频率样本点的间距为2Nπ,所以如果我们增加数据的长度N ,使得得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样可以利用DFT 来近似计算DTFT 。
如果没有更多的数据,可以通过补零来增加数据长度。
快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley 和Tukey 提出了计算离散傅里叶变换(DFT )的快速算法,将DFT 的运算量减少了几个数量级。
从此,对快速傅里叶变换(FFT )算法的研究便不断深入,数字信号处理这门新兴学科也随FFT 的出现和发展而迅速发展。
根据对序列分解与选取方法的不同而产生了FFT 的多种算法,基本算法是基2DIT 和基2DIF 。
FFT 在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。
快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。
DFT 的定义式为)(k X =)()(10k R W n x N N n knN∑-= 在所有复指数值knN W 的值全部已算好的情况下,要计算一个)(k X 需要N 次复数乘法和N -1次复数加法。
算出全部N 点)(k X 共需2N 次复数乘法和)1(-N N 次复数加法。
即计算量是与2N 成正比的。
FFT 的基本思想:将大点数的DFT 分解为若干个小点数DFT 的组合,从而减少运算量。
N W 因子具有以下两个特性,可使DFT 运算量尽量分解为小点数的DFT运算:(1) 周期性:k N n N kn N nN k N W W W )()(++== (2) 对称性:k N N k NW W -=+)2/(利用这两个性质,可以使DFT 运算中有些项合并,以减少乘法次数。
例子:求当N =4时,X(2)的值)()]3()1([)]2()0([)()]3()1([)]2()0([)3()2()1()0()()2(04240464442404324对称性-=周期性W x x x x W x x W x x W x W x W x W x W n x X n n +++++=+++==∑=通过合并,使乘法次数由4次减少到1次,运算量减少。
离散信号的产生、显示及离散序列的卷积和matlab实现离散信号的产生可以通过一个生成离散序列的函数来实现。
Matlab提供了一些内置的函数来生成常见的离散信号,例如单位阶跃函数(heaviside)、单周期方波(square)、正弦信号(sin)、脉冲(impulse)等。
离散信号的显示可以使用Matlab的plot函数来实现。
将离散序列作为函数的输入参数,然后使用plot函数绘制出序列的图像。
离散序列的卷积可以使用conv函数来实现。
conv函数接受两个输入信号,并返回它们的离散卷积结果。
下面是一个示例代码演示离散信号的产生、显示和离散序列的卷积:```matlab% 产生离散信号n = 0:1:9; % 定义离散点的范围x1 = heaviside(n-2); % 单位阶跃函数x2 = square(n); % 单周期方波x3 = sin(n); % 正弦信号% 显示离散信号figure;subplot(3,1,1);stem(n, x1);title('单位阶跃函数');subplot(3,1,2);stem(n, x2);title('单周期方波');subplot(3,1,3);stem(n, x3);title('正弦信号');% 离散序列的卷积h = [1, 2, 1]; % 卷积核y = conv(x3, h); % 卷积运算figure;subplot(2,1,1);stem(x3);title('输入信号');subplot(2,1,2);stem(y);title('卷积结果');```在上面的代码中,首先定义了离散序列的范围n,然后使用内置函数生成了三个不同的离散信号x1、x2和x3。
接下来,使用subplot函数将三个离散信号的图像显示在一个图形窗口中。
最后,定义了一个卷积核h,并使用conv函数对x3进行卷积运算,得到卷积结果y。
1引言信号的卷积是针对时域信号处理的一种分析方法,信号的卷积一般用于求取信号通过某系统后的响应。
在信号与系统中,我们通常求取某系统的单位冲激响应,所求得的h(k)可作为系统的时域表征。
任意系统的系统响应可用卷积的方法求得。
离散时间信号是时间上不连续的“序列”,因此,激励信号分解为脉冲序列的工作就很容易完成,对应每个样值激励,系统得到对此样值的响应。
每一响应也是一个离散时间序列,把这些序列叠加既得零状态响应。
因为离散量的叠加无需进行积分,因此,叠加过程表现为求“卷积和”。
LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。
本课程设计就是利用LabVIEW软件来实现方波序列卷积的过程,然后对方波序列移位过程进行演示,通过卷积过程演示和卷积和的波形图可以看出,方波序列的幅值大小不会影响卷积和的宽度而方波序列的宽度大小就会影响卷积序列相交部分的范围宽度即卷积宽度。
通过labview你能直观清晰地观察卷积的过程。
2虚拟仪器开发软件LabVIEW8.2入门2.1 LabVIEW介绍LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。
传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定VI及函数的执行顺序。
VI指虚拟仪器,是 LabVIEW]的程序模块。
LabVIEW 提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。
用户界面在 LabVIEW中被称为前面板。
使用图标和连线,可以通过编程对前面板上的对象进行控制。
信号与系统序列卷积的简便算法
序列卷积的方便算法
——杨曦序列卷积的计算我们常常遇到,但能用的方法老
师教过两种:图解法和列表法。
图解法主要用来解释卷积的定义,实际做起来不胜其繁;列表法虽然简单,不过要先划表线 (当然熟了也可不用),标注离散时间,最后还要斜向相加,做起来也不利索。
这里介绍一种谁都会做的方法,做起来极快。
其实无线电系的瞎子都能证明,但注意到此的人似乎极少,是以吾推荐之。
本方法的“ 奥妙” 在于:两个多项式的积的系数序列,正是以这两个多项式系数构成的两个序列的序列卷积,多项式的指数等于序列对应点的离散时间。
例: {a}: a[-1]=2, a[0]=1, a[1]=3, a[2]=4
{b}: b[2]=.5, b[3]=4, b[4]=-1, b[5]=2
计算 c=a*b 。
解: 2 1 3 4
× .5 4 -1 2
————————————————
4 2 6 8
-2 -1 -3 -4
8 4 12 16
+1 .5 1.5 2
————————————————————
1 8.5 3.5 17 15
2 8
∴ c[1]=1, c[2]=8.5, c[3]=3.5, c[4]=17
c[5]=15, c[6]=2 c[7]=8
不难看出,其实这种方法与列表法无异。
不过把表斜着列,从而竖着相加而已。
课程设计任务书学生姓名:韩新颖专业班级:电信1203班指导教师:阙大顺王虹工作单位:信息工程学院题目: 序列的卷积和快速卷积运算的编程实现初始条件:1.Matlab6.5以上版本软件;2.课程设计辅导资料:“Matlab语言基础及使用入门”、“数字信号处理原理与实现”、“Matlab及在电子信息课程中的应用”等;3.先修课程:信号与系统、数字信号处理、Matlab应用实践及信号处理类课程等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.课程设计时间:1周(课内实践);2.课程设计内容:序列的卷积和快速卷积运算的编程实现,具体包括:直接卷积及应用、快速卷积方法及实现、两者的比较分析等;3.本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结;4.课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:①目录;②与设计题目相关的理论分析、归纳和总结;③与设计内容相关的原理分析、建模、推导、可行性分析;④程序设计框图、程序代码(含注释)、程序运行结果和图表、实验结果分析和总结;⑤课程设计的心得体会(至少500字);⑥参考文献;⑦其它必要内容等。
指导教师签名:年月日系主任(或责任教师)签名:年月日摘要卷积在数字信号处理中有着重要的作用。
然而直接计算卷积的运算量非常大,它与序列长度的平方成反比,因此制约了卷积的应用。
快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间。
通过分析我们可在MATLAB里编程实现。
关键词:卷积;快速卷积;MATLAB。
目录1、直接卷积及应用 (1)1.1卷积的定义 (1)1.2、卷积的运用 (1)2、快速卷积方法及实现 (2)2.1快速卷积运算原理 (2)2.2实现方法 (3)2.2.1重叠相加法 (3)2.2.2重叠保留法 (3)3、直接卷积和快速卷积的分析比较 (4)4、程序设计及仿真结果分析 (4)5、心得体会 (11)6、参考文献 (12)1、直接卷积及应用1.1卷积的定义设:f(x),g(x)是R1上的两个可积函数,作积分:可以证明,关于几乎所有的实数x,上述积分是存在的。
这样,随着x的不同取值,这个积分就定义了一个新函数h(x),称为函数f与g的卷积,记为h(x)=(f*g)(x)。
1.2、卷积的运用卷积是数字信号处理中最常见,也是最重要的运算之一,利用卷积可以实现相关计算和FIR滤波等等,正因为卷积如此重要,所以半个世纪以来,学者们提出了多种不同卷积实现结构。
设输入信号为x(t),其频谱函数为X(jΩ)该信号通过滤波器h(t)后,其输出信号y(t)的频谱函数Y(jΩ)是频谱函数x(jΩ)与滤波器的频谱函数H(jΩ)的乘积,即:Y(jΩ)=X(jΩ)H(jΩ)而在时域,输出信号y(t)实际是输入信号x(t)与滤波器h(t)的卷积,就是说频谱函数的乘积相当于时间函数的卷积,反之亦然,即:y(t)=x(t)*h(t)在数字信号处理系统中,无论在时域还是频域都离不开卷积运算和快速傅里叶运算,Matlab具有强大的矩阵运算能力。
方便实用的绘图功能和语言的高度集成性。
在DSP开发中,使用Matlab可以快速对系统进行仿真运算。
2、快速卷积方法及实现2.1快速卷积运算原理在信号处理中,许多具体的应用是以线性卷积为基础的。
当满足一定条件时,可以用圆周卷积来计算线性卷积。
由圆周卷积定理知道,圆周卷积可以借助DFT来运算,因此DFT的快速算法FFT就可以用来计算线性卷积。
设x1(n)与x2(n)分别是长度为N与M的有限长序列,它们的线性卷积为y l(n),L点的圆周卷积为y c(n),它们的关系为y c(n)=∑y l(n+rL)R l(n)由上式可知圆周卷积是线性卷积以L为周期进行延拓后,再取主值序列的结果。
当满足L>M+N-1时,周期延拓不发生混叠,就可以用圆周卷积来计算线性卷积。
由圆周卷积定义可知,可以用FFT分别求出x1(n)与x2(n)的L点DFT X1(k)与X2(k),即X1(k)=DFT[ x1(n)],X2(k)=DFT[ x2(n) ],再用IFFT计算X1(k)X2(k)的L点IDFT得y c(n),也就是x1(n)与x2(n)的线性卷积为y l(n),即y l(n)=y c(n)=IDFT[X1(k)·X2(k)]下图为上述过程的示意图x1(n)y c(n)=y l(n)x2(n)2.2实现方法在实际应用中,常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需补很多的零点,这样就需要大的存储量,运算时间也会变长。
常用的解决方法有两种,一是重叠相加法,另一种是重叠保留法。
2.2.1重叠相加法设序列x1(n)为无限长序列,序列x2(n)是长度为M的序列,由x1(n)构成长度为N的有限长序列x1k(n)= x1(n), kN<n<(k+1)N-1= 0 其他(式2.1)因此x1k(n)= ∑x1k(n) (式2.2)将式子代入卷积公式有Y(n)=x1(n)*x2(n)=x2(n)* ∑x1k(n)=∑x1k(n)*x2(n)= ∑y k(n) (式2.3)式中,y k(n)=x2(n)*x k(n)= ∑x2(m)x k(n-m) (式2.4)式(2.3)表示,计算x1(n)与x2(n)的线性卷积y(n)时,可以先分段计算y k(n),然后再叠加起来即可。
因为y k(n)的长度为M+N-1,因此y k(n)的后N-1个值与y k+1(n)的前N-1个值重叠,因此必须把y k(n)的后N-1个值与y k+1(n)前的N-1个值相加,因为称为重叠相加法。
2.2.2重叠保留法为了克服重叠相加法中分段卷积后任然需要相加的缺点,人们提出了重叠保留法。
与重叠相加法不同的是,在对无限长序列x1(n)的后M-1个抽样值与后一段x k+1(n)的前M-1个抽样值相同,且分段的长度选圆周卷积的长度L,这样形成的分段序列为然后计算x2(n)与各分段x1k(n)之间的卷积:Y k’=x2(n)*x1k(n)显然,y k’(n)的前M-1个值发生了混叠,不等于x2(n)与x1k(n)的线性卷积。
把y k’(n)的前M-1个值舍去,保留y k’(n)没有发生混叠的后N个值,形成序列X1k= x(n+kN-M+1), 0<n<L-1= 0 其他最后输出序列y(n)= ∑y k(n-kN+M-1)3、直接卷积和快速卷积的分析比较卷积是数字信号处理中最常见的,也是最重要的运算之一。
利用卷积可以实现相关计算和FIR滤波等等,正因为卷积如此重要,所以半个世纪以来,学者们提出了多种不同卷积实现结构,这些结构各有优点,针对不同应用可以灵活选择,而其中快速卷积无疑是重要的卷积方法之一。
顾名思义,快速卷积重点在一个“快”,如果对卷积速度要求较高,快速卷积无疑是理想的工具。
当然,为了提高速度,就要牺牲面积和功耗4、程序设计及仿真结果分析1、已知线性非移变系统的h(n)=[6,2,3,6,4,2],输入为x(n)=[1,2,3,4,5];(1)用人工计算系统输出y(n);(2)编写程序输出y(n),并作图。
人工计算:长度为m的向量序列h和长度为n的向量序列x,卷积w的向量序列长度为(m+n-1),当不等于n时,应以0补齐阶次低的向量的高位后进行计算y(1)=h(1)*x(1)y(2)=h(1)*x(2)+h(2)*x(1)...y(n)=h(1)*x(n)+h(2)*x(n-1)+...+h(n)*x(1)...y(m+n-1)=h(1)*x(m+n-1)+h(2)*x(m+n-2)+...+h(m+n-1)*x(1)那么根据这个规律人工计算的结果为y(n)=[6,14,25,36,63,50,55,52,28,10]用matlab仿真编程程序如下:h=[6,2,3,6,4,2];x=[1,2,3,4,5];y=conv(h,x);stem(y)结果如图4.1所示:图4.1由图4.1和自己求出的y(n)函数相比较可以得到,用matlab编写程序得出的系统输出函数与自己人工计算的结果相同。
2、用函数conv和FFT计算长为1000序列的卷积,比较其计算时间。
在matlab实现卷积的.函数为CONV,对于N值较小的向量,这是十分有效的对于N大的向量卷积可用FFT加快计算速度。
若DFT和IDFT均采用FFT和IDFT法,可提高卷积速度。
计算x1(n)和x2(n)的线性卷积的FFT算法可由下面步骤实现:1、计算X1(k)=FFT[x1(n)];2、计算X2(k)=FFT[x2(n)];3、Y(k)=X1(k)·X2(k);4、计算x1(n)×x2(n)=IFFT[Y(k)]在本题目中计算的两个函数分别是x1(n)=2*10^n,x2(n)=cos(n^3)。
用Matlab编写的程序如下:L=1000;N=L*2-1;n=1:L;x1=2*(n.^10);x2=cos(n.^3);t0=clock;yc=conv(x1,x2);conv_time=etime(clock,t0)N=pow2(nextpow2(L*2-1));t0=clock;yf=ifft(fft(x1,N).*fft(x2,N));fft_time=etime(clock,t0)subplot(221),stem(x1,'.');ylabel('x(n)');subplot(222),stem(x2,'.');ylabel('h(n)');subplot(212),stem(real(yc),'.');ylabel('y(n)');在Matlab中编程以及得出的完成程序所需的时间如图4.2:图4.2输出结果如图4.3:图4.3该题要求的是对用函数conv 和FFT 计算1000点的序列卷积所需的时间进行对比,通过图4.2可知,用函数conv 计算该卷积需要0.0100s ,而用FFT 计算该卷积需要0s ,由此可以得出:FFT 算法所消耗的时间远小于函数conv 要消耗的时间。
3、用快速卷积法计算()0.9()n M x n R n =和()()N h n R n =两个序列的卷积;并测试直接卷积和快速卷积的时间。
利用快速卷积原理求两个函数的卷积可以用题目二中所用的方法(先分别对两个函数求傅里叶变换得到X(k)与H(k),再两个函数傅里叶变换的点乘的结果y(k),最后直接对y(k)求傅里叶反变换得到y(n))快速卷积,得到所要求的结果。