随机信号处理功率谱估计周期图法(直接法)(C语言)

本文介绍了随机信号谱估计的方法,特别是周期图法,使用C语言编程实现。信号模型包含两个频率分量的正弦波和高斯白噪声。评估估计质量通过均分误差和偏差,利用VS生成数据并用gnuplot绘制SNR对误差和均值的影响图表。
摘要由CSDN通过智能技术生成

随机信号做谱估计(1)-周期图法——C语言

随机信号模型
这里我们用X(n)=s(n)+w(n)来表示所分析的随机信号,其中s(n)是具有两个频率分量的正弦波,可表示为是s(n)=A1sin(2pif1+pi/3)+A2sin(2pif2+pi/4)。w(n)是随机高斯白噪声,它的谱线是一个直线,用它代表信号在传播中所夹杂的噪声不仅可以体现随机过程而且对于功率谱的求解也更为简单。
估计质量的评价
可以用均分误差以及偏差来评价估计质量的好坏,通过画出均分误差和均值随SNR变化的图来观察估计质量。
原理
在这里插入图片描述
实验代码
使用VS进行C语言编程,得到一系列数据。然后将这些数据保存到TXT文件中,再将文件类型改为.dat文件。用gnuplot调用这些数据,画出均分误差和均值随SNR变化的图。
代码(C语言):

#include <stdlib.h>
#include <time.h>
#include <math.h>
#include<cstdio>
#define pi 3.1415916
#define N 64   //样本点数
#define M 100 //信噪比取的个数
#define C 50 //相同信噪比进行次数
#define f1 0.1
#define f2 0.3
void xcorr(double* number, double* sn);
void awgn(double* num);
void dft(double* xn, double* xk);
int findPeaks(double* xn, int* address);
void rank(double* mse1, double* mse2, double* expect1, double* expect2, double* snr);
void prin(double* snr, double* mse1, double* mse2, double* approximate1, double* approximate2);
struct C_complex_double
{
   
	double	real;
	double image;
};  //复数结构体
int main(int argc, char* argv[])
{
   
	double xn[N] = {
    .0 };
	double Pn = .0;
	double Pnoise[M] = {
    .0 };
	double noise[M] = {
    .0 };
	double Pn1 = 0.0;
	double rk[N] = {
    0.0 };
	int address[N / 2] = {
    0 };
	double rk_flag[N / 2] = {
    0.0 };
	double x2n[N] = {
    .0 };
	double mse_f1[M] = {
    .0 };
	double mse_f2[M] = {
    .0 };
	double num[N] = {
    .0 };
	double approximate1[M] = {
    .0 };
	double approximate2[M] = {
    .0 };
	srand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值