请各位大虾们帮我看一下一个MATLAB程序

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:30:56
function [a_quan,code] = u_pcm(a,n)
amax = max(abs(a));
a_quan = a/amax;
b_quan = a_quan;
d = 2/n;
q = d.*[0:n-1];
q = q-((n-1)/2)*d;
for i = 1:n
a_quan(find((q(i)-d/2<=a_quan) & (a_quan<=q(i)+d/2)))=...
q(i).*ones(1,length(find((q(i)-d/2<=a_quan) & (a_quan<=...
q(i)+d/2))));
b_quan(find(a_quan==q(i))) = (i-1).*ones(1,length(find(a_quan==...
q(i))));
end
a_quan = a_quan*amax;
nu = ceil(log2(n));
code = zeros(length(a),nu);
for i = 1:length(a)
for j = nu:-1:0
if (fix(b_quan(i)/(2^j))==1)
code(i,(nu-j)) = 1;
b_quan(i) = b_quan(i)-2^j;
end
end
end

这是一个在MATLAB里新建的函数,用于量化和编码。

程序本身不难,但我对MATLAB函数不了解。我想知道这个程序的code是怎样输出的,输出什么,最好能对程序给个全面的解读。

给你解释某些比较复杂的部分吧:

for i = 1:n
a_quan(find((q(i)-d/2<=a_quan) & (a_quan<=q(i)+d/2)))=...
q(i).*ones(1,length(find((q(i)-d/2<=a_quan) & (a_quan<=...
q(i)+d/2))));
b_quan(find(a_quan==q(i))) = (i-1).*ones(1,length(find(a_quan==...
q(i))));
end

这部分就是说把a_quan向量里的值在q(i)附近的项赋值为q(i),然后把a_quan向量里值为q(i)的项变成i-1赋给b_quan

for i = 1:length(a)
for j = nu:-1:0
if (fix(b_quan(i)/(2^j))==1)
code(i,(nu-j)) = 1;
b_quan(i) = b_quan(i)-2^j;
end
end
end

相当于把b_quan里的每项用二进制表示出来,然后构成矩阵code
code就是这样输出的

a=
n=
[a_quan,code] =u_pcm(a,n)
code
在命令窗口输上命令,a,n为参数值