我在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轴上写单位的最佳方法是什么?这可以转化为对环境科学家更有意义的东西吗?
答案 0 :(得分: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
中,可以忽略。
对于你的第二个问题,我不认为轴会改变它将再次frequency
。对于Fs
,您应该使用风速的采样频率,就像在10
Fs
10
{{1}}一秒钟内有{{1}}个速度样本一样。图表中频率越高意味着风速变化越大,频率越低表示速度变化越小。