//////////////////////////////////////////////////////////////////////
//
// Clutter_Function.cpp: implementation of the clutter function class.
//
//////////////////////////////////////////////////////////////////////
#pragma warning(disable:4786)
#include "Clutter_Function.h"
#include <math.h>
#include <cstring>
#include <vector>
#include <iostream>
//#include <windows.h>
//#include <mmsystem.h>
//using namespace std;
#define REAL(z,i) (z[2*i])
#define IMAG(z,i) (z[2*i+1])
//参数设置
static double FS = 18310.546875; //设置采样频率(Hz),原位5KHz
static double Overflow_Gate = 10; //设定杂波实部及虚部幅度门限
const int N_FFT = 8192; //快速傅里叶变换使用的数组长度
static double sigma = 1.0; //高斯分布随机数的分布参数
static int DATA_LENGTH = 8192; //最后的不重复数据长度
extern bool Hardware_Flag;
#define CLUTTER_DATA_FILE_NAME "D:\\data\\clutter\\clutter_data.txt"
#define FILE_DATA_LOOP 4000 //注意:此处生成125M数据,可以播放近30分钟
//*******************************************************************************
//**杂波模拟算法子程序clutter_calculation,模拟具有特定概率分布特性及相关特性的杂波 **
//**模拟的概率分布模型包括:瑞利分布、威布尔分布、对数-正态分布及K分布 **
//**模拟的杂波谱模型包括:高斯谱、柯西谱及立方谱 **
//*******************************************************************************
//****************************----函数参数说明----*******************************
//** pdf : 杂波幅度分布类型参数(1代表瑞利分布,2代表威布尔分布, **
//** 3代表对数-正态分布,4代表K分布) **
//** shapeP : 杂波幅度分布的形状参数 **
//** rmsD : 杂波方差 **
//** psd : 杂波功率谱类型参数(1代表高斯谱,2代表柯西谱,3代表立方谱)**
//** bandWidth : 杂波带宽(Hz) **
//*******************************************************************************
//****************************----内部调用函数说明----***************************
//** levison_AR : 采样Levinson递推算法计算AR模型参数的子函数 **
//** R_Gau_Cal :模拟威布尔杂波中,二分法计算非线性变换前信号相关性子函数 **
//** Overflow_Gate_Gau_Cal :分布杂波信号,计算高斯杂波序列的门限幅度函数 **
//** S_Cal : 模拟K分布杂波信号时,通过非线性变换计算调制序列的函数 **
//*******************************************************************************
//高斯(瑞利分布)杂波生成函数
void Clutter_Gaussian(double rmsD, int psd, double bandWidth)
{
int k ; //滤波器的阶数
// R为长度为k+1的数组,a为(k+1)*(k+1)的矩阵, pr为长度k的数组
vector<double> R,pr,R_1;
vector<vector<double> > a;
double value,temp; //公共使用的变量
vector<double> valueV;
int i,h,j;
int N;
//vector<double>::iterator index;
switch(psd)
{
case 1: //高斯谱杂波模拟
k = (int)floor(2 * FS / bandWidth); //设置滤波器的阶数
temp = M_PI*bandWidth/1.665/FS;
temp = temp * temp;
for (i = 0; i <= k; i++) //计算高斯谱的自相关函数
{
value = exp_small(-temp * (double)(i*i));
R.push_back(value);
}
R[0] = R[0] + 1e-6; //为避免Levinson递推算法出现发散,对高斯谱旁瓣电平进行限定(-60dB)
//注意:原算法中用R[0]对整个R[]数组进行归一化的程序段必须去掉,否则Levision算法还会发散
//对修正后的自相关函数进行归一化 // R=R / R(1);
Levison_AR(k,R,a,pr); //利用Levinson递推算法计算AR模型的参数
break;
case 2: //柯西谱杂波模拟
//利用柯西谱自相关函数的特点直接计算
k = 1; //设置滤波器的阶数
//计算AR模型的参数
value = -exp(-M_PI * bandWidth / FS);
valueV.push_back(value);
a.push_back(valueV);
value = 1 - pow(fabs(a[0][0]),2);
pr.push_back(value);
break;
case 3: //立方谱杂波模拟
N = 8192; //设置立方谱采样的点数
k = floor(FS / bandWidth); //设置滤波器的阶数
//计算离散傅立叶变换频谱采样点的频率(f)
vector<double> f;
value = 0;
for (h = 0; h < N; h++) //linespace(0,1/N,N)
{
f.push_back(value);
value = value + 1 / double(N);
if(f[h] > 0.5) //gr = find(f>0.5); f(gr) = 1 - f(gr);
{
f[h] = 1 - f[h];
}
}
for (h = 0; h < N; h++) // 计算立方谱的自相关函数,并进行归一化
{
f[h] = FS / (1 + pow(2 * FS / bandWidth * f[h],3));
// R_1=real(ifft(FS./(1+(2.*FS/BAND_WIDTH.*f).^3)));
}
ifft_real(f,R_1,N); // 实数的快速傅里叶逆变换 //R_1有N个元素
for (h = 0; h <= k; h++) //注意R有k+1个元素
{
R.push_back(R_1[h]/R_1[0]);
//cout << h << ": " << R[h] << endl;
}
Levison_AR(k,R,a,pr); //利用Levinson递推算法计算AR模型的参数
break;
}
//生成随机数的准备工作
const gsl_rng_type *T;
gsl_rng *r;
//create a generator chosen by the environment variable GSL_RNG_TYPE
gsl_rng_env_setup();
T = gsl_rng_default; //即gsl_rng_mt19937
r = gsl_rng_alloc (T);
//------------------------模拟杂波信号(Clutter_Gau)------------------------
//建立AR模型初始化条件
complex valueC, sum;
vector<complex> Clutter_Gau;
for (h = 0; h < k; h++)
{
valueC.real = sqrt(rmsD/2) * sqrt(pr[h]) * randn(r);
valueC.imag = sqrt(rmsD/2) * sqrt(pr[h]) * randn(r); //Clutter_Gau = sqrt(rmsD/2)*(randn(1,k)+j00*randn(1,k)).*sqrt(pr);
Clutter_Gau.push_back(valueC);
}
if (k > 1)
{
for (i = 1; i < k; i++) //Clutter_Gau(i)=Clutter_Gau(i) - sum(a(i-1,1:i-1).* Clutter_Gau(i-1:-1:1));
{
sum.real = 0;
sum.imag = 0;
for (j = 0; j <= i-1; j++)
{
valueC.real = a[i-1][j] * Clutter_Gau[i-1-j].real;
valueC.imag = a[i-1][j] * Clutter_Gau[i-1-j].imag;
sum.real = sum.real + valueC.real;
sum.imag = sum.imag + valueC.imag;
}
Clutter_Gau[i].real = Clutter_Gau[i].real - sum.real;
Clutter_Gau[i].imag = Clutter_Gau[i].imag - sum.imag;
Sleep(2);
}
}
// 利用AR模型产生长度为2k的初始信号
for (i = k; i < 2*k; i++) //Clutter_Gau(i)=sqrt(rmsD*pr(k)/2)*(randn(1)+j00*randn(1))-sum(a(k,1:k).*Clutter_Gau(i-1:-1:i-k));
{
sum.real = 0;
sum.imag = 0;
for (j = 0; j < k; j++)
{
valueC.real = a[k-1][j] * Clutter_Gau[i-1-j].real;
valueC.imag = a[k-1][j] * Clutter_Gau[i-1-j].imag;
sum.real = sum.real + valueC.real;
sum.imag = sum.imag + valueC.imag;
}
valueC.real = sqrt(rmsD*pr[k-1]/2) * randn(r)-sum.real;
valueC.imag = sqrt(rmsD*pr[k-1]/2) * randn(r)-sum.imag;
Clutter_Gau.push_back(valueC);
}
// 注意Clutter_Gau[]的长度为2k
// 确保初始信号的实部和虚部的幅度在限定的范围内
//先求条件 max(max(abs(real(Clutter_Gau))),max(abs(imag(Clutter_Gau)))
while (max_am(Clutter_Gau) > Overflow_Gate) // 如果存在幅度溢出,则重新产生数据
{
// 以下程序段和上面的Clutter_Gau[]生成程序一样
for (h = 0; h < k; h++)
{
Clutter_Gau[h].real = sqrt(rmsD/2) * sqrt(pr[h]) * randn(r);
Clutter_Gau[h].imag = sqrt(rmsD/2) * sqrt(pr[h]) * randn(r);
}
if (k > 1)
{
for (i = 1; i < k; i++) //Clutter_Gau(i)=Clutter_Gau(i) - sum(a(i-1,1:i-1).* Clutter_Gau(i-1:-1:1));
{
sum.real = 0;
sum.imag = 0;
for (j = 0; j <= i-1; j++)
{
valueC.real = a[i-1][j] * Clutter_Gau[i-1-j].real;
valueC.imag = a[i-1][j] * Clutter_Gau[i-1-j].imag;
sum.real = sum.real + valueC.real;
sum.imag = sum.imag + valueC.imag;
}
Clutter_Gau[i].real = Clutter_Gau[i].real - sum.real;
Clutter_Gau[i].imag = Clutter_Gau[i].imag - sum.imag;
}
}
for (i = k; i < 2*k; i
没有合适的资源?快使用搜索试试~ 我知道了~
GSL库(64bit)在QT5.50中使用+VS2013编译器
共488个文件
h:434个
dll:16个
cpp:8个
3星 · 超过75%的资源 需积分: 23 35 下载量 188 浏览量
2016-09-09
09:16:22
上传
评论 2
收藏 34.22MB RAR 举报
温馨提示
GSL库(64bit)在QT5.50中使用+VS2013编译器,并应用GSL中的大量函数完在多种算法的开发,具体算法因版权问题,从中去除,不影响正常GSL测试使用。在64位win7下,64位的GSL库,QT5.5+vs2013编译器调用。
资源推荐
资源详情
资源评论
收起资源包目录
GSL库(64bit)在QT5.50中使用+VS2013编译器 (488个子文件)
Clutter_Function.cpp 89KB
Clutter_Function.cpp 62KB
moc_dialog.cpp 4KB
moc_dialog.cpp 4KB
dialog.cpp 2KB
dialog.cpp 2KB
main.cpp 175B
main.cpp 175B
icudt53.dll 20.53MB
icudt53.dll 20.53MB
Qt5Guid.dll 12.48MB
Qt5Guid.dll 12.48MB
Qt5Cored.dll 11.43MB
Qt5Cored.dll 11.43MB
Qt5Widgetsd.dll 10.39MB
Qt5Widgetsd.dll 10.39MB
libgsl-0.dll 10.12MB
libgsl-0.dll 10.12MB
icuin53.dll 1.87MB
icuin53.dll 1.87MB
icuuc53.dll 1.26MB
icuuc53.dll 1.26MB
libgslcblas-0.dll 1.23MB
libgslcblas-0.dll 1.23MB
ImageRadarSARTest.exe 339KB
ImageRadarSARTest.exe 339KB
ImageRadarSARTest.exp 676B
ImageRadarSARTest.exp 676B
gsl_cblas.h 38KB
gsl_cblas.h 38KB
gsl_blas.h 26KB
gsl_blas.h 26KB
gsl_linalg.h 22KB
gsl_linalg.h 22KB
Clutter_Function.h 18KB
Clutter_Function.h 18KB
gsl_sf_bessel.h 15KB
gsl_sf_bessel.h 15KB
gsl_matrix_complex_long_double.h 13KB
gsl_matrix_complex_long_double.h 13KB
gsl_matrix_long_double.h 12KB
gsl_matrix_long_double.h 12KB
gsl_matrix_complex_float.h 12KB
gsl_matrix_complex_float.h 12KB
gsl_matrix_ushort.h 12KB
gsl_matrix_ushort.h 12KB
gsl_matrix_uchar.h 11KB
gsl_matrix_uchar.h 11KB
gsl_matrix_ulong.h 11KB
gsl_matrix_ulong.h 11KB
gsl_matrix_float.h 11KB
gsl_matrix_float.h 11KB
gsl_matrix_short.h 11KB
gsl_matrix_short.h 11KB
gsl_matrix_complex_double.h 11KB
gsl_matrix_complex_double.h 11KB
gsl_matrix_uint.h 11KB
gsl_matrix_uint.h 11KB
gsl_matrix_long.h 11KB
gsl_matrix_long.h 11KB
gsl_matrix_char.h 11KB
gsl_matrix_char.h 11KB
gsl_matrix_int.h 11KB
gsl_matrix_int.h 11KB
gsl_matrix_double.h 10KB
gsl_matrix_double.h 10KB
gsl_integration.h 10KB
gsl_integration.h 10KB
gsl_randist.h 9KB
gsl_randist.h 9KB
gsl_sf_legendre.h 9KB
gsl_sf_legendre.h 9KB
gsl_vector_complex_long_double.h 9KB
gsl_vector_complex_long_double.h 9KB
gsl_vector_long_double.h 8KB
gsl_vector_long_double.h 8KB
gsl_vector_complex_float.h 8KB
gsl_vector_complex_float.h 8KB
gsl_cdf.h 8KB
gsl_cdf.h 8KB
gsl_sf_gamma.h 8KB
gsl_sf_gamma.h 8KB
gsl_odeiv.h 8KB
gsl_odeiv.h 8KB
config.h 8KB
config.h 8KB
gsl_vector_ushort.h 8KB
gsl_vector_ushort.h 8KB
gsl_vector_ulong.h 8KB
gsl_vector_ulong.h 8KB
gsl_vector_uchar.h 8KB
gsl_vector_uchar.h 8KB
gsl_vector_complex_double.h 8KB
gsl_vector_complex_double.h 8KB
gsl_vector_uint.h 7KB
gsl_vector_uint.h 7KB
gsl_vector_float.h 7KB
gsl_vector_short.h 7KB
gsl_vector_float.h 7KB
gsl_vector_short.h 7KB
共 488 条
- 1
- 2
- 3
- 4
- 5
资源评论
- zhiweiyixia2017-12-25下载下来看看
- allan-xy2019-04-11什么鬼,还以为是QT5
- 小鱼儿哥哥2019-10-17没法使用啊 怎么回事
堆砌自己的代码小屋
- 粉丝: 8
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功