浅析傅里叶频谱分析&滤波&小波分析

面包板社区 2020-02-18 00:00

原始信号由20Hz、50Hz和100Hz三种频率的正弦波组成,如上图所示。

在Figure图上画框截取待分析的数据,如下所示:

所得结果如下所示,

从上图中可以清晰的看出有三种频率,而且从时频图中可以看到三种频率发生在不 同时刻。

点击单边傅里叶频谱,放大频谱如下:

画框可以选定滤波范围,如带通滤波,选择如下框,可得结果:

MATLAB中具体代码如下:


  1. function frequency_analysis


  2. clc close all


  3. Ts = 0.001;


  4. Fs = 1/Ts;


  5. f1 = 20;


  6. f2 = 50;


  7. f3 = 100;


  8. dt = 0.2;


  9. t1 = (0:Ts:dt-Ts) + 0; t2 = (0:Ts:dt-Ts) + dt;


  10. t3 = (0:Ts:dt-Ts) + 2*dt;


  11. y1 = sin(2*pi*f1*t1);


  12. y2 = sin(2*pi*f2*t2);


  13. y3 = sin(2*pi*f3*t3);


  14. t = [t1 t2 t3];


  15. y = [y1 y2 y3];


  16. figure


  17. plot(t,y)


  18. xlim([t(1) t(end)])


  19. ylim([min(y) max(y)])


  20. xlabel('时间t')


  21. ylabel('信号y(t)')


  22. title('原始信号')


  23. %


  24. % 以下为标准化程序


  25. % 上面的Ts和Fs要给定,后面会用到


  26. set(gcf,'WindowButtonDownFcn',@BtndownFcn);


  27. function BtndownFcn(h,evt)


  28. temppt = get(gca,'CurrentPoint');


  29. startpt.x = temppt(1,1);


  30. startpt.y = temppt(1,2);


  31. endpt = startpt;


  32. height = 0.0001;


  33. width = 0.0001;


  34. rectangle('Position',[startpt.x, startpt.y, width, height],'Tag','rangerect'); set(h,'WindowButtonMotionFcn',@BtnmoveFcn);


  35. set(h,'WindowButtonUpFcn',@BtnupFcn);


  36. function BtnmoveFcn(h,evt)


  37. temppt = get(gca,'CurrentPoint');


  38. endpt.x = temppt(1,1);


  39. endpt.y = temppt(1,2);


  40. width = abs(endpt.x-startpt.x)+0.00001;


  41. height = abs(endpt.y-startpt.y)+0.00001;


  42. hrect = findobj('Tag','rangerect');


  43. set(hrect,'Position',[min(startpt.x, endpt.x), min(startpt.y, endpt.y), width, height]);


  44. end


  45. function BtnupFcn(h,evt)


  46. set(h,'WindowButtonMotionFcn','');


  47. set(h,'WindowButtonUpFcn','');


  48. hrect = findobj('Tag','rangerect');


  49. delete(hrect);


  50. BtnUp_Spectrum_Analysis(startpt.x, endpt.x)


  51. end


  52. % 频谱分析


  53. function BtnUp_Spectrum_Analysis(starttime, endtime)


  54. hline = findobj(gca,'type','line');


  55. time = get(hline,'xdata');


  56. laser = get(hline,'ydata');


  57. % 得到截取的分析数据


  58. tempx = find(time >= min(starttime, endtime));


  59. startindex = tempx(1);


  60. tempx = find(time <= max(starttime, endtime));


  61. endindex = tempx(end);


  62. yt = laser(startindex:endindex);


  63. yt = ytmean(yt);


  64. t = time(startindex:endindex);


  65. % 傅里叶变换


  66. [Yf, f] = Spectrum_Calc(yt,Fs);


  67. % 小波变换


  68. scale = 1:50;


  69. cw2 = cwt(yt,scale,'morl');


  70. % 作图


  71. figure


  72. subplot(231)


  73. % 截取的频谱分析的数据


  74. plot(t, yt)


  75. xlim([t(1) t(end)])


  76. ylim([min(yt),max(yt)]);


  77. title('频谱分析数据')


  78. xlabel('时间t')


  79. ylabel('截取的数据y(t)')


  80. h1 = subplot(234);


  81. % 单边傅里叶变换分析频谱


  82. plot(f,Yf,'-')


  83. title('单边傅里叶频谱')


  84. xlabel('频率Hz')


  85. ylabel('|Y(f)|')


  86. set(h1,'ButtonDownFcn',@BtnDown_Filter_fcn)


  87. function BtnDown_Filter_fcn(h,evt)


  88. fig_fft = figure;


  89. plot(f,Yf,'-')


  90. title('单边傅里叶频谱')


  91. xlabel('频率Hz')


  92. ylabel('|Y(f)|')


  93. xlim([0 Fs/2])


  94. ylim([0 max(Yf)])


  95. % 构造右键菜单


  96. filter_flag = 1;


  97. hcmenu = uicontextmenu;


  98. uimenu(hcmenu, 'Label', '低通滤波', 'Callback', @hcb1);


  99. uimenu(hcmenu, 'Label', '高通滤波', 'Callback', @hcb2);


  100. uimenu(hcmenu, 'Label', '带通滤波', 'Callback', @hcb3);


  101. uimenu(hcmenu, 'Label', '带阻滤波', 'Callback', @hcb4);


  102. set(gca,'UIContextMenu',hcmenu);


  103. function hcb1(h,evt)


  104. filter_flag = 1;


  105. end


  106. function hcb2(h,evt)


  107. filter_flag = 2;


  108. end


  109. function hcb3(h,evt)


  110. filter_flag = 3;


  111. end


  112. function hcb4(h,evt)


  113. filter_flag = 4;


  114. end


  115. set(fig_fft,'WindowButtonDownFcn',@BtndownFcn);


  116. function BtndownFcn(h,evt)


  117. if


  118. strcmp(get(h,'SelectionType'),'normal')


  119. temppt = get(gca,'CurrentPoint');


  120. startpt.x = temppt(1,1);


  121. startpt.y = temppt(1,2);


  122. endpt = startpt;


  123. height = 0.0001;


  124. width = 0.0001;


  125. rectangle('Position',


  126. [startpt.x, startpt.y, width, height],'Tag','rangerect_fft'); set(h,'WindowButtonMotionFcn',@BtnmoveFcn);


  127. set(h,'WindowButtonUpFcn',@BtnupFcn);


  128. end


  129. function BtnmoveFcn(h,evt)


  130. temppt = get(gca,'CurrentPoint');


  131. endpt.x = temppt(1,1);


  132. endpt.y = temppt(1,2);


  133. width = abs(endpt.xstartpt.x)+0.00001;


  134. height = abs(endpt.ystartpt.y)+0.00001;


  135. hrect = findobj(h,'Tag','rangerect_fft');


  136. set(hrect,'Position', [min(startpt.x, endpt.x), min(startpt.y, endpt.y), width, height]);


  137. end


  138. function BtnupFcn(h,evt)


  139. set(h,'WindowButtonMotionFcn','');


  140. set(h,'WindowButtonUpFcn','');


  141. hrect = findobj(h,'Tag','rangerect_fft');


  142. delete(hrect);


  143. Filter_Analysis(startpt.x, endpt.x);


  144. function Filter_Analysis(x1,x2)


  145. lowfre = min(x1,x2);


  146. highfre = max(x1,x2);


  147. if


  148. lowfre <= 0 || lowfre >= Fs/2


  149. lowfre = 0.01;


  150. end


  151. if


  152. highfre <= 0 || highfre >= Fs/2


  153. highfre= Fs/2-0.01;


  154. end


  155. W1 = lowfre/(Fs/2);


  156. W2 = highfre/(Fs/2);


  157. filter_str = '(低通)';


  158. switch filter_flag


  159. case 1


  160. [b,a] = butter(5,min(W1,W2)); % 低通,画的框的左边为截止频率


  161. filter_str = '(低通)';


  162. case 2


  163. [b,a] = butter(5,max(W1,W2),'high'); % 高通,画的框的右边为截止频率


  164. filter_str = '(高通)';


  165. case 3


  166. [b,a] = butter(5,[W1 W2]); % 带通


  167. filter_str = '(带通)';


  168. case 4


  169. [b,a] = butter(5,[W1 W2],'stop'); % 带阻


  170. filter_str = '(带阻)';


  171. end


  172. y = filter(b,a,yt);


  173. figure


  174. subplot(2,1,1)


  175. plot(t,yt)


  176. xlabel('时间t')


  177. ylabel('信号y')


  178. xlim([t(1) t(end)])


  179. ylim([min(yt),max(yt)]);


  180. title('原始信 号')


  181. subplot(2,1,2)


  182. plot(t,y)


  183. xlabel('时间t')


  184. ylabel('信号y')


  185. xlim([t(1) t(end)])


  186. ylim([min(y),max(y)]);


  187. title(sprintf('滤波信号%s%.2fHz~%.2fHz',filter_str,lowfre,highfre))


  188. end


  189. end


  190. end


  191. end


  192. subplot(1,3,[2,3]) % 频率轴化为频率


  193. [X,Y] = meshgrid(t,5/(2*pi)./scale*Fs);


  194. mesh(X,Y,abs(cw2))


  195. view(0,90)


  196. title('时频图')


  197. xlabel('时间')


  198. ylabel('频率')


  199. xlim([t(1) t(end)])


  200. set(gca,'ylim',[0,max(max(Y))])


  201. set(gca,'YScale','log')


  202. set(gca,'YTick', [1:9,10:10:90,100:100:900,1000,2000])


  203. function [Yf, f] = Spectrum_Calc(yt,Fs)


  204. L = length(yt);


  205. NFFT = 2^nextpow2(L);


  206. Yf = fft(yt,NFFT)/L;


  207. Yf = 2*abs(Yf(1:NFFT/2+1));


  208. f = Fs/2*linspace(0,1,NFFT/2+1);


  209. end


  210. end


  211. end


  212. end


  213. 其中选框的代码可以标准化,可以用来在用户交互中用户选择范围,代码整理如下


  214. set(gcf,'WindowButtonDownFcn',@BtndownFcn);


  215. function BtndownFcn(h,evt)


  216. temppt = get(gca,'CurrentPoint');


  217. startpt.x = temppt(1,1);


  218. startpt.y = temppt(1,2);


  219. endpt = startpt;


  220. height = 0.0001;


  221. width = 0.0001;


  222. rectangle('Position',[startpt.x, startpt.y, width, height],'Tag','rangerect'); set(h,'WindowButtonMotionFcn',@BtnmoveFcn);


  223. set(h,'WindowButtonUpFcn',@BtnupFcn);


  224. function BtnmoveFcn(h,evt)


  225. temppt = get(gca,'CurrentPoint');


  226. endpt.x = temppt(1,1);


  227. endpt.y = temppt(1,2);


  228. width = abs(endpt.x-startpt.x)+0.00001;


  229. height = abs(endpt.y-startpt.y)+0.00001;


  230. hrect = findobj('Tag','rangerect');


  231. set(hrect,'Position',[min(startpt.x, endpt.x), min(startpt.y, endpt.y), width, height]);


  232. end


  233. function BtnupFcn(h,evt)


  234. set(h,'WindowButtonMotionFcn','');


  235. set(h,'WindowButtonUpFcn','');


  236. hrect = findobj('Tag','rangerect');


  237. delete(hrect);


  238. % ProsessFcn(startpt,endpt);


  239. % 选完框后对选择的 范围处理


  240. end


  241. end

面包板社区 面包板社区——中国第一电子人社交平台 面包板社区是Aspencore旗下媒体,整合了电子工程专辑、电子技术设计、国际电子商情丰富资源。社区包括论坛、博客、问答,拥有超过250万注册用户,加入面包板社区,从菜鸟变大神,打造您的电子人脉社交圈!
评论
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 108浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 44浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 108浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 137浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 38浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 77浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 41浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 93浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 159浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 191浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