matlab 识别信号参数

这一节做一个分析正弦波信号参数的工程,其他波形的信号参数分析代码是一样的。

1.创建GUI工程

在这里插入图片描述

2.布局

在这里插入图片描述

3.频率的slider回调函数

% 频率的Slider
function slider1_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',pinlv);
    set(handles.edit1,'String',s1);
    wavplay(x,caiyangpinglv);

4.幅值的Slider回调函数

% 幅值的Slider
function slider2_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',fuzhi);
    set(handles.edit2,'String',s1);
    wavplay(x,caiyangpinglv);

在这里插入图片描述
在这里插入图片描述
使用下面matlab的函数分析波形参数
在这里插入图片描述

5.分析波形的幅值

fenxi_max=sprintf('%f',max(x));%分析波形的幅值
set(handles.text5,'String',fenxi_max);%更新分析出的幅值

将分析波形幅值的代码增加到原来的Slider回调函数的最下面

% 频率的Slider
function slider1_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',pinlv);
    set(handles.edit1,'String',s1);
    wavplay(x,caiyangpinglv);
    fenxi_max=sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值
% 幅值的Slider
function slider2_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',fuzhi);
    set(handles.edit2,'String',s1);
    wavplay(x,caiyangpinglv);
    fenxi_max=sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值

试验结果
在这里插入图片描述

6.分析峰峰值

fenxi_fenfenzhi = sprintf('%f',(max(x) - min(x)));%分析波形的峰峰值
set(handles.text7,'String',fenxi_fenfenzhi);%更新分析出的幅值

更改后的回调函数如下:

% 频率的Slider
function slider1_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',pinlv);
    set(handles.edit1,'String',s1);
    wavplay(x,caiyangpinglv);
    
    fenxi_max = sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值
    
    fenxi_fenfenzhi = sprintf('%f',(max(x) - min(x)));%分析波形的峰峰值
    set(handles.text7,'String',fenxi_fenfenzhi);%更新分析出的幅值
% 幅值的Slider
function slider2_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=5120;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',fuzhi);
    set(handles.edit2,'String',s1);
    wavplay(x,caiyangpinglv);
     
    fenxi_max = sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值
    
    fenxi_fenfenzhi = sprintf('%f',(max(x) - min(x)));%分析波形的峰峰值
    set(handles.text7,'String',fenxi_fenfenzhi);%更新分析出的幅值

运行结果
在这里插入图片描述

7.分析平均值

fenxi_pingjunzhi = sprintf('%f',mean(x));%分析波形的平均值
set(handles.text9,'String',fenxi_pingjunzhi);%更新分析出的平均值

在这里插入图片描述

8.分析有效值

 pingjunzhi = mean(x);%平均值
 chazhi = x - pingjunzhi;%波形数组每一个元素与平均值的差值
 chazhipingfang = chazhi.*chazhi;%上面的差值数组求平方
 chazhipingfanghepingjun = sum(chazhipingfang)/N;%将每一个平方加起来
 youxiaozhi = sqrt(chazhipingfanghepingjun);%开根号求得有效值
 fenxi_youxiaozhi = sprintf('%f',youxiaozhi);%分析波形的有效值
 set(handles.text13,'String',fenxi_youxiaozhi);%更新分析出的有效值

在这里插入图片描述

9.分析标准差

fenxi_biaozhuncha = sprintf('%f', std(x));%分析波形的标准差
set(handles.text15,'String',fenxi_biaozhuncha);%更新分析出的标准差

在这里插入图片描述

10.分析频率和初始相位

在这里插入图片描述

p=max(x);q=min(x);n=1;ti=[0];
at=0.8*(p-q)+q;
for k=2:1:N-1
    if(x(k-1)<at && x(k)<=at && x(k+1)>at && x(k+2)>at)
        ti(n) = k;
        n = n+1;
    end;
end;
T=((ti(2) - ti(1)))*dt;
F=1.0/T;
Q=(T-ti(1)*dt);%计算出初始相位
fenxi_pinlv = sprintf('%f', F);%分析波形的频率
set(handles.text11,'String',fenxi_pinlv);%更新分析出的频率
fenxi_chushixiangwei = sprintf('%f', Q);%分析波形的初始相位
set(handles.text17,'String',fenxi_chushixiangwei);%更新分析出的初始相位

在这里插入图片描述

完整代码:
注意:这里caiyangpinglv=1000000,是因为采样频率设置的越大,分析出来的频率越接近设置的频率,读者可以将caiyangpinglv改小一点测试,你会发现,当频率设置的比较大的时候,分析出来的频率和设置的频率相差很大。

