0

我有一个问题,我对此非常感兴趣,假设我在 matlab 中有两个 M 文件,在第一个文件中,我描述了以下用于计算峰值和峰值指数的函数

function [peaks,peak_indices] = find_peaks(row_vector)
    A = [0 row_vector 0];
    j = 1;
    for i=1:length(A)-2
        temp=A(i:i+2);
        if(max(temp)==temp(2))
            peaks(j) = row_vector(i);
            peak_indices(j) = i;
            j = j+1;
        end
    end
end

在第二个 M 文件中,我有用于描述给定数据样本的正弦模型的代码

function [ x ]=generate(N,m,A3)

f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))';
wn = rand(length(t),1).*2 - 1;
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;

end

我的问题是如何将它组合在一起?一个解决方案是在文件夹中创建两个 M 文件,然后从一个 M 文件调用函数并对给定向量进行操作并获得结果,然后从另一个 M 文件调用第二个函数给定结果并最终得到我们想要的,但我想在一个大的 M 文件中构建它,在 c++ 中,在 java 中,我们可以创建类,但我不确定我们是否也可以在 matlab 中做同样的事情,请帮助我澄清一切并使用 find_peaks 函数生成函数

更新: 好的,现在我想展示我在代码中所做的简单更改

function [ x ] = generate(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = rand(length(t),1).*2 - 1;
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
[pks,locs] = findpeaks(x);
end

我在 matlab 中使用 findpeaks 内置函数,但出现以下错误

generate(1000,50,50)
Undefined function 'generate' for input arguments of type 'double'.

我也很感兴趣避免混叠的有效采样率是多少?

4

2 回答 2

4

您可以简单地将两者放在一个文件中。该文件必须与其中的第一个函数同名,您将无法从该文件外部访问随后定义的函数。请参阅有关函数的 MATLAB 文档http://www.mathworks.co.uk/help/matlab/ref/function.html(尤其是示例部分)。

另请注意,MATLAB 有一个内置函数 findpeaks()。

(顺便说一句,您仍然以太低的频率进行采样,并且肯定会出现混叠 - 请参阅http://en.wikipedia.org/wiki/Aliasing#Sampling_sinusoidal_functions

编辑:根据您的要求,这里有一些关于采样定理的更多信息。这些基础知识的简单介绍是http://www.dspguide.com/ch3/2.htm,为了进一步阅读,您应该搜索香农/奈奎斯特采样定理。

于 2013-03-21T13:05:30.057 回答
2

在单个MATLAB脚本中尝试此操作

function test()
clc, clear all, close all
x = generate(1000,50,50);
[p,i] = find_peaks(x)
end

function x = generate(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = rand(length(t),1).*2 - 1;
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
end

function [peaks,peak_indices] = find_peaks(row_vector)
    A = [0;row_vector;0];
    j = 1;
    for i=1:length(A)-2
        temp=A(i:i+2);
        if(max(temp)==temp(2))
            peaks(j) = row_vector(i);
            peak_indices(j) = i;
            j = j+1;
        end
    end
end
于 2013-03-21T13:18:35.213 回答