3

matlab で pwelch メソッドを使用して、風速測定のパワー スペクトルを計算しています。だから、これまでのところ、例として次のコードを書いています。

t = 10800; % number of seconds in 3 hours
t = 1:t; % generate time vector
fs = 1; % sampling frequency (seconds)
A = 2; % amplitude
P = 1000; % period (seconds), the time it takes for the signal to repeat itself
f1 = 1/P; % number of cycles per second (i.e. how often the signal repeats itself every second).
y = A*sin(2*pi*f1*t); % signal

fh = figure(1);
set(fh,'color','white','Units', 'Inches', 'Position', [0,0,6,6],...
    'PaperUnits', 'Inches', 'PaperSize', [6,6]);
[pxx, f] = pwelch(y,[],[],[],fs);
loglog(f,10*(pxx),'k','linewidth',1.2);
xlabel('log10(cycles per s)');
ylabel('Spectral Density (dB Hz^{-1})');

評判ポイントが足りないのでプロットを含めることはできません

これは理にかなっていますか?プロットの右側にノイズがあるという考えに苦労しています。分解された信号はノイズのない正弦波でしたが、このノイズはどこから来たのでしょうか? y 軸の値が負であるという事実は、それらの頻度が無視できることを示唆していますか? また、風速が m/s で測定される場合、y 軸に単位を書き込む最良の方法は何でしょうか。これは、環境科学者にとってより意味のあるものに変換できますか?

4

1 に答える 1

3

あなたの結果は問題ありません。dB混乱する可能性があります。

線形プロットは見やすく、

Fs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
y = sin(2 * pi * 50 * t);     % 50Hz signal

fftアプローチ、

NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
subplot(1,2,1);
plot(f,2*abs(Y(1:NFFT/2+1))) 
xlabel('Frequency (Hz)') 
ylabel('|Y(f)|')

pwelchアプローチ、

subplot(1,2,2);
[pxx, freq] = pwelch(y,[],[],[],Fs);
plot(freq,10*(pxx),'k','linewidth',1.2);
xlabel('Frequency (Hz)'); 
ylabel('Spectral Density (Hz^{-1})');

ここに画像の説明を入力

ご覧のとおり、どちらも にピークがあり50Hzます。

loglog両方に使用して、

ここに画像の説明を入力

したがって、「ノイズ」は1e-6存在し、fft無視することもできます。

2 番目の質問については、軸が変わるとは思いませんfrequency。1秒間に速度のサンプルがあるFs場合のように、風速のサンプリング周波数を使用する必要があります。グラフの周波数が高いほど風速の変化が大きく、周波数が低いほど速度の変化が少ないことを意味します。10Fs10

于 2014-11-22T17:17:11.143 に答える