作者lovetone (~黑妞~)
看板C_and_CPP
標題[問題] white noise
時間Mon Jun 28 16:19:50 2010
遇到的問題: (題意請描述清楚)
想用VC6產生white noise和matlab/simulink內建的方塊(Band-Limited White Noise)
一樣的訊號,但是不知道是查到的white noise公式錯還是,還是code錯,
不過感覺應該不是code錯,有去matlab版,本版,google爬文但是沒有找到方法
因為想用VC++來產生,所以來本版請教。
希望得到的正確結果:
預計想和matlab/simulink內建的方塊(Band-Limited White Noise)一樣的訊號
程式跑出來的錯誤結果:
我是根據一本書" 張靜,MATLAB在控制系統中的應用,電子工業出版社,2007 "裡所寫的
來產生white noise公式如下
u = 11/(2^35)-->初始值
0
u = 取小數(179*u ),i=1、2、3...
i i-1
不過結果和matlab/simulink內建的方塊(Band-Limited White Noise)相似,但不太一樣
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++
有問題的code: (請善用置底文標色功能)
以下是我寫的code
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double ts=0.005;
double tf=10;
double n=tf/ts;
/*for saving data*/
#define size 2000
double u_white[size];
double time[size];
void data(void);
void main()
{
int i;
double t;
double uw;
double uw1=11/pow(2,35);
/*signal generator*/
for(i=1;i<=(int)n;i++)
{
t=i*ts;
time[i]=(i-1)*ts;
/*white random*/
uw=179*(uw1-floor(uw1));
uw1=uw;
u_white[i]=uw;
}
data();
}
/*data-saving*/
void data(void)
{
int i;
FILE *fptr;
fptr=fopen("white.txt","w");
if(fptr!=NULL)
{
for(i=1;i<=(int)n;i++)
{
fprintf(fptr,"%f\t%f\n",time[i],u_white[i]);
}
}
else
{
printf("fail\n");
}
fclose(fptr);
printf("write finished\n");
}
補充說明:
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.171.118.18
※ 編輯: lovetone 來自: 118.171.118.18 (06/28 16:20)
※ 編輯: lovetone 來自: 118.171.118.18 (06/28 16:21)
※ 編輯: lovetone 來自: 118.171.118.18 (06/28 17:06)
推 Risingforce:為何不用現成的code/library? 06/28 21:47
→ lovetone:有現成的C-code可以產生white noise嗎~~~? 06/29 11:44
→ charleshu:將Matlab 的 M檔編譯成DLL,再跟你的程式link起來就OK. 06/29 22:25