请高手指点下这MATLAB程序的内容并帮忙注释下

请高手指点下这MATLAB程序的内容并帮忙注释下
请高手指点下这MATLAB程序讲什么

主函数
复制内容到剪贴板代码:
clear all;
close all;
t = 0:0.01:10;
vm1 = -60:1:0; %输入的正弦信号幅度不同
vm = 10.^(vm1/20);
figure(1)
for k = 1:length(vm)
for m = 1:2
x = vm(k)*sin(2*pi*t+2*pi*rand(1));
v = 1;
xx = x/v;%normalize
sxx = floor(xx*4096);
y = pcm_encode(sxx);
yy = pcm_decode(y,v);

nq(m) = sum((x-yy).*(x-yy))/length(x);
sq(m) = mean(yy.^2);
snr(m) = (sq(m)/nq(m));

drawnow
subplot(211)
plot(t,x);
title('sample sequence');
subplot(212)
plot(t,yy)
title('pcm decode sequence');
end
snrq(k)=10*log10(mean(snr));
end

figure(2)
plot(vm1,snrq);
axis([-60 0 0 60]);
grid;
子函数pcm_decode
复制内容到剪贴板代码:
function[out]= pcm_decode(in,v)
%decode the input pcm code
%in : input the pcm code 8 bits sample
%v:quantized level
n=length(in);

