Matlab画图问题,自相关函数,功率谱密度,求具体代码。

Matlab画图问题,自相关函数,功率谱密度,求具体代码。,第1张

clear all;

close all;

warning off all;

Fs = 1000;

nfft=1024;

idx = 0:round(nfft/2-1);

k = idxFs/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,10log10(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,10log10(Px2(idx+1))),title('(2,5)正态分布功率谱密度');

x3 = cos(600pit)+cos(640pit)+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,10log10(Px3(idx+1))),title('随机信号功率谱密度');

fai = 2pirand(1,1001);

x4 = 2cos(1000pit+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,10log10(Px4(idx+1))),title('随机相位信号功率谱密度');

matlab 二维高斯的作图

shgrid生成二维平面上的点,mvnpdf求出各点对应概率密度,需要注意mvnpdf输入参数,mesh画出3维曲面

百世岁月当代好 千古江山今朝新 万象更新

没有任何方法可以产生真正的白噪声你的那个冲击函数怎么也是有宽度的吧所以求出的功率谱密度不是直线很正常

并且求功率谱的算法也决定了功率谱计算不可避免的误差功率谱的基本估计算法是FFT,FFT求功率谱的时候本身就有很多非理想性,所以有些误差也不奇怪

function y=gammaF_xkp(a)

%% 该函数用于求参数为a的gamma函数

% 已验证正确》》》

syms x;

y=double(int(x^(a-1)exp(-x),x,0,inf));

function y=GGD_xkp(x,a,b)

%% 该函数用于生成广义高斯概率密度函数

length=numel(x);

n=zeros(length,1);

y=zeros(length,1);

gam_b=gammaF_xkp(1/b);

exp_value=sum(x)/length;

for i=1:length

n(i)=abs((x(i)-exp_value)/a)^b;

y(i)=b/(2agam_b)exp(-n(i));

end

这是两个子函数, 自己编的 。 刚好编到这儿

要生成n个离散截断高斯密度函数的随机数

1、首先用normrnd函数生成n个高斯随机数

2、剔除截断区间外的随机数,例如区间为[0,5],将小于0,大于5的数去掉,剩余数据长度记为k;

3、继续利用normrnd函数生成n-k个高斯随机数,剔除截断区间外的随机数,并将其与2的数据合并,计算其数据长度,记为k;重复步骤3直到n-k为0;

代码如下----------------------------------------------------------------------------------

n=1000 %生成n个截断高斯离散随机数据

A=normrnd(2,3,1,n); %高斯分布均值为2,标准差为3

A=A(A<5&A>0); %截断区间[0,5]

while 1

k=n-size(A,2)

if k==0

break;

end

B=normrnd(2,3,1,k);

B=B(B<5&B>0);

A=[A,B];

end

-------------------------------------------------------------------------------------

这是我的理解···不知道对不对···答题不易,望采纳

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13492554.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存