#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include <time.h> //用到了time函式,所以要有這個頭檔案
#define dt 0.002 //采樣時間間隔
#define fm 25 //赫茲
#define pai 3.14 //Π的值
#define e 2.7 //自然底數
#define f0 2 //初始頻率
#define dt1 0.01
#define k 5 //頻變斜率
void leikezibo(double* p)
{
int i; //時間離散序號點
double t;
double y, mid1, mid2,mid3,mid4,mid5;
p = (double*)malloc(256 * sizeof(double));
for (i = -128; i <=127; i++)
{
t = i * dt;
mid1 = pai * fm * t;
mid2 = pow(mid1, 2);
mid3 = pow(e, mid2);
mid4 = 1 / mid3;
mid5 = 1 - 2 * mid2;
y = mid4 * mid5;
p[i+128]= y;
}
}
void sind(double *p)
{
int i;
double y,mid;
p=(double*)malloc(256 * sizeof(double));
for (i = -128; i <= 127; i++)
{
mid = i * pai / 20;
y = sin(mid);
p[i + 128] = y;
}
}
void xianxin(double* p)
{
int i;
double y, mid1, t;
p=(double*)malloc(300 * sizeof(double));
{for (i = 0; i < 300; i++)
t = i * dt1;
mid1 = 0.1 * pai * f0 * t + pai * k * t * t;
y = cos(mid1);
p[i] = y;
}
}
void r_noise(double* p, int n, double a) //陣列名,資料長度,噪音信號強度
{
int i;
double temp, max;
max = *p;
time_t t;
temp = 32767.0 / 2.0;
srand((unsigned)time(&t));
for (i = 0; i < n; i++)
if (max < fabs(p[i]))
max = fabs(p[i]);
if (max ==0.0) max = 1.0;
for (i = 0; i < n; i++)
{
p[i] = p[i] + a * max * ((rand() - temp) / temp);
}
printf("處理后陣列序列為:");
for (i = 0; i < n; i++)
printf("p[i]%d=%lf\n", i, p[i]);
}
int main()
{
double * pt;
double zy;
void r_noise(double* p, int n, double a);
int x;
pt = (double*)malloc;
void leikezibo(double* p), sind(double* p), xianxin(double* p);
printf("輸入代求處理函式種類\n1:雷克子波函式\n2:正弦函式\n3:線性調頻函式\n");
scanf_s("%d", &x);
printf("輸入噪音強度");
scanf_s("%lf", &zy);
switch(x)
{
case 1:leikezibo( pt); r_noise(pt, 256, zy); break;
case 2:sind(pt); r_noise(pt, 256, zy); break;
case 3:xianxin(pt); r_noise(pt, 300, zy); break;
default:printf("\a");
}
}
uj5u.com熱心網友回復:
分配記憶體地方都要指明大小,比如pt = (double*)malloc(sizeof(double));uj5u.com熱心網友回復:
除錯:在改變pt后把pt列印一下,這樣就知道問題是在前面的函式,還是后面的了,這樣逐步列印就則可以確定錯誤的位置了還有一個很重要的就是,手動申請的記憶體空間最后都要去手動釋放一下,不然會造成記憶體泄漏
printf("p[i]%d=%lf\n", i, p[i]);還有這句你是想printf("p[%d]=%lf\n", i, p[i]);這樣吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/61557.html
標籤:C語言
上一篇:有熟悉Duilib界面庫的嗎?
下一篇:求助,寫計時小程式
