首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用USB 1024HLS在MATLAB中实现方波频率的测量

利用USB 1024HLS在MATLAB中实现方波频率的测量
EN

Stack Overflow用户
提问于 2009-07-18 00:34:16
回答 6查看 3.3K关注 0票数 1

我正在尝试测量一个方波的频率,这个方波是通过一个USB1024HLS Daq模块通过MATLAB读取的。我所做的是创建一个循环,它从数字输入读取100个值,并给出0和1的向量。在这个循环中还有一个计时器,它测量循环运行的持续时间。

在得到向量之后,我计算1的数量,然后使用frequency = num_transitions/time给出频率。然而,这似乎不能很好地工作:(对于循环的不同迭代次数,我不断获得不同的频率。有什么建议吗?

EN

回答 6

Stack Overflow用户

发布于 2009-07-18 03:07:46

我建议您尝试以下代码:

代码语言:javascript
复制
vec = ...(the 100-element vector of digital values)...
dur = ...(the time required to collect the above vector)...
edges = find(diff(vec));  % Finds the indices of transitions between 0 and 1
period = 2*mean(diff(edges));  % Finds the mean period, in number of samples
frequency = 100/(dur*period);

首先,代码找到从0到1或从1到0的转换的索引。接下来,计算并平均这些指数之间的差异,给出0和1长度的平均持续时间(以样本数表示)。将这个数字乘以2,就得到了方波的平均周期(以样本数表示)。然后将这个数字与dur/100相乘,得到以dur的时间单位表示的周期(即秒、毫秒等)。取倒数然后给出平均频率。

一个额外的警告:为了更好地估计频率,您可能必须确保您收集的100个样本至少包含几个重复的周期。

上面使用的感兴趣的函数:DIFFFINDMEAN

票数 2
EN

Stack Overflow用户

发布于 2009-07-22 08:26:37

首先,你必须确保你的100个样本至少包含一个完整的信号周期,否则你会得到错误的结果。您需要很好地折衷采样率(即每个周期拥有的样本越多,测量效果就越好)和样本数量。

准确地说,你应该有一个与每个测量相关联的时间戳(因为你通常不能确保你在for循环中获得等距离的时间间隔),或者也许你可以将你的USB模块切换到某种“运行”模式,这种模式不只是一次只获得一个样本,而是一个具有固定采样率的完整波形。

关于频率的计算,新手已经指出了正确的方法。如果您有单独的时间戳(以秒为单位),则需要进行以下更改:

代码语言:javascript
复制
tst = ...(the timestamps associated with every sample)...
period = 2*mean(diff(tst(edges)));
frequency = 1/period;
票数 1
EN

Stack Overflow用户

发布于 2009-07-18 00:36:51

我不知道问题是什么,但是如果布尔向量是v

代码语言:javascript
复制
frequency = sum(v)/time_to_give_me_the_frequency
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1146291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档