首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

几个数字信号处理算法程序

几个数字信号处理算法程序

摘要
在学习数字信号处理算法程序中用VC编写的几个通用算法程序。
关键词 离散卷积 FIR
在学习信号处理的过程中,看到书上的大部分算法都是用Fortan或者Basic实现,于是自己试验着用VC实现了一下。
1、卷积计算
离散卷积公式的算法实现
图1 卷积计算界面

1.1 主程序代码(省略了部分不关键代码)
void CInterVolveDlg::CalTheNumByArray()
{
  this->UpdateData(TRUE);
  FFuncs
  funcs[2] = {funch1,funch2}; int
  n = this->m_ValueN; double*
  x = new double[2*(n+1)];//x(n) double*
  y = new double[2*(n+1)];//y(n) double*
  h = new double[2*(n+1)];//h(n) //1.init
    x(n),h(n),y(n) CButton*
  pbtn = (CButton*) this->GetDlgItem(IDC_RADIO1); int
  nChoseItem = 0;//函数选择 if(pbtn->GetCheck())
  {
    nChoseItem
    = 0; }
  else
  {
    nChoseItem
    = 1; }
  for(int
  i= 0;i<2*(n+1);i++)
  {
    if(i< n+1)
    {
      x = 1;
      h = funcs[nChoseItem](i);
    }
    else
    {
      x = 0;
      h = 0;
    }
  }
  //2.y(i)=SUM(x(m)*h(i-m)) m=0..i
  for(i=0;i<2*(n+1);i++)
  {
    y = Calcy(x,h,i);
  }
  //显示结果
  delete[] x;
  delete[] y;
  delete[] h;
}1.2 各个子函数实现
typedef double
(* FFuncs)(int); //h1(x) double
funch1(int
n) { double
fbase
  = (double)4/(double)5; double fr
  = std::pow(fbase, n); return fr;
  } //h2(x)
double
funch2(int
n) { double
fpi
  = 3.1415927; return 0.5*sin((double)0.5*n);
  } //y(n)
//y(n)=
sum(x(m)*y(n-m))
m=0..n double
Calcy(double x[],double h[],int n) {
double
  yvalue = 0; for(int
  m= 0;m<=n;m++)
  {
    yvalue += x[m]*h[n-m];
  }
  return yvalue;
}

2、DFT与FFT实现
程序界面,具体实现见注释及代码:
图2 DFT与FFT实现界面
继承事业,薪火相传
返回列表