就是做一个fft就可以了。示例:
t=0:0001:06;x=sin(2pi50t)+sin(2pi120t);
y=x+2randn(size(t));
Fs=1024; %采样频率
N=1024; %采样点数
Y=fft(y,N);
Pyy=Yconj(Y)/N; %power spectrum
f=Fs(0:(N/2))/N;
plot(f,Pyy(1:(N/2+1)))
title('功率谱')
xlabel('频率/(Hz)')
分太少,算了,给你一个源程序吧,C++的boost库,你直接调用吧,这样就不用自己再写那个产生随机数的函数,使用这个函数产生你要求的样本,统计这个样本得到你后边的均值和方差,老师大概是想让你比较产生出来的值和你的理论值1和4有多少差别。
/ boost random/normal_distributionhpp header file
Copyright Jens Maurer 2000-2001
Distributed under the Boost Software License, Version 10 (See
accompanying file LICENSE_1_0txt or copy at
>
/
Author :wacs5
DATE :20090408(YYYMMDD)
Functtion :多项式拟合polyfit
/
#include <stdioh>
#include <conioh>
#include <stdlibh>
#include <mathh>
main()
{
int i,j,m,n=7,poly_n=2;
double x[7]={1,2,3,4,6,7,8},y[7]={2,3,6,7,5,3,2};
double a[3];
void polyfit(int n,double x,double y,int poly_n,double a[]);
system("cls");
polyfit(n,x,y,poly_n,a);
for (i=0;i<poly_n+1;i++)/这里是升序排列,Matlab是降序排列/
printf("a[%d]=%g\n",i,a[i]);
getch();
}
/==================polyfit(n,x,y,poly_n,a)===================/
/=======拟合y=a0+a1x+a2x^2+……+apoly_nx^poly_n========/
/=====n是数据个数 xy是数据值 poly_n是多项式的项数======/
/===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====/
void polyfit(int n,double x[],double y[],int poly_n,double a[])
{
int i,j;
double tempx,tempy,sumxx,sumxy,ata;
void gauss_solve(int n,double A[],double x[],double b[]);
tempx=calloc(n,sizeof(double));
sumxx=calloc(poly_n2+1,sizeof(double));
tempy=calloc(n,sizeof(double));
sumxy=calloc(poly_n+1,sizeof(double));
ata=calloc((poly_n+1)(poly_n+1),sizeof(double));
for (i=0;i<n;i++)
{
tempx[i]=1;
tempy[i]=y[i];
}
for (i=0;i<2poly_n+1;i++)
for (sumxx[i]=0,j=0;j<n;j++)
{
sumxx[i]+=tempx[j];
tempx[j]=x[j];
}
for (i=0;i<poly_n+1;i++)
for (sumxy[i]=0,j=0;j<n;j++)
{
sumxy[i]+=tempy[j];
tempy[j]=x[j];
}
for (i=0;i<poly_n+1;i++)
for (j=0;j<poly_n+1;j++)
ata[i(poly_n+1)+j]=sumxx[i+j];
gauss_solve(poly_n+1,ata,a,sumxy);
free(tempx);
free(sumxx);
free(tempy);
free(sumxy);
free(ata);
}
void gauss_solve(int n,double A[],double x[],double b[])
{
int i,j,k,r;
double max;
for (k=0;k<n-1;k++)
{
max=fabs(A[kn+k]); /find maxmum/
r=k;
for (i=k+1;i<n-1;i++)
if (max<fabs(A[in+i]))
{
max=fabs(A[in+i]);
r=i;
}
if (r!=k)
for (i=0;i<n;i++) /change array:A[k]&A[r] /
{
max=A[kn+i];
A[kn+i]=A[rn+i];
A[rn+i]=max;
}
max=b[k]; /change array:b[k]&b[r] /
b[k]=b[r];
b[r]=max;
for (i=k+1;i<n;i++)
{
for (j=k+1;j<n;j++)
A[in+j]-=A[in+k]A[kn+j]/A[kn+k];
b[i]-=A[in+k]b[k]/A[kn+k];
}
}
for (i=n-1;i>=0;x[i]/=A[in+i],i--)
for (j=i+1,x[i]=b[i];j<n;j++)
x[i]-=A[in+j]x[j];
}
以上就是关于关于随机取值(电脑掷色)的迷惑全部的内容,包括:关于随机取值(电脑掷色)的迷惑、OpenCV(二)掩码 *** 作与平滑(均值,高斯模糊)、matlab求助:高斯白噪声把两未知频率的正弦信号淹没,需求出两正弦信号的频率(频率不同)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)