|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 wdhd 于 2016-9-8 14:40 编辑
%%本程序是根据白噪声的功率谱来求时域信号
%%源程序来自于:王济,胡晓.MATLAB在振动信号处理中的应用.中国水利水电出版社,2005,150:152
clear
clc
sf=400;%采样频率
fi=0.5;%最小截止频率
fa=90;%最大截止频率
tl=40;%时间长度
am=1.1;%最大幅值
n=round(sf*tl)+1;%计算白噪声信号数据长度
t=0:1/sf:(n-1)/sf;%建立信号离散时间向量
nfft=2^nextpow2(n);%确定FFT长度
ni=round(fi*nfft/sf+1);%确定最小截止频率对应数组元素的下标
na=round(fa*nfft/sf+1);%确定最大截止频率对应数组元素的下标
r=zeros(1,nfft/2);%建立一个长度为nfft/2元素全为0的向量
r(ni:na)=1;%将r的正频率带通内的元素赋为1,其余为0 *****************(1)
a=2*pi*rand(1,nfft/2);%产生随机向量
b=r.*exp(i*a)*nfft/2;%将幅值谱和相位谱转换在实部和虚部
a=[b,b(nfft/2:-1:1)];%将正负圆频率向量组合成一个向量
x=real(ifft(a,nfft));%IFFT变换,并取实部为白噪声信号
y=am*x(1:n)/max(abs(x(1:n)));%取指定长度的数据并使数据的最大值为指定的幅值 ********(3)
nft=1024;%定义自功率谱的FF长度
y1=psd(y,nft,sf,boxcar(nft),nft/2);%计算白噪声的自功率谱**********(2)
f=0:sf/nft:(nft/2-1)*sf/nft;%确定频率向量
subplot(2,1,1)
plot(t,y,'k-')
xlabel('频率 (Hz)')
ylabel('幅值')
grid on
subplot(2,1,2)
plot(f(1:nft/4),y1(1:nft/4),'k-')
xlabel('频率 (Hz)')
ylabel('幅值')
grid on
问题1: r数组为白噪声的功率谱数组,在0.5~90Hz范围内,白噪声的功率谱为1,但由功率谱求出时域信号后,再对时域信号求功率谱,为什么前后的功率谱不同? 见程序的(1)式和(2)式
问题2: 将是时域信号的最大值改变为指定的最大幅值,会影响时域信号的功率谱的大小吧,因此这样改变最大值有何实际意义? 见程序的(3)式
[ 本帖最后由 zzyhnhtth 于 2008-1-2 22:02 编辑 ]
|
-
白噪声及其功率谱
|