MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科祥斗凯学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域谨唤提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式。 [1]
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。MATLAB的基本销枝数据单位是矩阵,它的指令表达式与数学、工程中常用的.形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
function[f,k]=sconv(f1,f2,k1,k2,p)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
%f:卷积旁裤积分f(t)对应的非零样值向量
%k:f(t)的对应时间向量
%f1:f1(t)非零样值向量
%f2:f2(t)的非零样值向运如简量
%k1:f1(t)的对应时间向量
%k2:f2(t)的对应时间向量
%p:取样时间间隔
f=conv(f1,f2)
f=f*p
k0=k1(1)+k2(1)
k3=length(f1)+length(f2)-2
k=k0:p:k0+k3*p
subplot(2,2,1)
plot(k1,f1)
title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot(2,2,2)
plot(k2,f2)
title('f2(t)')
subplot(2,2,3)
plot(k,f)
h=get(gca,'position')
h(3)=2.5*h(3)
set(gca,'position',h)
title('f(t)=f1(t)*f2(t)')
xlabel('t')
ylabel('f(t)')
如果你就当这两个都是从1开始的,
直接卷积掉,
结果是5个数,
第一个数就是x(1)*h(1),
这也是你要的卷积当中的一个,
只是在你要的结果里,这个是x(0)*h(-1)
,所以在结果的序号是-1而不是1,
所以你只要把结果平移就可以了
因为matlab不支持负数序号的数组,
所以你最好只是“在心里平移”就好了,
就是说你橡庆保存的还是这个结果,
只是写程序的时候记住了,
这个是从-1开始的
你只需要在画图的时候指定横坐标
plot(-1:3,
conv(x,
h))
x=[1,2,3,4,5]y=[6,7,8]N=5;
X1=fft(x,8)Y1=fft(y,8)
for i=1:N
Z1(i,1)=X1(i,1)*Y1(i,1)
end
z1=ifft(Z1)
z1=z1(1:7)
线性卷积和循环卷积是两个概念.你先前求出来的就是循环卷积,相当于线性卷积的最后两点加到头上.如果是要利用频域循环卷积的性质来求线性卷物汪积,通常是利用补零的方法,相当于对5点的x和3点的y做8点的FFT,频域相乘之后,再反变察物换回来即可.提问时,感觉你败蚂液两种卷积的概念混淆了.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)