
p=001;
t1=0:p:1;
f1=ones(size(t1));
t2=1:p:3;
f2=ones(size(t2));
f=conv(f1,f2); %计算序列x与h的卷积和f
f=fp;
t0=t1(1)+t2(1); %计算序列f非零样值的起点位置
t3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度
t=t0:p:(t3p+t0); %确定卷积和f非零样值的时间向量
subplot(2,2,1)
plot(t1,f1) %在子图1绘x(t)时域波形图
title('x(t)')
xlabel('t1')
ylabel('x(t)')
subplot(2,2,2)
plot(t2,f2) %在子图2绘h(t)时波形图
title('h(t)')
xlabel('t2')
ylabel('h(t)')
subplot(2,2,3)
plot(t,f); %画卷积y(t)的时域波形
h=get(gca,'position'); %获取坐标轴的未知属性
h(3)=25h(3);
set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的25倍
title('y(t)=x(t)h(t)')
xlabel('t')
ylabel('y(t)')
用matlab中con函数求卷积
nction coresult = xcorr_my(A,B)
% XCORR_MY 自编相关函数
% copyright @lskyp 2009
% 20090511
length1 = length(A);
length2 = length(B);
if length1 ~= length2
if length1
呵呵时域的卷积等于频域的直接相乘
我们先将他们傅里叶变化,相乘后反傅里叶变化就可以了
conv是离散信号的卷积,不是连续信号的卷积函数
>> f=fourier(sin(t))fourier(cos(t))
f =
ipi^2(dirac(w+1)-dirac(w-1))(dirac(w+1)+dirac(w-1))
>> ifourier(f)
ans =
ipi^2(-ifourier(dirac(w-1)^2,w,x)+ifourier(dirac(w+1)^2,w,x))
如果你要的是符号卷积那就没有直接的功能函数要自己写出卷积表达式,再用符号积分函数去积,经常积不出如果是数值积分(序列)有conv这一族函数(help里面有相关函数那些)其实你要卷积还不如直接去算F变换再去求反变换来的方便
线性卷积在matlab中编写可使用以下方法:
Matlab中的线性卷积函数conv(xn,hn) 其中xn、hn的点数分别为N1、N2,输出点数为 N1+N2-1 。
upfirdn(xn,hn,length) 作用为把xn中的每个值乘以序列hn,然后移位相加,length表示了移位的长度。其中xn、hn的点数分别为N1、N2,输出点数为 N2+(N1-1)×length 。
线性卷积(linear convolution) 在时域描述线性系统输入和输出之间关系的一种运算。这种运算在线性系统分析和信号处理中应用很多,通常简称卷积。中文名:数字信号处理。
首先matlab对于连续函数的表示就是一个抽样,相当于一个数列,也就是说当你选择用matlab计算的时候他就已经不是连续的了,自然卷积之后的结果也只不过是逼近一个图形,是无法得出表达式的,就好像无法用计算器做不定积分一样……
时域卷积与频域相乘是等效的;
要用fft()算x和y的卷积的话就先补零算fft,再相乘,最后做ifft()就行了:
X = fft([x zeros(1,length(y)-1)]); % x和y是要计算卷积的序列
Y = fft([y zeros(1,length(x)-1)]);
z = ifft(XY) % 结果存为z
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)