波形识别新方法:不使用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);
热门推荐
原神艾尔海森高效养成攻略:一图速成全解析
自动化生产线的得力助手:高精度舵机技术深度解析
评估研发有效性:创新驱动型科技公司的衡量标准
管理创新成果有哪些常见的评估指标?
肇庆探索罗氏沼虾生态养殖新路
常用医学科研中的统计学方法
光引发剂的作用与应用
男性在感情中的角色与责任
每年只开放四个月的天堂之路:独库公路
【吉他入门】吉他入门指法 吉他演奏要领
毛衣掉毛怎么办?三种实用处理方法
2025中药学专业就业前景及方向:好找工作吗?
为什么开关电源变压器的耦合不可能为100%?什么是漏感?
线下线上仍有人非法改装电动自行车电池,消防提醒:改装风险大
主犯、从犯、胁从犯、教唆犯的种类及相应责任
咖啡常见冲泡方法,口感特点,大家喜欢哪种?
全球AI创作侵权案例解析及法律应对措施
咽喉癌的注意事项
白鞋越洗越黄?教你5种洗白波鞋的方法 让它起死回生!
DRAM价格下跌引停产潮,DDR4面临市场淘汰,国内厂商迎来机遇
专家解读楼梯间排烟窗设置规范:不应采用火灾探测器自动开启
拿筷子手为什么会抖?
扭矩在汽车性能中的重要性及优势体现
硬盘的基本知识与选购指南
马斯克“剑指”美国数百万公务员:效率革命还是权力博弈?
鸽子党参枸杞汤的功效
房产纠纷中的合同审查
烯效唑与调环酸钙:植物生长调节剂的深入研究与应用
房产证上共有方式是什么意思
H610、B660、B760主板区别及选购指南