资源简介
由于matlab程序将各信号处理函数封装,无法看到原始代码,这里是其中resample函数的C语言实现源码,可实现任意整数倍上采及下采
代码片段和文件信息
/*
FIR滤波器的I 和 II两种类型
调用格式:Firls_LP(double * h_firls int Lendouble Fint M);
len表示滤波器的阶数;
M = [1 1 0 0];
F给表示频率范围,格式为4*1的数组;
输出一个len+1的数组,由h返回;
*/
# include “resample_definition.h“
# include
# include
# include
# include
//# define PI 3.1415926
//# define EPSILON 0.000001
//double * Firls_LP(int double * int *); //计算FIR滤波器抽头系数
//bool Constant_Diff(double *); //判断频率范围是否合理
//double Sinc(double); //辛格函数
//double * Divide_Matrix(double ** double * int); //矩阵左除
//void Inverse_Matrix(double ** int); //求逆矩阵
//int main(void)
//{
// double * h; //h数组存放firls输出
// int Len; //根据调用函数设置,测试时给定,可变
// int M[4] = {1 1 0 0}; //低通滤波器幅度范围,恒定
// double F[4] = {0 0.2 0.4 1}; //根据调用函数设置,测试时给定,可变
// printf(“请输入滤波器阶数:“);
// scanf(“%d“ &Len);
// h = (double *)malloc(sizeof(double) * (Len + 1));
// h = Firls_LP(Len F M); //len代表滤波器阶数,F为频率范围,M为幅度范围
//
// return 0;
//}
void Firls_LP(double *h_firlsint N double * F int * M)
{
int i j fullband constant_weight Nodd L need_matrix s;
constant_weight = 1; //类型I和II滤波器,constant_weight值恒定,由w矩阵计算而来
int W[2] = {1 1}; //类型I和II滤波器,w矩阵值恒定
double * m * k_Odd *k_Even * b_Even * b_Odd * bNew * a;
double ** I1 ** I2 **G;
double b0 m0 b1;
N = N + 1; //N阶滤波器具有N+1个系数
Nodd = N%2; //判断序列长度奇偶性
L = (N-1)/2; //中心对称点
m = (double *)malloc(sizeof(double) * (L+1));
for (i=0; i<4; i++)
F[i] /= 2; //频率归一化
if (Constant_Diff(F)) //判断频率是否恒定
fullband = 1;
else
fullband = 0;
if (!Nodd)
{
//序列长为奇数
for (i=0; i<=L; i++)
m[i] = i + 0.5;
}
else //序列长为偶数
{
for (i=0; i<=L; i++)
m[i] = i;
}
need_matrix = (!fullband)||(!constant_weight); //参数
if (need_matrix)
{
//定义(L+1)*(L+1)大小的方阵,其值等于m方阵+m方阵的转置矩阵
I1 = (double **)malloc(sizeof(double*) * (L+1));
for (i=0; i<=L; i++)
*(I1 + i) = (double *)malloc(sizeof(double) * (L+1));
for(i=0; i<=L; i++)
for (j=0; j<=L; j++)
I1[i][j] = m[i] + m[j];
//定义(L+1)*(L+1)大小的方阵,其值等于m方阵-m方阵的转置矩阵
I2 = (double **)malloc(sizeof(double*) * (L+1));
for (i=0; i<=L; i++)
*(I2 + i) = (double *)malloc(sizeof(double) * (L+1));
for(i=0; i<=L; i++)
for (j=0; j<=L; j++)
I2[i][j] = m[i] - m[j];
//定义(L+1)*(L+1)大小的零矩阵
G = (double **)malloc(sizeof(double*) * (L+1));
for (i=0; i<=L; i++)
*(G + i) = (double *)malloc(sizeof(double) * (L+1));
for(i=0; i<=L; i++)
for (j=0; j<=L; j++)
G[i][j] = 0;
}
k_Even = (double *)malloc(sizeof(double) * L); //偶阶次的k序列
k_Odd = (double *)malloc(sizeof(double) * (L+1)); //奇阶次序列的k序列
bNew = (double *)malloc(sizeof(double) * (L+1));
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-23 23:54 resample_1029\
目录 0 2018-10-23 23:49 resample_1029\Debug\
文件 47104 2018-10-23 23:49 resample_1029\Debug\resample_1029.exe
文件 357500 2018-10-23 23:49 resample_1029\Debug\resample_1029.ilk
文件 543744 2018-10-23 23:49 resample_1029\Debug\resample_1029.pdb
目录 0 2018-10-23 23:50 resample_1029\resample_1029\
文件 24268800 2018-10-23 23:54 resample_1029\resample_1029.sdf
文件 906 2018-10-23 23:49 resample_1029\resample_1029.sln
文件 1038774 2018-10-23 23:50 resample_1029\resample_1029\data_i.txt
文件 1039121 2018-10-23 23:50 resample_1029\resample_1029\data_r.txt
目录 0 2018-10-23 23:50 resample_1029\resample_1029\Debug\
文件 2638 2018-10-23 23:50 resample_1029\resample_1029\Debug\cl.command.1.tlog
文件 18648 2018-10-23 23:50 resample_1029\resample_1029\Debug\CL.read.1.tlog
文件 2382 2018-10-23 23:50 resample_1029\resample_1029\Debug\CL.write.1.tlog
文件 20694 2018-10-23 23:50 resample_1029\resample_1029\Debug\firls.obj
文件 12095 2018-10-23 23:50 resample_1029\resample_1029\Debug\kaiser1.obj
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 2 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 1986 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 3406 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 1132 2018-10-23 23:50 resample_1029\resample_1029\Debug\li
文件 420 2018-10-23 23:50 resample_1029\resample_1029\Debug\mt.command.1.tlog
文件 410 2018-10-23 23:50 resample_1029\resample_1029\Debug\mt.read.1.tlog
............此处省略22个文件信息
- 上一篇:地震数据SEGY格式的读写 C++
- 下一篇:用C++实现简易的文本编辑器
相关资源
- 数据结构与算法分析--C语言描述(M
- 算法精解:C语言描述(含源代码)
- 数据结构 C语言 严蔚敏(有书签)
- 用c语言实现的遗传算法单目标优化
- 严蔚敏数据结构(最全资料)
- 《数据结构》清华大学C语言版内部课
- c语言编写的hmm的程序
- 常用算法程序集(C语言描述) 第三版
- cpp-Craft使用现代OpenGL用C语言编写的一
- 停车场管理系统C语言报告
- 基于OpenSSL的RSA加解密的C语言实现
- 蓝桥杯c语言历年试题大全
- QT实现的聊天界面,好友列表,支持文
- C语言操作netcdf的安装文件
- svr-c语言和matlab代码.zip
- 用C语言实现谱减法
- 条形码识别系统c语言版
- STM32 电子密码锁设计,LCD12864显示C语
- c语言复习专用
- 谭浩强C语言程序设计第三版中文版
- C语言开发简单的学生成绩管理系统
- C语言实现了crontab表达式执行时间
- c语言快速入门简单概要
- nRF24L01P入门全面解析附带C语言程序
- C语言经典排序方法及动图演示
- C语言内存四区
- PS2键盘、鼠标与at89c51单片机的通信设
- 《严蔚敏:数据结构题集(C语言版)
- C语言键盘记录程序
- c语言版超级玛丽(经典游戏)
评论
共有 条评论