我是靠谱客的博主 慈祥草丛,这篇文章主要介绍数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数,现在分享给大家,希望可以做个参考。

 

一、带高斯噪声的sin函数

b----振幅

f----频率

ph----初相

m----信号个数

fs----采样频率

snr----信噪比

seed----随机种子

x----存放数据数组

n----数据长度

main.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <QCoreApplication> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <sinwn.c> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int i,m,n; long seed; double fs,snr,x[200]; static double b[1]={1}; static double f[1]={10}; static double ph[1]={90}; FILE *fp; m=1; n=200; seed=13579; fs=150; snr=10.0; sinwn(b,f,ph,m,fs,snr,seed,x,n); printf("sin signaln"); for(i=0;i<32;i++) { printf(" %10.7lf",x[i]); if(i%4==3)printf("n"); } fp=fopen("F:\qt\untitled2\Sinwn1.txt","w"); for(i=0;i<n;i++) { fprintf(fp,"%3d %12.7lfn",i,x[i]); } fclose(fp); return a.exec(); }

 

sinwn.c

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include"math.h" #include"gauss.c" void sinwn(double a[],double f[],double ph[],int m,double fs,double snr,long seed,double x[],int n) { int i,k; double z,pi,nsr; pi=4.0*atan(1.0); z=snr/10.0; z=pow(10.0,z); z=1.0/(2*z); nsr=sqrt(z); for(i=0;i<m;i++) { f[i]=2*pi*f[i]/fs; ph[i]=ph[i]*pi/180.0; } for(k=0;k<n;k++) { x[k]=0.0; for(i=0;i<m;i++) { x[k]=x[k]+a[i]*sin(k*f[i]+ph[i]); } x[k]=x[k]+nsr*gauss(0.0,1.0,&seed); } }

 

uniform.c  和  gauss.c  在 第一个随笔里面

 

 

导出到txt,matlab import data之后plot

supblot(411);

b[1]={1};

f[1]={5};

ph[1]={45};

m=1;

n=200;

seed=13579;

fs=150;

snr=1000.0;

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

supblot(412);

b[1]={1};

f[1]={10};

ph[1]={45};

m=1;

n=200;

seed=13579;

fs=150;

snr=1000.0;

 

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

supblot(413);

b[1]={1};

f[1]={10};

ph[1]={90};

m=1;

n=200;

seed=13579;

fs=150;

snr=1000.0;

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

supblot(414);

b[1]={1};

f[1]={10};

ph[1]={90};

m=1;

n=200;

seed=13579;

fs=150;

snr=10.0;

 

 

二、组合sin函数

三个正弦信号,振幅都为1,频率10Hz,17Hz,50Hz,相位45,10,88,采样频率150Hz,信噪比10dB

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <QCoreApplication> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <sinwn.c> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int i,m,n; long seed; double fs,snr,x[200]; static double b[3]={1,1,1}; static double f[3]={10,17,50}; static double ph[3]={45,10,88}; FILE *fp; m=3; n=200; seed=13579; fs=150; snr=10.0; sinwn(b,f,ph,m,fs,snr,seed,x,n); printf("sin signaln"); for(i=0;i<32;i++) { printf(" %10.7lf",x[i]); if(i%4==3)printf("n"); } fp=fopen("F:\qt\untitled3\Sinwn1.txt","w"); for(i=0;i<n;i++) { fprintf(fp,"%3d %12.7lfn",i,x[i]); } fclose(fp); return a.exec(); }

 

 

转载于:https://www.cnblogs.com/MnsterLu/p/5754819.html

最后

以上就是慈祥草丛最近收集整理的关于数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数的全部内容,更多相关数字信号处理C语言(2)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部