y=sin(2*pi*0.2*n)+sin(2*0.213*n)
Y=fft(y)%FFTPyy=Y.*conj(Y)/2000%信号功率谱f=10*(0:1000)/2000%计算横轴频率值figure(1)subplot(2,1,1),plot(n,y),title('信号'),xlabel('时间(S)')subplot(2,1,2),plot(f,Pyy(1:1001)),title('信号功率谱'),xlabel('频率(Hz)')
请前敏拍采纳拿首答案,支持我一下。
matlab实现经典功率谱估计fft做出来是频谱,psd做出来是功率谱;功率谱丢失了频谱的相位信息;频谱不同的信号其功率谱是可能相同的;功率谱是幅度取模后平方,结果是或孝个实数
matlab中自功率谱密度直接用psd函数就可以求,按照matlab的说法,psd能实现Welch法估计,即相当于用改进的平均周期图法来求取随机信号的功率慧肆谱密度估计。psd求出的结果应该更光滑吧。
1、直接法:
直接法又称周期图法,它是前团轿把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。
Matlab代码示例:
clear
Fs=1000
%采样频率
n=0:1/Fs:1
%产生含有噪声的序列
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n))
window=boxcar(length(xn))
%矩形窗
nfft=1024
[Pxx,f]=periodogram(xn,window,nfft,Fs)
%直接法
plot(f,10*log10(Pxx))
clear allclose all
warning off all
Fs = 1000
nfft=1024
idx = 0:round(nfft/2-1)
k = idx*Fs/nfft
t = 0:1/Fs:1
x1 = rand(1,1001)
[cor1 lag1] = xcorr(x1,'unbiased')
figure(1)
subplot(211),plot(lag1/Fs,cor1),title('(0,1)均匀分布自相关函数')
Xk1 = fft(cor1,nfft)
Px1 = abs(Xk1)
subplot(212),plot(k,10*log10(Px1(idx+1))),title('(0,1)均匀分布功率谱密度')
x2 = normrnd(2,5,1,1001)
[cor2 lag2] = xcorr(x2,'unbiased')
figure(2)
subplot(211),plot(lag2/Fs,cor2),title('(2,5)正态分布自相关函数枯竖')
Xk2 = fft(cor2,nfft)
Px2 = abs(Xk2)
subplot(212),plot(k,10*log10(Px2(idx+1))),title('(2,5)正态分布功率谱密度')
x3 = cos(600*pi*t)+cos(640*pi*t)+randn(1,1001)
[cor3 lag3] = xcorr(x3,'unbiased')
figure(3)
subplot(211),plot(lag3/Fs,cor3),title('随机信号自相关函数')
Xk3 = fft(cor3,nfft)
Px3 = abs(Xk3)
subplot(212),plot(k,10*log10(Px3(idx+1))),title('随机信号功率谱肆亏密度')
fai = 2*pi*rand(1,1001)
x4 = 2*cos(1000*pi*t+fai)
[cor4 lag4] = xcorr(x4,'unbiased')
figure(4)
subplot(211),plot(lag4/Fs,cor4),title('随机相位信号自相关函数')
Xk4 = fft(cor4,nfft)
Px4 = abs(Xk4)
subplot(212),plot(k,10*log10(Px4(idx+1))),title('随机相位裂败神信号功率谱密度')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)