注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲过零检测zero crossing detection  

2013-01-02 18:36:51|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

缘起:很实用但网上很少人讲,找了下好多function都不能达到要求。发现一个能用的,为了节省大家的学习摸索时间,贴出一个demo。南无阿弥陀佛

 

例1:找出从负到正的过零点

 t = linspace(-5,5, 101);
    y = sinc(t);
    plot(t,y); grid on;
    xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function')

[zrc, slope]=zerocros(y,'p');    % 找出从负到正的过零点

hold on;

plot(t(round(zrc)), zeros(length(zrc),1),'ro'); % 注意过零点怎么画

hold off;

 

 

例2:找出从正到负的过零点

 t = linspace(-5,5, 101);
    y = sinc(t);
    plot(t,y); grid on;
    xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function')

[zrc, slope]=zerocros(y,'n');    % 找出从负到正的过零点

hold on;

plot(t(round(zrc)), zeros(length(zrc),1),'ro'); % 注意过零点怎么画

hold off;

 

例3:找出所有过零点

 t = linspace(-5,5, 101);
    y = sinc(t);
    plot(t,y); grid on;
    xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function')

[zrc, slope]=zerocros(y,'b');    % 找出从负到正的过零点

hold on;

plot(t(round(zrc)), zeros(length(zrc),1),'ro'); % 注意过零点怎么画

hold off;

阿英讲过零检测zero crossing detection - 阿英 - Mr.Right

 

 

用到的函数:

function [f_0, slope] = zerocros(x, method)

%ZEROCROS finds the zeros crossings in a signal [T,S]=zerocros(X,M)

% Inputs:  x = input waveform

%          method = mode string containing:

%              'p' - positive crossings only

%              'n' - negative crossings only

%              'b' - both (default)

%              'r' - round to integer values

%

% Outputs: f_0 = sample positions of zero crossings (not necessarily integers)

%          xPositive = estimated slope of x at the zero crossing

%

% This routine uses linear interpolation to estimate the position of a zero crossing

% A zero crossing occurs between x(n) and x(n+1) iff (x(n)>=0) ~= (x(n+1)>=0)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Demo:

% f_0 = linspace(-5,5, 101);

%     y = sinc(f_0);

%     plot(f_0,y); grid on;

%     xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function')

% [zrc, slope]=zerocros(y,'p');    % 找出从负到正的过零点

% hold on;

% plot(f_0(round(zrc)), zeros(length(zrc),1),'ro'); % 注意过零点怎么画

% hold off;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


if nargin < 1

    method = 'p';

f_0 = linspace(-5, 5, 101);

x = sinc(f_0);

plot(f_0,x); grid on;

xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function')

[zrc, slope]=zerocros(x,'p');    % 找出从负到正的过零点

hold on;

plot(f_0(round(zrc)), zeros(length(zrc),1),'ro'); % 注意过零点怎么画

hold off;

end


if nargin < 2

    method='b';

end

xPositive = (x >= 0); % xPositive is the indicator of  nonnegative parts of the input x

k = xPositive(2:end) - xPositive(1:end - 1);

if any(method == 'p')

    f = find(k > 0); 

elseif any(method == 'n')

    f = find(k < 0);

else

    f = find(k ~= 0); % f is the index

end

% linear interpolation: f is the independant variable, x(f) is the dependant variable

slope = x(f + 1) - x(f); % estimated slope firstly, slope = (x(f + 1) - x(f))/((f + 1) - f)

%linear interpolation formula:  y - y0 = slope*(x - x0), here given y = 0, find the corresponding x

f_0 =  f - (x(f) - 0)./slope; % known x0 = 0, find f_0


if ~nargout

    n = length(x);

    plot(1:n,x,'-',f_0,zeros(length(f_0),1),'o');

end


  评论这张
 
阅读(814)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016