一、带高斯噪声的sin函数
b----振幅
f----频率
ph----初相
m----信号个数
fs----采样频率
snr----信噪比
seed----随机种子
x----存放数据数组
n----数据长度
main.cpp
#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 signal "); for(i=0;i<32;i++) { printf(" %10.7lf",x[i]); if(i%4==3)printf(" "); } fp=fopen("F:\qt\untitled2\Sinwn1.txt","w"); for(i=0;i<n;i++) { fprintf(fp,"%3d %12.7lf ",i,x[i]); } fclose(fp); return a.exec(); }
sinwn.c
#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
#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 signal "); for(i=0;i<32;i++) { printf(" %10.7lf",x[i]); if(i%4==3)printf(" "); } fp=fopen("F:\qt\untitled3\Sinwn1.txt","w"); for(i=0;i<n;i++) { fprintf(fp,"%3d %12.7lf ",i,x[i]); } fclose(fp); return a.exec(); }