高斯白噪声 C语言实现

发布时间:2021-08-04 14:31:47

今天编了一个用C语言实现高斯白噪声的程序,一方面自己的项目要用,另一方面可以开源的,希望可以给大家带来方便。请大家使用时也注明是baiguangyu001 白栎旸写的,这样我就满足了,呵呵。

做出来的序列*n,其方差比预先规定的要小10的-2次方量级,但是总体来说是比较准确的。可以通过改变量化精度Stride来增加概率估计的准确性。

/* 本程序用于产生SNR=db(dB)的均值为0的白噪声序列,编写人:白栎旸,baiguangyu001 */
/* db是信噪比, length是n的长度,n是产生出的白噪声 */
# include
# include
# define PI (3.14)
# define Stride (0.005)

short interleaver[length] = {...........};
注:interleaver是个交织器,长度与参数length一致就行,里面是乱序排列,这个在matlab里用randperm实现就行。
例如:short interleaver[10] = {7,1,9,6,3,2,5,8,4,0};

void awgn(float db, int length, float *n)
{
float pdf[10000] = {0};
float *amp;
float delta=0, amplitude = 0, sum = 0, temp1=0, temp2=0;
int *num;
int counter, counter1, counter2, counter3;
int half_length;

delta = 1 / ( 2 * pow(10,0.1*db) ); // 计算噪声功率
counter = 0; // 通过概率密度计算幅度集合和对应的概率密度
while( sum < (0.5/Stride) )
{
pdf[counter] = 1/sqrt(2*PI*delta)*exp(-0.5*pow(amplitude,2)/delta);
sum += pdf[counter];
amplitude += Stride;
counter++;
} // 最后得到的counter是幅度集合的长度
num = (int *)calloc(counter,sizeof(int)); // num每个幅度在序列中出现的次数,幅度放在amp中
amp = (float *)calloc(counter,sizeof(float));
amplitude = 0;
sum = 0;
temp1 = length*Stride;
temp2 = 0;
for(counter1=0;counter1<counter;counter1++)
{
temp2 = temp1*pdf[counter1];
if( (int)(temp2+0.5)>(int)temp2 )
*(num+counter1) = (int)(temp2+1);
else
*(num+counter1) = (int)temp2;
sum += *(num+counter1);
*(amp+counter1)=amplitude;
amplitude += Stride;
}
temp1 = 0;
half_length = length>>1;
if(sum<half_length) // 使num的和恰好是length的一半
{
temp1 = half_length-sum;
for(counter1=0;counter1<temp1;counter1++)
(*(num+counter-1-counter1))++;
}
else if(sum>half_length)
{
temp1 = sum-half_length;
*num -= temp1;
}
counter3 = 0;
for(counter1=0;counter1<counter;counter1++) // 往*n里填入幅度值
{
for(counter2=0;counter2<*(num+counter1);counter2++)
{
*(n+counter3) = *(amp+counter1);
*(n+length-1-counter3) = -*(amp+counter1);
counter3++;
}
}

for(counter1=0;counter1<length;counter1++)
{
temp1 = *(n+counter1);
*(n+counter1) = *(n+interleaver[counter1]);
*(n+interleaver[counter1]) = temp1;
for(counter2=0;counter2<length-counter1-1;counter2++)
if(interleaver[counter1+counter2+1]==counter1)
interleaver[counter1+counter2+1] = interleaver[counter1];
}
}


相关文档

  • 高斯白噪声的c程序实现
  • c语言实现高斯分布
  • 产生高斯白噪声的研究与实现
  • 高斯滤波的C语言实现
  • 用C语言实现高斯-赛德尔迭代方法
  • 生成高斯分布或均匀分布的离散序列C++语言实现
  • 10个重要的算法个重要的算法个重要C语言实现拉格朗日,高斯,龙贝格
  • 基于c语言的泊松分布和高斯分布的实现程序
  • 高斯消元_C语言代码
  • 列主元高斯消去法C语言代码
  • 猜你喜欢

  • 魏庆中外团队管理方法比较
  • 高考地理二轮复* 第一部分 专题突破篇 五 自然地理环境的整体性与差异性课件
  • 万圣节南瓜头PPT模板
  • 灌南县孟兴庄镇荣域建材销售中心企业信息报告-天眼查
  • 2018-2019年嘉善县范泾小学三年级上册英语模拟期末测试无答案
  • 古诗题竹林寺带拼音古诗题竹林寺注音
  • 保险公司实*报告800字大全
  • Java赋值操作需要注意的地方
  • 基于单片机的路灯控制器的设计
  • 适合早上晨跑发的朋友圈清晨跑步的唯美短句
  • “BAT”焦虑症
  • 建筑工程外脚手架搭设标准图解 PPT
  • 河北省石家庄市赵县2016-2017学年八年级英语下学期第
  • 七菇餐减肥食谱
  • 百年大计造句
  • (0196)行政法与行政诉讼法复习思考题
  • 读书让我成长作文(精选7篇)
  • 快乐作文,释放个性
  • 金属工艺学题库及答案之判断题
  • 大连铭殿装饰装修工程有限公司企业信用报告-天眼查
  • 特殊的生日_小学一二年级记事
  • 金瓶梅三女性文化透视
  • XXXX召开党的群众路线教育实践活动总结大会
  • 是非问题,其实只是个金钱的数量问题_人生故事
  • 人教版八年级数学下册第十七章《勾股定理》单元同步检测试题(含答案) (1)
  • 沙漠里的骆驼人_故事
  • 【精品】村干部述职报告_村干部个人述职报告(年终、年度)-word范文模板 (1页)
  • 《混凝土结构设计规范》gb_50010-201024298
  • [精选]急性腹痛诊治思路--资料
  • 最新公安刑警学*心得体会ppt模板蓝色漂亮
  • 关于心灵鸡汤职场励志文章5篇
  • 风电机组减振技术发展现状分析
  • 含分布式电源改进免疫算法的配电网无功优化
  • 谈谈小学语文古典诗词的诵读教学
  • 昆明恰名商贸有限公司企业信用报告-天眼查
  • 宜兴市三阳防腐科技有限公司(企业信用报告)- 天眼查
  • 做豆腐盒的步骤
  • 《认亲》讲述一帮一扶贫解困认穷亲戚活动。
  • 职业规划促进教师专业发展
  • 湖北昌昱电气工程有限公司企业信用报告-天眼查
  • 让我们的补习班充满爱
  • 初中物理课堂基本要求
  • 电脑版