0

以下のコードは、fft 関数に関する Matlab 2011a ヘルプからのものです。ここに問題があると思います: なぜ彼らは t(1:50) を Fs で乗算し、ミリ秒単位の時間だと言うのですか? 確かに、この非常に特殊なケースではたまたま正しいのですが、Fs の値をたとえば 2000 に変更すると、明らかにこの係数が 2 であるため、機能しなくなります。誤解を招きやすいですね。何が恋しいですか?

Fs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); 
y = x + 2*randn(size(t));     % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

これでより明確:

fs = 2000;          % Sampling frequency
T = 1 / fs;         % Sample time
L = 1000;           % Length of signal
t2 = (0:L-1)*T;     % Time vector
f = 50;             % signal frequency
s2 = sin(2*pi*f*t2);
figure, plot(fs*t2(1:50),s2(1:50)); % NOT good
figure, plot(t2(1:50),s2(1:50));    % good
4

1 に答える 1

1

あなたは何も見逃すことはありません。これは、各行のコメントとしてユニットを持たない典型的な悪い習慣です。例えば、

 Fs=1000;          % in [Hz]
 T=1/Fs;           % [sec]
 L = 1000;         % Length of signal
 t = (0:L-1)*T;    % Time vector

次に、時間ベクトルの単位は 1/1000 秒またはミリ秒です... (各要素は 1 ミリ秒です)。他のケースでは、Fs=2000 %[Hz] となり、時間ベクトルの単位は 1/2000 秒になります...

于 2012-09-30T03:32:42.190 に答える