求大神帮忙解释下这个matlab程序的作用(从for i=1:K到最后)

clc;clear;clf;Lx=38;%输入数据总长度L=6;%输入数据分段长度M=5;%单位样值响应长度x=0.5*boxcar(Lx);%输入序列w=boxcar(... clc;clear;clf;
Lx=38;%输入数据总长度
L=6;%输入数据分段长度
M=5;%单位样值响应长度
x=0.5*boxcar(Lx);%输入序列 w=boxcar(n):输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量 等价于w = ones(n,1)
h=0.5*boxcar(M);%单位样值响应
z=conv(x,h); %conv为卷积函数 求得z为输出零状态响应
subplot(2,1,1)
stem(z)

%分段数
%-----------------------------------------------------------
if rem(Lx,L)~=0 %rem为求余函数 如果不能整除
K=ceil(Lx/L);%输入数据分段数 ceil函数 ceil(x)取大于x的最小整数 fix(x) : 截尾取整 floor(x):不超过x 的最大整数(高斯取整) round:四舍五入取整
x(Lx+1:K*L)=0;%将0赋给x的第Lx+1到K*X个变量
else
K=Lx/L;
end
%---------------------------------------------------------

N=2^nextpow2(L+M-1);%FFT长度 nextpow2(x)跟x靠得最近的2的指数 e.g nextpow2(1000)为1024
y=zeros(1,(K-1)*L+N);%输出信号
h1=zeros(1,N);
h1(1:M)=h; %单位样值响应补0至N
for i=1:K
x1=zeros(1,N);
x1(1:L)=x((i-1)*L+1:i*L);%输入信号分段并补0至N
y1=real(ifft(fft(x1).*fft(h1)));
if i==1
y(1:N)=y(1:N)+y1;
else
y((i-1)*L+1:(i-1)*L+N)= y((i-1)*L+1:(i-1)*L+N)+y1;
end
end
subplot(2,1,2)
stem(y(1:Lx+M-1))
展开
 我来答
fptan
推荐于2017-11-26 · TA获得超过984个赞
知道大有可为答主
回答量:1150
采纳率:100%
帮助的人:754万
展开全部
for i=1:K
x1=zeros(1,N);
x1(1:L)=x((i-1)*L+1:i*L);%输入信号分段并补0至N
y1=real(ifft(fft(x1).*fft(h1)));%对2个快速傅里叶变换的乘积 做反傅里叶变换后取实部
if i==1
y(1:N)=y(1:N)+y1; %y的第1个N长片段上累加y1
else
y((i-1)*L+1:(i-1)*L+N)= y((i-1)*L+1:(i-1)*L+N)+y1; %y的第i个N长片段上累加y1
end
end
subplot(2,1,2) % 上下2图,画下面的图。
stem(y(1:Lx+M-1)) % 火柴棍图
追问
能从总体上说明下这段程序的作用或每一句的作用吗 谢谢了
追答
for i=1:K % i 从1到K循环
x1=zeros(1,N); % 0初始化
x1(1:L)=x((i-1)*L+1:i*L);%输入信号分段并补0至N
y1=real(ifft(fft(x1).*fft(h1)));%对2个快速傅里叶变换的乘积 做反傅里叶变换后取实部
if i==1 % 如果i等于1
y(1:N)=y(1:N)+y1; %y的第1个N长片段上累加y1
else
y((i-1)*L+1:(i-1)*L+N)= y((i-1)*L+1:(i-1)*L+N)+y1; %y的第i个N长片段上累加y1
end
end
subplot(2,1,2) % 上下2图,画下面的图。
stem(y(1:Lx+M-1)) % 火柴棍图
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式