clear allclose all
clc
L=500 %仿真长度
c = [1 -0.5]
nc = length(c) - 1
xik=zeros(nc,1) %白噪声初值
xi=randn(L,1) %产生均值为0,方差为1的高斯白噪备碧伍声序列
for k=1:L
e(k)=c*[xi(k)xik] %产生有色噪声
%数据更新
for i=nc:-1:2
xik(i)=xik(i-1)
end
xik(1)=xi(k)
end
subplot(2,1,1)
plot(xi)
xlabel('k')ylabel('噪声幅值')title('白噪声序慧渗列')
subplot(2,1,2)
plot(e)
xlabel('k')ylabel('噪声幅值')title('有色噪声序列'仿或)
%测试功率谱
[y1,f1] = Spectrum_Calc(xi',512)
p1 = 1/L * y1.*conj(y1)
figure(2)
subplot(211)
plot(f1,p1)
[y2,f2] = Spectrum_Calc(e,512)
p2 = 1/L * y2.*conj(y2)
subplot(212)
plot(f2,p2)
MATLAB里面没有专门产生这种噪声的命令,不过你可以凯键先用rand,randn这样的产生随机白噪声,然后用filter来滤一盯信巧下。就能得到粉噪声了。
具坦首体设置什么的你参考randn,filter这些命令吧,不给分,具体的俺不说。
标 题: 用MATLAB来生成有色噪声发信站: 哈工大紫丁香 (2001年07月12日17:13:53 星期四液睁), 站内信件
rand产生的是白噪声,那么有色噪声如何产生的呢?
这是从清华转过来的一个m文件。
FFT变幻然后IFFT变幻虚袜
function sig=FractRnd(beta,k,HuaTu)
%sig=FractRnd(beta,k,HuaTu)
%To generate 1/f^betta noise
%INPUT
%beta is the exponent, a number
%k is the number of synthetic data points
%OUTPUT
%sig is a k-point array
%
if nargin==2
HuaTu=0
end
len_beta=length(beta)
phi_k=2*pi*rand(1,k)
f=[1:k].^(-beta/2).*exp(i*phi_k(1:k))
sig=real(ifft(f))
sig=(sig-mean(sig))./std(sig)
if HuaTu
%To verify the scaling behavior of power spectral density:
% P(f) ~ 1/f^beta
figure(HuaTu)
F=fft(sig)
P=(abs(F)).^2
P([1,round(end/2):end])=[]
% plot(log(1:length(P)),log(P))
loglog(1:length(P),P,'k')
xlabel('Frequency'差埋激)
ylabel('Power spectrum')
% pause
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)