% 幅值的Slider
function slider2_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=1000000;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',fuzhi);
    set(handles.edit2,'String',s1);
    wavplay(x,caiyangpinglv);
     
    fenxi_max = sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值
    
    fenxi_fenfenzhi = sprintf('%f',(max(x) - min(x)));%分析波形的峰峰值
    set(handles.text7,'String',fenxi_fenfenzhi);%更新分析出的幅值
    
    fenxi_pingjunzhi = sprintf('%f',mean(x));%分析波形的平均值
    set(handles.text9,'String',fenxi_pingjunzhi);%更新分析出的平均值
    
    pingjunzhi = mean(x);%平均值
    chazhi = x - pingjunzhi;%波形数组每一个元素与平均值的差值
    chazhipingfang = chazhi.*chazhi;%上面的差值数组求平方
    chazhipingfanghepingjun = sum(chazhipingfang)/N;%将每一个平方加起来
    youxiaozhi = sqrt(chazhipingfanghepingjun);%开根号求得有效值
    fenxi_youxiaozhi = sprintf('%f',youxiaozhi);%分析波形的有效值
    set(handles.text13,'String',fenxi_youxiaozhi);%更新分析出的有效值
    
    fenxi_biaozhuncha = sprintf('%f', std(x));%分析波形的标准差
    set(handles.text15,'String',fenxi_biaozhuncha);%更新分析出的标准差
    
    p=max(x);q=min(x);n=1;ti=[0];
    at=0.8*(p-q)+q;
    for k=2:1:N-1
        if(x(k-1)<at && x(k)<=at && x(k+1)>at && x(k+2)>at)
            ti(n) = k;
            n = n+1;
        end;
    end;
    T=((ti(2) - ti(1)))*dt;
    F=1.0/T;
    Q=(T-ti(1)*dt);%计算出初始相位
    fenxi_pinlv = sprintf('%f', F);%分析波形的频率
    set(handles.text11,'String',fenxi_pinlv);%更新分析出的频率
    fenxi_chushixiangwei = sprintf('%f', Q);%分析波形的初始相位
    set(handles.text17,'String',fenxi_chushixiangwei);%更新分析出的初始相位
% 频率的Slider
function slider1_Callback(hObject, eventdata, handles)
    pinlv=get(handles.slider1,'Value'); % 获取slider1代表的频率
    caiyangpinglv=1000000;% 采样频率设置为5120
    dt=1.0/caiyangpinglv;
    T=1;
    N=T/dt;
    t=[0:N-1]/N;
    fuzhi=get(handles.slider2,'Value');% 获取slider2代表的
    x=fuzhi * sin(2*pi* pinlv *t);%计算波形
    plot(t, x, 'r','LineWidth', 3);%画波形
    axis([0,0.1,-2000,2000]);%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
    set(gca,'color',[0, 0.95, 0.95]); %利用set(gca,'propertyname','propertyvalue'......)命令可以调整图形的坐标属性
    s1=sprintf('%f',pinlv);
    set(handles.edit1,'String',s1);
    wavplay(x,caiyangpinglv);
    
    fenxi_max = sprintf('%f',max(x));%分析波形的幅值
    set(handles.text5,'String',fenxi_max);%更新分析出的幅值
    
    fenxi_fenfenzhi = sprintf('%f',(max(x) - min(x)));%分析波形的峰峰值
    set(handles.text7,'String',fenxi_fenfenzhi);%更新分析出的幅值
    
    fenxi_pingjunzhi = sprintf('%f',mean(x));%分析波形的平均值
    set(handles.text9,'String',fenxi_pingjunzhi);%更新分析出的平均值
    
    pingjunzhi = mean(x);%平均值
    chazhi = x - pingjunzhi;%波形数组每一个元素与平均值的差值
    chazhipingfang = chazhi.*chazhi;%上面的差值数组求平方
    chazhipingfanghepingjun = sum(chazhipingfang)/N;%将每一个平方加起来
    youxiaozhi = sqrt(chazhipingfanghepingjun);%开根号求得有效值
    fenxi_youxiaozhi = sprintf('%f',youxiaozhi);%分析波形的有效值
    set(handles.text13,'String',fenxi_youxiaozhi);%更新分析出的有效值
    
    fenxi_biaozhuncha = sprintf('%f', std(x));%分析波形的标准差
    set(handles.text15,'String',fenxi_biaozhuncha);%更新分析出的标准差
    
    p=max(x);q=min(x);n=1;ti=[0];
    at=0.1*(p-q)+q;
    for k=2:1:N-2
        if(x(k-1)<at && x(k)<=at && x(k+1)>at && x(k+2)>at)
            ti(n) = k;
            n = n+1;
        end;
    end;
    T=((ti(2) - ti(1)))*dt;
    F=1.0/T;
    Q=(T-ti(1)*dt);%计算出初始相位
    fenxi_pinlv = sprintf('%f', F);%分析波形的频率
    set(handles.text11,'String',fenxi_pinlv);%更新分析出的频率
    fenxi_chushixiangwei = sprintf('%f', Q);%分析波形的初始相位
    set(handles.text17,'String',fenxi_chushixiangwei);%更新分析出的初始相位
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值