此篇在上一篇的基础上增加波形合成功能。涉及到matlab app designer的多窗口传参调用;UITable表应用(writetable,readtable存取数据;在table数据中获取其中的某个double类型数据;获取鼠标点击的位置在表中的行列数,以进行删除操作;表已有数据的行数等)
正文___________________________________
上一篇写到指定长度,幅度,频率,采样频率后选择数据源(正弦波,方波,三角波,随机波形)点击生成按钮可以生成对应时域图以及对应频谱图。现在添加一个功能:数据源下拉框添加选项波形合成,此时点击生成按钮则打开波形合成新窗口如下图:
调用此界面的主界面代码为:
这里传了四个参数对应waveform_Synthesis.mlapp的startupFcn函数的四个参数(点击工具栏编辑器 →App输入参数进入startupFcn函数参数设置):
点击加入固定频率按钮则将波形的三个参数频率幅度相位添加到左边表格中。对应函数如下
,此时如果想删除刚添加的某个波形,则用表格单击函数(获取鼠标点击位置对应表格的行数,对其进行删除)
单击某行后点击按钮“删除该波形”
其中选中位置是为了解决删除最后一行数据后表格并没有刷新,所以在删除数据后加上判断此时表格数据行数是否为0,为0则用一个空table数据给表格赋值,以实现清空表格数据效果。
点击“删除所有波形”按钮则为
添加波形完毕后点击确定按钮
使用writetable将表格数据写入xls文件中,以便下次读取记录。
func_updateWave函数在主界面代码中定义为公有函数
使用for循环将传进来的表格数据data一行一行读出来并分解赋值。F=data(i,2);得到第i行第2列的值,得到的F类型为table类型,其中的数值类型为double。使用table2cell函数将table类型转为cell,再用cell2mat函数将cell类型转为double类型,就得到频率f,代入A*sin(2*pi*f*t+p);再用函数func_plotWave
画出对应时域图和频谱图。
更新________________________________________
由于在某些采样率和采样长度下计算出的最大频谱位置与实际信号频率不一致(频率泄露)。遂考虑对信号进行加窗补零操作如下
在对应位置进行调用