2013-03-21 56 views
1

我有問題,關於我太感興趣,假設我有兩個M文件在MATLAB中,在第一個我已經描述了以下函數來計算峯值和峯值indeeded在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文件中調用函數,並對給定的矢量和ge進行操作結果,然後調用第二個函數從另一個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 

我用findpeaks內置函數在MATLAB中,但我得到以下錯誤

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

我也感興趣什麼是有效的採樣率,以避免混疊?

+0

如果你的目標寫內MATLAB的面向對象的代碼(如Java和C++),你可以很容易地做到這一點! – fpe 2013-03-21 13:37:11

回答

3

嘗試用這個,單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 
+0

但是當我運行測試,它只顯示一些值不是,exmaple – 2013-03-21 13:53:28

+0

索引編輯答案。順便說一句,我會建議解決你的峯值功能,你可以避免循環。 – fpe 2013-03-21 13:56:58

+0

使用matlab函數findpeaks?我怎麼用它? – 2013-03-21 13:58:15

5

你可以簡單地把它們放在一個文件中。該文件必須與其中的第一個函數具有相同的名稱,並且您將無法訪問該文件之外的隨後定義的函數。請參閱關於功能http://www.mathworks.co.uk/help/matlab/ref/function.html的MATLAB文檔(特別是示例部分)。

另外請注意,MATLAB有一個內置函數findpeaks()。

(順便說一句,你仍然在過低的頻率和採樣肯定會得到走樣 - 見http://en.wikipedia.org/wiki/Aliasing#Sampling_sinusoidal_functions

編輯:根據你的要求吧,這裏是抽樣定理的一些詳細信息。對這些基礎知識的簡單介紹是http://www.dspguide.com/ch3/2.htm,爲了進一步閱讀,您應該搜索Shannon/Nyquist採樣定理。

+0

那麼相關的採樣率會是多少? – 2013-03-21 13:48:13

+0

也是錯誤是這個未定義的函數'生成'類型'雙'的輸入參數。 – 2013-03-21 13:57:11