これは、時間領域で三角波形を生成し、それに対応するフーリエ級数/変換を生成するための私のコードです(matlabにはフーリエ変換関数しかないため、その級数または変換かどうかはわかりませんが、信号は周期的であるため、参照は次のように述べています対応するフーリエはフーリエ級数と呼ばれる必要があります)。
x = 0;
s = 50; % number of sinusoidal components
fs = 330; % hertz
dt = 1/fs; % differential time
t = [0:dt:4]; % seconds
const = 2 / (pi^2);
for k = 1:2:s,
x = x + (((-1)^((k - 1) / 2)) / (k^2)) * sin(4*pi*k*t);
end
x = const * x;
% amplitude = max(x) = 0.2477
% period = 0.5 seconds
f = linspace(-fs/2,fs/2,length(x));
xk = fftshift(fft(x));
figure;
subplot(3,1,1);
plot(t,x);
grid on;
xlabel('time(seconds)');
title('Time Domain');
subplot(3,1,2);
plot(f,abs(xk));
grid on;
xlabel('frequency(hertz)');
title('Magnitude Spectrum');
subplot(3,1,3);
plot(f,angle(xk));
grid on;
xlabel('frequency(hertz)');
title('Phase Spectrum');
これは、時間領域信号、振幅スペクトル、および位相スペクトルに対して生成されたプロットです。
リンク: fs = 330hz
私の問題は、サンプリング周波数 (現在 330 Hz に等しい fs) を別の値に変更すると、振幅スペクトルと位相スペクトルのプロットが変化することです。
サンプリング周波数が 400 Hz に等しい場合の振幅スペクトルと位相スペクトルのプロットを次に示します。
リンク: fs = 400 Hz
なぜこれが起こるのか説明できますか?また、サンプリング周波数が与えられたときの振幅スペクトルと位相スペクトルの一定のプロットを取得するにはどうすればよいでしょうか?