in=reshape(in',8,n/8)';
slot(1)=0;
slot(2)=32;
slot(3)=64;
slot(4)=128;
slot(5)=256;
slot(6)=512;
slot(7)=1024;
slot(8)=2048;

step(1)=2;
step(2)=2;
step(3)=4;
step(4)=8;
step(5)=16;
step(6)=32;
step(7)=64;
step(8)=128;

for i=1:n/8
ss=2*in(i,1)-1;
tmp = in(i,2)*4+in(i,3)*2+in(i,4)+1;
st = slot(tmp);
dt = (in(i,5)*8+in(i,6)*4+in(i,7)*2+in(i,8))*step(tmp)+0.5*step(tmp);
out(i)=ss*(st+dt)/4096*v;
end
子函数pcm_encode
复制内容到剪贴板代码:
function out=pcm_encode(x)
%x encode to pcm code
n=length(x);
%-4096<x<4096
for i = 1:n
if x(i)>0
out(i,1)=1;
else
out(i,1)=0;
end

if abs (x(i)) >= 0 & abs(x(i)) < 32
out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0;
elseif 32<=abs(x(i))&abs(x(i))<64
out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32;
elseif 64<=abs(x(i))&abs(x(i))<128
out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64;
elseif 128<=abs(x(i))&abs(x(i))<256
out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128
elseif 256<=abs(x(i))&abs(x(i))<512
out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256;
elseif 512<=abs(x(i))&abs(x(i))<1024
out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512;
elseif 1024<=abs(x(i))&abs(x(i))<2048
out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024;
elseif 2048<=abs(x(i))&abs(x(i))<4096
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;
else
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;
end

if(abs(x(i))&abs(x(i)))>=4096
out(i,2:8)=[1 1 1 1 1 1 1];
else
tmp=floor((abs(x(i))-st)/step);
t=dec2bin(tmp,4)-48;%函数dec2bin输出的是ASCII字符串,48对应0
out(i,5:8)=t(1:4);
end
end
out=reshape(out',1,8*n);
其中的这几句话是什么意思呀n=length(in);

in=reshape(in',8,n/8)';这句话是什么意思
还有for i = 1:n
if x(i)>0
out(i,1)=1;
else
out(i,1)=0;
end这句话是什么意思
还有 if abs (x(i)) >= 0 & abs(x(i)) < 32
out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0;这句话是什么意思
还有if(abs(x(i))&abs(x(i)))>=4096
out(i,2:8)=[1 1 1 1 1 1 1];这句话是什么意思
还有tmp=floor((abs(x(i))-st)/step);
t=dec2bin(tmp,4)-48;%函数dec2bin输出的是ASCII字符串,48对应0
out(i,5:8)=t(1:4);这句话是什么意思
还有for i=1:n/8
ss=2*in(i,1)-1;
tmp = in(i,2)*4+in(i,3)*2+in(i,4)+1;
st = slot(tmp);
dt = (in(i,5)*8+in(i,6)*4+in(i,7)*2+in(i,8))*step(tmp)+0.5*step(tmp);
out(i)=ss*(st+dt)/4096*v;
end这句话是什么意思

第1个回答  2009-06-02
length:数组长度(即行数或列数中的较大值)

reshape把指定的矩阵改变形状,但是元素个数不变

out是矩阵吧,那么out(i,1)就是其中的某一元素

abs()取某数的绝对值

floor:朝负无穷方向舍入

回答不是很完整,因为我也对MATLAB也只是懂个皮毛,用的时候查资料

告诉一个方法吧,那个函数不会用了,去百度搜索
比如length函数,搜索 matlab+length 就可以找到相关资料

请高手指点下这MATLAB程序的内容并帮忙注释下
reshape把指定的矩阵改变形状,但是元素个数不变 out是矩阵吧,那么out(i,1)就是其中的某一元素 abs()取某数的绝对值 floor:朝负无穷方向舍入 回答不是很完整,因为我也对MATLAB也只是懂个皮毛,用的时候查资料 告诉一个方法吧,那个函数不会用了,去百度搜索 比如length函数,搜索 matlab+length ...

求各位大侠帮我看个matlab程序,关于for循环的
3.建议采用数值积分,这样符号积分的代价太大。

matlab中分数阶线性系统的bode图程序看不懂,求高手指点,越详细越好...
分数阶线性系统的bode图程序 a,b,eta,gamma均为整数,w实值矢量,Gc权重,输出H是frd模型,例如:a=3;b=1;eta=3;gamma=2;freq = logspace(1,2);w = 0.05*(freq);f_bode(a,eta,b,gamma,w)a=3;b=1;eta=3;gamma=2;freq = linspace(0.01,0.2);w = 0.05*(freq);f_bode(...

高手指点一下Matlab的主函数和子函数的关系,怎么建立子函数
回答:1.子函数(Subfunction)通常在一个MATLAB主函数的内部会调用一些其他的MATLAB函数,我们把被调用的函数称为该主函数的子函数,子函数可以是MATLAB自带的内部函数,也可以是自编的外部函数;可以是以Function打头的函数,也可以是内联函数和匿名函数。当子函数是自编函数时,子函数通常位于主函数函数体的后面,...

mat lab的某个程序的开头中有以下内容: f(1:330)=0.06 ,这是啥意思...
就是把数组f的第1个到第330个元素赋值为0.06。matlab的集合操作很方便的 以上。n久没用的老狼

如何用matlab比较矩阵其中一列的相似度??高手可以提示一下不??
相似度就是做相关,用xcorr函数,n行的话,最后得出的结果是2n-1,但不管是多少了,你就用最中间的数做一下归一化,就是相似度了,等于1表示完全一样,-1表示完全相反。正数表示正相关,负的表示负相关。再说说归一化的分母,两个数列各自的平方和,开根号,再相乘。sqrt(a1^2+a2^2+...)*...

matlab中??? Subscripted assignment dimension mismatch.求高手指点...
end k for p=1:3 for q=1:3 Y_k_1(p,q)=b*exp(-a(p)*k(q))+c 这一串代码的问题:这里面的c是赋值一个数组,一个数和一个数组相加赋值给一个数,这是错误的。Subscripted assignment dimension mismatch的意思就是:下标不匹配。解决办法:更换赋值的内容,不对数组进行赋值。

高手指点,MATLAB 如何在一个长轴为20 短轴为椭圆5的内产生14个随机数...
程序如下:clear;clc a=5;b=20;t=-2*pi:0.001:2*pi;x=a*sin(t);y=b*cos(t);plot(x,y)xlist = []; % 存放结果的数组 ylist = [];cnt = 0;while cnt < 100%产生椭圆内点 x1 = randi(100,1,1)\/10;%产生随机数 y1 =randi(100,1,1)\/10;if (x1\/a)^2 + (y1\/b)^...

用matlab怎样读下面的数据,初学者请高手指点,最好有代码!
如果数据格式是XXXX.mat ,可以直接 load XXXX;如果文本格式XXXX.txt,也可以用load载入,load 'XXXX.txt';另外文本格式也可以通过Import data转换成.mat格式,matlab默认处理.mat格式数据!example:a=load('filename.txt');filename.txt 存数据的文本文件,在当前路径\/一般指在work文件夹下.运行后a...

如何用matlab求解这个方程,试过了牛顿迭代和二分法,没成功,求高手指点...
包含三角函数的方程是多值解,一般把所有的已知量全代进去,化为变量最少的方程,再求解。上面的方程,经简化为:72*cos(0.1177*cot(x)+0.1963)-sin(x-(0.1177*cot(x)+0.1963))*(2.7766+8.4734\/sin(x))-63.6612=0 则可求解:>> syms x f=72*cos(0.1177*cot(x)+0.1963)-...

相似回答
大家正在搜