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();
    }

  • 相关阅读:
    SqlCacheDependency [转]
    C#导出Word [ZT]
    ADO.NET Entity Framework 学习(1) [ZT]
    AJAX, JSON.js,Newtonsoft.Json.dll,nunit.framework.dll 源代码
    ADO.NET 1.1和2.0事务的区别
    Sql Server 2000 中游标的使用示例 [ZT]
    如何检测是否安装了.NET 2.0和.NET 3.0 [ZT]
    ORACLE 常用函数 [ZT]
    Resource 学习笔记
    GridView 双击选择行 [ZT]
  • 原文地址:https://www.cnblogs.com/MnsterLu/p/5754819.html
Copyright © 2011-2022 走看看