2017-06-10 20 views
0

以下は、サイクル数が指定されていない正弦波信号を生成する単純なMatlabコードです。これをどのように変更して、各サイクルの瞬時周波数が異なるようにしますか?例えば、私が10サイクルある場合、各サイクルが異なる周波数を有する合計10のランダムな周波数が存在するはずである。瞬時周波数が可変の正弦波信号

f1 = 120; 
fs = f1/60; % sampling frequency depends on f1 
no_of_cycles = 10; 
f = no_of_cycles/60; % Frequency of sinusoid 
duration = 1; % duration of the sinusoidal signal in minutes 
A = 1; 
t = 1/fs:1/fs:duration*no_of_cycles*1/f; % time index 
y1 = A*sin(2*pi*f*t); % simulated sinusoidal signal 
+0

どのように移行すべきですか?洞機能の特性の1つは、滑らかであること(あなたは無限回に区別することができる)であり、周波数を瞬時に変更することによってこの特性が取り除かれ、変化する点で実際には微分できないことである。 –

+0

ありがとうございます。私の分析では、1サイクルでフィーチャを生成するので、現在のアプリケーションでは問題にはならないはずです。 – Shraddha

答えて

1

たとえば、周波数のベクトルがあるとします。

frequencies = [1,2,3,4,5]; 

はその後、我々は、異なる周波数でそれぞれ、互いの上にlength(frequencies)プロットを作りたいです。お互いの上にプロットを作成するには、plotコマンドの後にコマンドhold onを使用できます。

さらに、前回の停止時に次のサインカーブを続行したいと思うので、時間を記録しておく必要があります。このために私は変数curTimeendTimeを使って、信号の開始と終了の時刻を示します。我々はそれから始まるものと同じではありません終了正弦曲線のy値を周波数をチャンスとして、しかし

frequencies = [1,2,3,4,5]; 
curTime = 0; 
for i = 1:length(frequencies) 
    endTime = curTime + 2*pi/frequencies(i); 
    t = curTime:0.1:endTime; 
    plot(t,sin(frequencies(i)*t)) 
    curTime = endTime; 
    hold on 
end 

:今、私たちのようなものを持っています。あなたがそれを継続したいと思っていると思ったら、私たちは$ sin(f t + s)$の$ s $を変えることで、次の正弦曲線をシフトさせることでそれらに参加する必要があります。全体のサイクルに興味があるので、$ f t + s = 0 $のように$ s $を選択することができます。それから、私たちは次のように終わります:

frequencies = [1,2,3,4,5]; 
curTime = 0; 
h = 0.01; 
for i = 1:length(frequencies) 
    endTime = curTime + 2*pi/frequencies(i); 
    t = curTime:h:endTime; 
    shift = frequencies(i)*t(1); 
    plot(t,sin(frequencies(i)*t-shift)) 
    curTime = endTime; 
    hold on 
end 
+0

ありがとうございます。私が投稿したコードにこのコンセプトを組み込む方法を教えてください。 – Shraddha