如果我想在Matlab中绘制一个简单的正弦波的PSD,我会做如下的事情:
Fs = 1000;
t = 0:1/Fs:1-(1/Fs);
x = cos(2*pi*100*t) ;
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psdx))
grid on
但是,为简单起见,我在SIMULINK中有一个正弦波发生器,我需要绘制PSD.我做了类似以下的事情:
然后我得到了一个名为“Sinwave”的变量,我怎么可能应用上面的Matlab代码来绘制PSD?
请注意,变量Sinewave是1×1双倍时间序列.我试图用Sinwave替换x,但它没有用.
更新:应用答案
我应用了推荐的内容,但是我的输出与使用Matalb的输出不同.这是我使用的代码:
Fs = 1000;
x = Sinwave.Data;
N = length(x);
dft = fft(x);
dft = dft(1:N/2+1);
psd = (1/(Fs*N)) * abs(dft).^2;
psd(2:end-1) = 2*psd(2:end-1);
freq = 0:Fs/length(x):Fs/2;
plot(freq,10*log10(psd))
grid on
这个用于SIMULINK导出的正弦波
但是,来自matlab代码的代码如下:
我需要输出来自matalb,在噪声层中具有所有这些涟漪.如何获得准确的输出?
请注意我已经使用了两者的确切值.
更新2:SIMULINK正弦波设置
1-正弦波块
2-到工作区块
3-解算器