作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/09/14 09:40:53
求大神帮忙解释下这个matlab程序的作用(从for i=1:K到最后)
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))
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)) % 火柴棍图