关于matlab中pwelch的使用和理解

时间:2014-11-22 15:51:17

标签: matlab spectral-density

我在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轴上写单位的最佳方法是什么?这可以转化为对环境科学家更有意义的东西吗?

1 个答案:

答案 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})');

enter image description here

正如您所看到的,他们都在50Hz处达到了顶峰。

两者都使用loglog

enter image description here

所以"噪音"属于1e-6,也存在于fft中,可以忽略。

对于你的第二个问题,我不认为轴会改变它将再次frequency。对于Fs,您应该使用风速的采样频率,就像在10 Fs 10 {{1}}一秒钟内有{{1}}个速度样本一样。图表中频率越高意味着风速变化越大,频率越低表示速度变化越小。