zhangchengpeng 发表于 2010-12-17 11:31

信号加减

function =sigadd(f1,n1,f2,n2)
n=min(min(n1),min(n2)):max(max(n1),max(n2));x1=zeros(1,length(n));x2=x1;
x1(find((n>=min(n1))&(n<=max(n1))==1))=f1;
x2(find((n>=min(n2))&(n<=max(n2))==1))=f2;
f=x1+x2;

谁能解释一下这个程序,详细点主要是第三行和第四行

先thanks!

tenglang 发表于 2010-12-17 12:55

本帖最后由 tenglang 于 2010-12-17 19:22 编辑

x1(find((n>=min(n1))&(n<=max(n1))==1))=f1;
把向量f 1 赋给向量x1 中下标 从n1(min) 开始到 n1(max)对应数组值,

先help find
find 返回一个(时间)向量(tnmin: tnmax);
x1(tnmin: tnmax)=f1;

% t1, t2 两信号的测量时间段, 一个从2秒开始,一个从3秒开始
% 在时间空间上叠加两个信号
%信号的起始时间不一样
function r=Signal()
t1=2:1:10 ;
t2=3:1:20 ;
y1=sin(t1);
y2=cos(t2);
%采样得到的f1,f2
signal1=struct('x',t1,'y',y1);
signal2=struct('x',t2,'y',y2);
plot(t1,y1,'bx:');
hold on;
plot(t2,y2,'ro--');
= sigadd(signal1.y,signal1.x,signal2.y,signal2.x);
plot(newsignaltime, newsignal,'g*-')
r=0;
end

zhangchengpeng 发表于 2010-12-17 14:37

回复 2 # tenglang 的帖子

谢谢了   看懂了但还理解的不是很透
f2的值是不是少了一个

tenglang 发表于 2010-12-17 15:00

本帖最后由 tenglang 于 2010-12-17 19:25 编辑

上面的运算结果

zhouyang664 发表于 2010-12-17 20:16

function =sig_add(x1,n1,x2,n2)
% Implements y(n)=x1(n)+x2(n);

%n1,n2是两个元素的向量,分别代表序列的起始/终止下标

%即:n1 = [ a , b ] ; a代表x1的起始下标,b代表x2的终止下标!
n=min(min(n1),min(n2)):max(max(n1),max(n2));%找出下标的最大范围
y1=zeros(1,length(n));%预定义,赋初值
y2=y1;
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;%将序列x1扩展为长度为n的序列y1,下标在n1之间的赋值x1
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;%将序列x2扩展为长度为n的序列y2,下标在n2之间的赋值x2
y=y1+y2;

ChaChing 发表于 2010-12-18 23:21

x1(find((n>=min(n1))&(n<=max(n1))==1))=f1;
好像直接使用x1( find(n>=min(n1) & n<=max(n1)) )=f1;即可

还有程序是看了懂, 只是有点好奇其应用性, 难道仅是为了省储存空间而已吗!?

zhangchengpeng 发表于 2010-12-19 13:11

回复 4 # tenglang 的帖子

明白了谢谢   我还想问一下 :为什么在 r2009b版本的MATLAB里,看不了demo的动画,我也装了FLASH插件
显示是
This video, which will play in your default web browser, requires Macromedia Flash Player (version 5 or later) and an Internet connection.

tenglang 发表于 2010-12-19 21:05

回复 6 # ChaChing 的帖子

是多了一步逻辑判断,应该是程序作者受其他编程语言的影响,程序代码编写的风格问题。

ChaChing 发表于 2012-5-1 23:31

在找序列的起始/终止下标, 使用min(n1), max(n1)...等, 好像根本多餘! min(n1)不就是n1(1), max(n1)不就是n1(end)! 难道时间序列可以不是单调递增吗?
所以练习下, 依个人习惯并无特别优化function =sigadd(f1,n1,f2,n2)
n=min(n1(1),n2(1)):max(n1(end),n2(end)); f=zeros(1,length(n));
ppp=n1(1)<=n & n<=n1(end); f(ppp)=f1;
ppp=n2(1)<=n & n<=n2(end); f(ppp)=f(ppp)+f2;
页: [1]
查看完整版本: 信号加减