• 数字信号处理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();
    }

  • 相关阅读:
    C语言的指针移位问题
    makefile、gdb使用记录
    MUSIC算法学习笔记
    时间格式转换
    linux网络编程笔记——UDP
    linux网络编程笔记——TCP
    bash里,echo对换行符的处理
    树莓派使用8188eu无线网卡
    时间都去哪了?——安卓GTD工具
    让sublime text 2更好地支持Python
  • 原文地址:https://www.cnblogs.com/MnsterLu/p/5754819.html
Copyright © 2020-2023  润新知