数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数

 

一、带高斯噪声的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\n");
    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.7lf\n",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\n");
    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.7lf\n",i,x[i]);
    }
    fclose(fp);
    return a.exec();
}

 

 

posted @ 2016-08-09 22:15  MnsterLu  阅读(2398)  评论(0编辑  收藏  举报