波形识别新方法:不使用FFT区分正弦波、三角波和方波
创作时间:
作者:
@小白创作中心
波形识别新方法:不使用FFT区分正弦波、三角波和方波
引用
CSDN
1.
https://blog.csdn.net/qq_53701123/article/details/132132828
本文介绍了一种不使用FFT的波形识别算法,通过设置不同阈值来计数信号峰值,从而区分正弦波、三角波和方波。该方法简单实用,仅需测量信号峰值并做计数操作即可实现波形区分。文章还提供了详细的MATLAB仿真代码,便于读者复现和学习。
常见的波形识别算法一般是对信号进行频谱分析来实现,通过判断谱线数量和谱线高度就能得出结果。但如果只是需要识别一些简单的信号,比如正弦波、方波、三角波,其实还有更简单的算法,只需要测量信号峰值并做计数操作就可以实现对这些波形的区分。
我们之所以能用肉眼识别这些波形,是因为他们的形状都各有特点。因此,只需要利用好其形状特点,就可以很好地实现波形类型的区分。
具体如何实现的呢?方法就是计数,当信号大于阈值,计数值加一。如果是以零点为阈值,我们会发现正弦波、三角波和方波的计数值相等,这当然无法用于区分波形。但如果阈值不是零点呢?
尝试将阈值设置为信号峰值的二分之一,再次计数,并将最终的计数值除以信号总采样点数,得到大于阈值的点所占比例。结果是,正弦波是33%,三角波是25%,方波是50%。此时三种波形在这个特征上表现出了明显的差异,用于区分已经足够了!
如果我们试着再把阈值调高,可以发现结果的差异更加明显。
阈值 | 正弦波 | 三角波 | 方波 |
---|---|---|---|
1/2 | 0.3333 | 0.2500 | 0.5000 |
3/4 | 0.2301 | 0.1250 | 0.5000 |
7/8 | 0.1609 | 0.0625 | 0.5000 |
MATLAB仿真代码如下:
clear;close all;clc;
fs = 8e6; % 采样率8MHz
threshold = 1 - 1/8; % 阈值设置
t = 0: 1/fs : 0.1;
cnt_time = 0.1; % 计数时间
% 生成波形
sine_max = 2; % sine的峰值 正弦波
sine_freq = 100; % sine的频率
tri_max = 2; % tri的峰值 三角波
tri_freq = 100; % tri的频率
square_max = 2; % square的峰值 方波
square_freq = 100; % square的频率
sine_wave = sine_max * sin(2*pi*sine_freq*t);
tri_wave = tri_max * sawtooth(2*pi*square_freq*t, 0.5);
square_wave = square_max * square(2*pi*square_freq*t);
threshold_line = threshold * t./t;
subplot(311);
% plot(t, sine_wave, 'LineWidth', 1);
plot(t, sine_wave, t, threshold_line*sine_max, 'LineWidth', 1);
axis([-inf inf -2 2]);
subplot(312);
% plot(t, tri_wave, 'LineWidth', 1);
plot(t, tri_wave, t, threshold_line*tri_max, 'LineWidth', 1);
axis([-inf inf -2 2]);
subplot(313);
% plot(t, square_wave, 'LineWidth', 1);
plot(t, square_wave, t, threshold_line*square_max, 'LineWidth', 1);
axis([-inf inf -2 2]);
% 计数
sine_cnt = 0;
tri_cnt = 0;
square_cnt = 0;
cnt_total = cnt_time/(1/fs);
for i = 1:cnt_total
if(sine_wave(i) > threshold * sine_max)
sine_cnt = sine_cnt + 1;
end
if(tri_wave(i) > threshold * tri_max)
tri_cnt = tri_cnt + 1;
end
if(square_wave(i) > threshold * square_max)
square_cnt = square_cnt + 1;
end
end
% 打印结果
disp(sine_cnt/cnt_total);
disp(tri_cnt/cnt_total);
disp(square_cnt/cnt_total);
热门推荐
2024年全球造船市场回顾及2025年展望
新招飞标准放宽角膜屈光手术限制,屈光度要求可能形同虚设
中国造船行业发展趋势研究与未来前景分析报告(2025-2032年)
上海世博文化公园南园正式开园,周边交通设施全攻略
毕业论文前言怎么写
打响食管“抗洪战”:胃食管反流病的识别与应对
极光是怎样产生的?为什么只出现在北极和南极地区?
中国古代盔甲:从战国到明清的演变历程
地磁暴来袭!极光观赏指南与科学解读
笔记本电脑网线插好了但是连不上网怎么办 这有解决方法
正确预防流感 这些危险因素莫大意
如何修复夫妻感情的方法与技巧(15个实用技巧帮你挽救婚姻)
如何找回微博账号:快速解决登录难题的完整指南
中亚好狗大盘点
震荡行情怎么操作基金
精益生产与精益管理的异同?
最强文化输出《今生缘》
基金解仓的时机如何选择?这种选择会对收益产生什么影响?
珠海金沙滩旅游攻略,含门票情况、开放时间、交通指南
如何轻松关闭手机及其他设备的横屏模式
在机场里狂奔,还是提前2小时到达?经济学家:提前到达,就是浪费人生
“一科一品” | 肿瘤科之身心一体特色护理服务
多地上调房贷利率下限,市场走势引发关注
SQL数据库中删除记录的方法与最佳实践
巴哥犬:体型短粗脸部褶皱的伴侣犬
大城市共享单车为何比电动车更普及
配音演员的声音变现:7个方面的模仿练习目标
如何清除电脑使用痕迹?5个方法保护个人隐私!
哪吒:经典IP的现代重塑,每一帧都很精彩
1934法国35,000T战列舰设计方案浅析