精华内容
下载资源
问答
  • matlab 峰值信噪比代码

    2016-04-20 15:51:46
    求两个图像的峰值信噪比
  • 评估指标为点目标距离向和方位向峰值坐标、峰值旁瓣比、一维积分旁瓣比、二维积分旁瓣比、剖面图
  • findextremas - 查找最大值和最小值(即峰值或极值) 给定信号x 输入: - h:一维数组中的信号 输出: -st:起点的 x,y 坐标, -maximas:最大值点/峰值的 x,y 坐标, -最小值:最小值点/峰值的 x,y 坐标, -ed:...
  • matlab 峰值噪声比

    2016-05-01 21:41:49
    matlab 峰值噪声比
  • matlab的程序用于有效值,峭度,峰峰值特征提取
  • 图像处理中的峰值信噪比PSNR程序,做图像加密的可以用。
  • 峰值matlab代码

    2018-08-12 16:01:48
    用于比较两种信号的峰值比 分析信号处理的效果 如去噪效果比较等等
  • matlab的findpeaks的源码,绝对正确。用于峰值检测,很有用,调用很方便 (Matlab findpeaks the source code, absolutely correct. Used for peak detection, very useful, very convenient to call);...
  • 本代码是一个 Matlab 函数,它通过频谱峰值的形状保持分段三次插值和结果的移动平均滤波来提供给定信号幅度谱的包络提取。 该函数类似于(但不相同)Matlab 函数“envelope”。 为了说明函数的用法,给出了一个例子...
  • matlab程序,找出一维信号的波峰。还可以把小值变为极大值,在求出波谷。 更重要的是有大量的交互操作,满足对峰值的精确定位要求。
  • Matlab2019b信号峰值检测与提取

    千次阅读 2020-06-16 12:16:23
    注意: 部分程序仅兼容Matlab2016b以后版本 目标 提取和检测如下图类似信号的峰值及位置 方法1 调用的findpeaks函数 参考程序,通过设定合适的峰值参数,可以输出相应的峰值 %% 找到数据中的峰值 clc; clear; x = ...

    在信号处理的时候,有的时候希望确定信号峰值的大小以及位置,并最好对信号进行分离,可以更好地进行后续处理。本人使用了集中不同的思路和方式来进行位置确定和提取,仅供参考。

    注意: 部分程序仅兼容Matlab2016b以后版本

    目标

    提取和检测如下图类似信号的峰值及位置在这里插入图片描述

    方法1在这里插入图片描述

    调用的findpeaks函数
    参考程序,通过设定合适的峰值参数,可以输出相应的峰值

    %% 找到数据中的峰值
    clc;
    clear;
    x = linspace(0,1,1000);
    Pos = [1 2 3 5 7 8]/10;
    Hgt = [3 4 4 2 2 3];
    Wdt = [2 6 3 3 4 6]/100;
    for n = 1:length(Pos)
        Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
    end
    Data = sum(Gauss);%产生假设信号
    
    % NPeaks表示返回值中最大的峰值个数
    [pks,locs,w,p] = findpeaks(Data,x,...pks为输出峰值,locs为峰值位置
        'NPeaks',1,...输出的最大峰值个数
        'SortStr','ascend',...输出峰值是否进行排序,升序或降序或不进行排序
        'Threshold',0,...峰值之间的最小差值阈值,如数组为[]则未找到符合参数的阈值
        'WidthReference','halfprom',...
        ...'MiniPeakWidth','0',...最小的峰值宽度
        'MaxPeakWidth',Inf,...最大的峰值宽度
        'Annotate','peaks',...在定义输出后无效
        'MinPeakHeight',50);%最小峰值高度
    
    findpeaks(Data,x,'Annotate','extents')
    text(locs+.02,pks,num2str((1:numel(pks))'))
    

    方法2

    通过求取整个信号的方差和平均值,再使用逻辑与或的方式提取位置和峰值。由于方差即为随机变量和数学期望之间的偏离程度,当极度偏离方差时,信号为突变信号。首先提取位置,通过与方差比较,大于阈值的即为1,小于阈值的即为0,在于信号进行与逻辑运算,即可提取出相对准确的峰值。
    在这里插入图片描述

    clc
    clear
    Fs=1000;
    y=xlsread('Data2','sheet1');
    x=y(:,7)';%通道设置
    figure('Name','原始混合信号','NumberTitle','off');
    plot(x)
    
    jun=mean(x);%求取整个信号的均值
    biao=std(x);%求取整个信号的标准差
    fang=var(x);%求整个信号的方差
    zhong=median(x);%求整个信号的中位数
    fai=1;
    
    % x = 0:0.05:50*pi;
    % x= signal+rand(1,length(signal))
    L=length(x);
    T=0.5*(min(x(:))+max(x(:)));
    
    %循环判断与整个信号方差之间的关系
    for i=1:L
            if(x(i)<fai*fang)%具体需要根据实际使用情况来调整系数fai
                BW1(i)=0;%未超过系数为0
            else 
                BW1(i)=1;%超过系数为1
        end
    end
    
    for i=1:L
           a(i)=x(i)*BW1(i);%与逻辑提取信号
    end
    
    for i=1:L
           b(i)=-(x(i)*(BW1(i)-1));%与逻辑
    end
    
    figure('Name','冲击信号位置','NumberTitle','off');
    plot(BW1)
    
    
    figure('Name','信号分离','NumberTitle','off');
    subplot(2,1,1)
    plot(b)
    title('应变信号');
    subplot(2,1,2)
    plot(a)
    title('冲击信号');
    

    方法3

    使用VPD方法

    在这里插入图片描述

    %一维峰值检测Matlab实现
    clc;
    clear
    
    signal = 0:0.05:50*pi;
    x = sin(signal);
    row_acc=x;
    
    plot(x)
    % x = 0:0.05:50*pi;
    % x= signal+rand(1,length(signal))
    L=length(x);
    
    % Y = fft(x);
    % P2 = abs(Y/L);
    % P1 = P2(1:L/2+1);% 实信号的功率谱是对称的,只用取一半即可
    % P1(2:end-1) = 2*P1(2:end-1);
    % f = Fs*(0:(L/2))/L;
    % 
    % plot(f,P1)
    % title('原始信号直接进行傅里叶分析')
    % grid on
    % xlabel('Frequency (Hz)')
    % ylabel('Amplitude')
    
    % [c,l] = wavedec(x,2,'db2');
    % approx = appcoef(c,l,'db2');
    % [cd1,cd2] = detcoef(c,l,[1 2]);
    % 
    % subplot(3,1,1)
    % plot(x)
    % title('原始信号')
    % subplot(3,1,2)
    % plot(approx)
    % title('应变信号')
    % subplot(3,1,3)
    % plot(cd3)
    % title('冲击信号')
    
    % subplot(4,1,3)
    % plot(cd2)
    % title('Level 2 Detail Coefficients')
    % subplot(4,1,4)
    % plot(cd1)
    % title('Level 1 Detail Coefficients')
    % 
    % Hd=LowPass_Filter;
    % output=filter(Hd,x);
    % figure
    % plot(output)
    % 
    % blo = fir1(34,0.48,chebwin(35,30));
    % outlo = filter(blo,1,x);
    % 
    % 使用峰值检测
    % % [pks,locs]=findpeaks(x,'Npeaks',1,'MinPeakHeight',250);
    % % jieyue=x(:,[locs-200:L]);
    % % figure
    % % plot(jieyue)
    % % yingbian=x(:,[1:locs-200]);
    % % figure
    % % plot(yingbian)
    % % ylim([-50 300])
    % % figure
    % % plot(locs,pks)
    % 
    %% VPD方法
    
    %%前三点均值滤波
    row_acc = x;
    m = length(row_acc);
    row_acc1 = linspace(0,0,m);
    row_acc1(1) = row_acc(1);
    row_acc1(m) = row_acc(m);
    for i=2:m-1
       row_acc1(i)=(row_acc(i-1) + row_acc(i)+row_acc(i+1))/3;
    end
    % figure;
    % plot(row_acc1);
    
    for i=m-1:-1:2
        row_acc(i) = (row_acc1(i-1) + row_acc1(i)+row_acc1(i+1))/3;
    end
    
    %%找到局部最小值和局部最大值及其对应的位置,波峰点、波谷点满足:
    peaks = linspace(0,0,m);
    valleys = linspace(0,0,m);
    peakindexs = linspace(0,0,m);
    valleyindexs = linspace(0,0,m);
    peakindex = 1;
    valleyindex = 1;
    
    for i = 2:m-1
        if row_acc(i) >row_acc(i-1) && row_acc(i)>=row_acc(i+1)
            peaks(peakindex)=row_acc(i);
            peakindexs(peakindex)=i;
            peakindex = peakindex+1;
        end
        if row_acc(i) < row_acc(i-1) && row_acc(i)<row_acc(i+1)
            valleys(valleyindex)=row_acc(i);
            valleyindexs(valleyindex)=i;
            valleyindex=valleyindex+1;
        end
    end
    % 
    %%计算VPD,VPD(n)表示第n个波谷点的值与第n个波峰点的值的差,VPD用来去掉那些假的波峰点
    pcount = peakindex-1;
    vcount = valleyindex-1;
    peakindices = linspace(0,0,pcount);
    for i = 1:pcount
        peakindices(i) = peakindexs(i);
    end
    valleyindices = linspace(0,0,vcount);
    for i = 1:vcount
        valleyindices(i) = valleyindexs(i);
    end
    % figure;
    % plot(row_acc,'-o', 'MarkerIndices',peakindices,'MarkerFaceColor','red','MarkerSize',5);
    % 
    % figure;
    % plot(row_acc,'-s', 'MarkerIndices',valleyindices,'MarkerFaceColor','green','MarkerSize',5);
    if pcount>2 && vcount>2
        if peakindexs(1) < valleyindexs(1)
            peakindex=2;
        else
            peakindex=1;
        end
        vindex=1;
    end
    
    if peakindex == 2
        for i = 1:m-1
            peaks(i)=peaks(i+1);
        end
        pcount = pcount-1;
        pindex=1;
    end
    
    vpd = linspace(0,0,m);
    vpd1 = linspace(0,0,m);
    for i=1:pcount
        vpd(i) = peaks(i) - valleys(i);
    end
    
    dels = linspace(0,0, pcount);
    peakindexs1 = linspace(0,0,pcount);
    if pcount > 2
        lastcount=pcount;
        curcount = 1;
        while lastcount ~= curcount
            lastcount = curcount;
            del_count = 0;
            for i = 2:pcount-1
                if vpd(i) <= 0.7 * (vpd(i-1) + vpd(i)+vpd(i+1)) / 3
                    dels(i)=1;
                end
            end
    
            count = 1;
            for i = 1:pcount
              if dels(i) ~= 1
                  vpd1(count) = vpd(i); 
                  peakindexs1(count) = peakindexs(i);
                  count = count+1;
              else
                   del_count = del_count + 1;
                   dels(i) = 0;
               end
            end
            pcount = pcount - del_count;
            for i = 1:pcount
                vpd(i) = vpd1(i); 
                peakindexs(i) = peakindexs1(i);
            end
            peakindexs(pcount+1) = 0;
            vpd(pcount+1) = 0;
    
            indices = linspace(0,0,pcount);
            for i = 1:pcount
                indices(i) = peakindexs1(i);
            end
            plot(row_acc,'-o', 'MarkerIndices',indices,'MarkerFaceColor','red','MarkerSize',10);
            curcount = pcount;
        end  
    end
    
    % [pks,locs]=findpeaks(row_acc,'Npeaks',1,'MinPeakHeight',20);
    % jieyue=row_acc(:,[locs-200:L]);%从触发峰值点左边200处分离
    % figure
    % plot(jieyue)
    % yingbian=x(:,[1:locs-200]);
    % figure
    % plot(yingbian)
    % ylim([-50 300])
    % 
    % % figure
    % % plot(locs,pks)
    % 
    
    

    Copyright © 2020 by RichardYang. All rights reserved.
    仅供参考,严禁转载,感谢。

    展开全文
  • matlab.峰值提取m文件

    热门讨论 2011-06-12 21:37:10
    matlab.峰值提取m文件.matlab程序
  • 被定义为 : PSNR(x,y) = 10*log10( max(max(x),max(y))^2 / |xy|^2 )。
  • 图像 matlab 峰值信噪比 im2double double

    千次阅读 2013-04-26 21:54:21
    % 图像峰值信噪比PSNR、均方根误差MSE % By lyqmath % Dalian University of Technology % School of Mathematical Sciences function [PSNR, MSE] = psnr(X, Y) % 计算峰值信噪比PSNR、均方根误差...
    简介
    PSNR 是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR 较高者看起来反而比PSNR 较低者差。
    这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。
    (参考百度百科)

    计算公式:
    未命名.PNG
    2010-12-15 21:45:44 上传
    下载附件 (10.22 KB)
    展开全文
  • 轻松让您在 MATLAB 上自动查找、绘制和标记局部最大值(峰值)和局部最小值 此代码需要MATLAB信号处理工具箱,可在此处下载: https : //www.mathworks.com/products/signal.html 如何使用这些功能: 你只需要你的...
  • matlab开发-峰值信号电压。变形图像与参考图像平方强度差的平均值
  • 返回向量的峰峰值。 该值计算为平均正峰值和平均谷值之间的距离。 如果信号有噪声,那么噪声中的波峰和波谷将被平均到结果中,因此您首先发出信号。
  • PSNR峰值信噪比matlab实现

    万次阅读 2017-08-01 17:30:33
    PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。这里主要定义了两个值,一个是...

    PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下:

    这里的MAX通常是图像的灰度级,一般就是255了。

    这里就不用什么压缩算法了,就是将图像缩小再放大比较一下,下面是代码:

    close all;
    clear all;
    clc;
    
    img=imread('lena.jpg');
    [h w]=size(img);
    imgn=imresize(img,[floor(h/2) floor(w/2)]);
    imgn=imresize(imgn,[h w]);
    img=double(img);
    imgn=double(imgn);
    
    B=8;                %编码一个像素用多少二进制位
    MAX=2^B-1;          %图像有多少灰度级
    MES=sum(sum((img-imgn).^2))/(h*w);     %均方差
    PSNR=20*log10(MAX/sqrt(MES));           %峰值信噪比
    原图

    图像宽高分别缩小1/2再放大到原图,PSNR=30.2dB

    图像宽高分别缩小1/5再放大到原图,PSNR=24.5dB


    当PSNR值大于30dB的时候,可以认为去噪或压缩后的图像质量较好,低于20dB表示图像质量不可接受

    转自http://www.cnblogs.com/tiandsp/archive/2012/11/14/2770462.html

    展开全文
  • 这个程序就是一个 寻找峰值的源程序,希望对大家有用 (This program is a search for the peak of the source, want to be useful);http://www.pudn.com/Download/item/id/1589189.html
  • Matlab 的“findpeaks”有一个稍微不同的定义,其中峰值只需间隔一些最小距离,但不必是其区域中的实际最大值。 要查看差异: x=cos(linspace(0,50,1000))+randn(1,1000)*.2; [位置高度]=peakperformance(x,30); %...
  • 峰值检测代码

    2014-06-18 20:22:03
    峰值检测matlab,经测可以使用。喜欢就赶紧下载吧
  • 排序代码奥帕斯 一系列在线峰值排序算法 所有代码都在MATLAB中运行。 首先,打开脚本“ test_algorithm.m”。 该模型的描述在NIPS 2013中发表的论文《神经脉冲的伽马过程模型的实时推断》中。
  • 一维信号峰值检测Matlab实现

    万次阅读 2018-07-16 22:34:08
    matlab代码: pcount = peakindex- 1 ; vcount = valleyindex- 1 ; peakindices = linspace ( 0 , 0 ,pcount); for i = 1 :pcount peakindices( i ) = peakindexs( i ); end valleyindices = linspace...

    参考论文:https://pdfs.semanticscholar.org/56f1/49e51aa9fb9b0b46412b864839f34701d421.pdf
    先使用3点运动均值滤波器处理一维信号,先前向再后向处理。作为例子,这里先生成正弦信号波形图,然后执行3点前向运动均值滤波,再3点均值后向运动滤波。信号S(n)={s1,s2,s3,s4,…,sn}.

    x = 0:0.05:50*pi;
    row_acc = sin(x);
    m = length(row_acc);
    row_acc1 = linspace(0,0,m);
    row_acc1(1) = row_acc(1);
    row_acc1(m) = row_acc(m);
    for i=2:m-1
       row_acc1(i)=(row_acc(i-1) + row_acc(i)+row_acc(i+1))/3;
    end
    figure;
    plot(row_acc1);
    
    for i=m-1:-1:2
        row_acc(i) = (row_acc1(i-1) + row_acc1(i)+row_acc1(i+1))/3;
    end

    找到局部最小值和局部最大值及其对应的位置,波峰点、波谷点满足:
    这里写图片描述

    peaks = linspace(0,0,m);
    valleys = linspace(0,0,m);
    peakindexs = linspace(0,0,m);
    valleyindexs = linspace(0,0,m);
    peakindex = 1;
    valleyindex = 1;
    for i = 2:m-1
        if row_acc(i) >row_acc(i-1) && row_acc(i)>=row_acc(i+1)
            peaks(peakindex)=row_acc(i);
            peakindexs(peakindex)=i;
            peakindex = peakindex+1;
        end
        if row_acc(i) < row_acc(i-1) && row_acc(i)<row_acc(i+1)
            valleys(valleyindex)=row_acc(i);
            valleyindexs(valleyindex)=i;
            valleyindex=valleyindex+1;
        end
    end

    计算VPD,VPD(n)表示第n个波谷点的值与第n个波峰点的值的差,VPD用来去掉那些假的波峰点,
    这里写图片描述
    计算了VPD之后,搜索VPD,如果满足:
    这里写图片描述,则这个波峰点是假的,移除。

    程序流程如下:
    这里写图片描述
    matlab代码:

    pcount = peakindex-1;
    vcount = valleyindex-1;
    peakindices = linspace(0,0,pcount);
    for i = 1:pcount
        peakindices(i) = peakindexs(i);
    end
    
    valleyindices = linspace(0,0,vcount);
    for i = 1:vcount
        valleyindices(i) = valleyindexs(i);
    end
    
    figure;
    plot(x, row_acc,'-o', 'MarkerIndices',peakindices,'MarkerFaceColor','red','MarkerSize',5);
    
    figure;
    plot(x, row_acc,'-s', 'MarkerIndices',valleyindices,'MarkerFaceColor','red','MarkerSize',5);
    
    if pcount>2 && vcount>2
        if peakindexs(1) < valleyindexs(1)
            peakindex=2;
        else
            peakindex=1;
        end
        vindex=1;
    end
    
    if peakindex == 2
        for i = 1:m-1
            peaks(i)=peaks(i+1);
        end
        pcount = pcount-1;
        pindex=1;
    end
    
    vpd = linspace(0,0,m);
    vpd1 = linspace(0,0,m);
    for i=1:pcount
        vpd(i) = peaks(i) - valleys(i);
    end
    
    dels = linspace(0,0, pcount);
    peakindexs1 = linspace(0,0,pcount);
    if pcount > 2
        lastcount=pcount;
        curcount = 1;
        while lastcount ~= curcount
            lastcount = curcount;
            del_count = 0;
            for i = 2:pcount-1
                if vpd(i) <= 0.7 * (vpd(i-1) + vpd(i)+vpd(i+1)) / 3
                    dels(i)=1;
                end
            end
    
            count = 1;
            for i = 1:pcount
              if dels(i) ~= 1
                  vpd1(count) = vpd(i); 
                  peakindexs1(count) = peakindexs(i);
                  count = count+1;
              else
                   del_count = del_count + 1;
                   dels(i) = 0;
               end
            end
    
            pcount = pcount - del_count;
            for i = 1:pcount
                vpd(i) = vpd1(i); 
                peakindexs(i) = peakindexs1(i);
            end
            peakindexs(pcount+1) = 0;
            vpd(pcount+1) = 0;
    
            indices = linspace(0,0,pcount);
            for i = 1:pcount
                indices(i) = peakindexs1(i);
            end
            figure;
            plot(x, row_acc,'-o', 'MarkerIndices',indices,'MarkerFaceColor','red','MarkerSize',10);
            curcount = pcount;
        end
    end
    展开全文
  • MATLAB下求两幅图像的峰值信噪比(PSNR)。讨厌在网上下到骗分的东西。小程序,保证能运行。 MATLAB下求两幅图像的峰值信噪比(PSNR)。讨厌在网上下到骗分的东西。小程序,保证能运行。
  • 如何用matlab找出一组离散数据中的峰值 对于一组离散数据,我们经常需要找出其中的峰值,如下一组离散数据: x = [1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1] 为了更直观显示,画出数组x的图。可以看出共有三个峰值...
  • Matlab—寻找峰值函数介绍

    万次阅读 2017-11-30 21:33:40
    方法一: findpeaks 寻找峰值函数 ...[pks,locs] = findpeaks(data) ------pks 对应峰值,locs 对应峰值位数 [...] = findpeaks(data,'minpeakheight',mph)----mph 设定峰值的最小高度 [...] = findpeaks(data
  • 基于密度峰值快速搜索发现聚类中心的聚类算法源代码。
  • 需要求多个峰值的二维矩阵如下: figure(); % 总功率谱绘图 surf(MatrixA); 绘图结果: 然后求取峰值位置(需要安装图像处理工具箱): PeaksMap = imregionalmax(MatrixA); 其得到的结果如下,可以看到是峰值的...
  • MATLAB)一维信号峰值检测findpeaks

    千次阅读 2020-12-16 17:55:06
    一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,297
精华内容 2,118
关键字:

matlab峰值

matlab 订阅