2

周波数0.2Hz、サンプリングレート2Hzの正弦波の100サンプルをmatlabで生成したいと考えています。、このために私は次のコードを使用しました

f=0.2;
 fs=2;
 A=100;%suppose that amplitude is 100
 q=20;
 t=0:1/fs:50;
 x=A*sin(2*pi*f*t+q);

しかし、x の長さは 100 ではなく 101 です。正確に 100 のサンプル データを生成するための正しい形式は何でしょうか?サイズ 100 のサンプル データを取得するための上限を概算しました。このため、50 を選択しました。このための他の方法はありますか?もちろん、期間を計算できます

T=1/f=5;

しかし、どのように使用できますか?それを fs で乗算する必要がありますか、逆に fs を周期で除算する必要がありますか?

4

2 に答える 2

3

linspace関数を試すことができます。

number_of_sample_data = 100;
f = 0.2;
fs=2;
A=100;%suppose that amplitude is 100
q=20;
tf=number_of_sample_data/fs; %final time
t=linspace(0,tf,number_of_sample_data);
x=A*sin(2*pi*f*t+q);

ただし、linspace@Franck Dernoncourt のより効率的なソリューションとまったく同じ数値が得られるとは限らないことに注意してください。これは、一部の数値を浮動小数点で正確に表すことができずlinspace、ベクターの作成方法が若干異なるためです。入力edit linspaceして方法を確認してください。あなたが与えた特定の値について、1/fs=0.5 は浮動小数点で正確に表現できるため、@Franck Dernoncourt のソリューションはより効率的で正確です。

于 2013-05-12T17:18:26.990 に答える