zoukankan      html  css  js  c++  java
  • 数字信号处理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
    ");
        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();
    }

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/MnsterLu/p/5754819.html
Copyright © 2011-2022 走看看