声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1767|回复: 8

[编程技巧] 信号加减

[复制链接]
发表于 2010-12-17 11:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function [f,n]=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!
回复
分享到:

使用道具 举报

发表于 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;

  1. % t1, t2 两信号的测量时间段, 一个从2秒开始,一个从3秒开始
  2. % 在时间空间上叠加两个信号
  3. %信号的起始时间不一样
  4. function r=Signal()
  5. t1=2:1:10 ;
  6. t2=3:1:20 ;
  7. y1=sin(t1);
  8. y2=cos(t2);
  9. %采样得到的f1,f2
  10. signal1=struct('x',t1,'y',y1);
  11. signal2=struct('x',t2,'y',y2);
  12. plot(t1,y1,'bx:');
  13. hold on;
  14. plot(t2,y2,'ro--');
  15. [newsignal,newsignaltime]= sigadd(signal1.y,signal1.x,signal2.y,signal2.x);
  16. plot(newsignaltime, newsignal,'g*-')
  17. r=0;
  18. end
复制代码

点评

例子有点不明确! :)  发表于 2010-12-17 16:16

评分

1

查看全部评分

 楼主| 发表于 2010-12-17 14:37 | 显示全部楼层
回复 2 # tenglang 的帖子

谢谢了   看懂了  但还理解的不是很透  
f2的值是不是少了一个
发表于 2010-12-17 15:00 | 显示全部楼层
本帖最后由 tenglang 于 2010-12-17 19:25 编辑

上面的运算结果

untitled.png
发表于 2010-12-17 20:16 | 显示全部楼层
function [y,n]=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;
发表于 2010-12-18 23:21 | 显示全部楼层
x1(find((n>=min(n1))&(n<=max(n1))==1))=f1;
好像直接使用x1( find(n>=min(n1) & n<=max(n1)) )=f1;即可

还有程序是看了懂, 只是有点好奇其应用性, 难道仅是为了省储存空间而已吗!?
 楼主| 发表于 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.

点评

反对: 2.0
反对: 2
repeat!  发表于 2010-12-19 23:53
发表于 2010-12-19 21:05 | 显示全部楼层
回复 6 # ChaChing 的帖子

是多了一步逻辑判断,应该是程序作者受其他编程语言的影响,程序代码编写的风格问题。
发表于 2012-5-1 23:31 | 显示全部楼层
在找序列的起始/终止下标, 使用min(n1), max(n1)...等, 好像根本多餘! min(n1)不就是n1(1), max(n1)不就是n1(end)! 难道时间序列可以不是单调递增吗?
所以练习下, 依个人习惯并无特别优化
  1. function [f,n]=sigadd(f1,n1,f2,n2)
  2. n=min(n1(1),n2(1)):max(n1(end),n2(end)); f=zeros(1,length(n));
  3. ppp=n1(1)<=n & n<=n1(end); f(ppp)=f1;
  4. ppp=n2(1)<=n & n<=n2(end); f(ppp)=f(ppp)+f2;
复制代码
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 01:29 , Processed in 0.069788 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表