用C 实现MATLAB泰勒窗函数,调用的连乘函数怎么实现?

alazar_lyb 2018-07-12 05:53:53
在一个博客中看到实现MATLAB的泰勒窗函数,其中调用了PROD连乘函数,不知道怎么实现的,哪个高手指点一下
http://www.cnblogs.com/mildsim/p/4067374.html

19 /*函数名:taylorWin
20 *说明:计算泰勒窗。泰勒加权函数
21 *输入:
22 *输出:
23 *返回:
24 *调用:prod()连乘函数
25 *其它:用过以后,需要手动释放掉*w的内存空间
26 * 调用示例:ret = taylorWin(99, 4, 40, &w); 注意此处的40是正数 表示-40dB
27 */
28 dspErrorStatus taylorWin(dspUint_16 N, dspUint_16 nbar, dspDouble sll, dspDouble **w)
29 {
30 dspDouble A;
31 dspDouble *retDspDouble;
32 dspDouble *sf;
33 dspDouble *result;
34 dspDouble alpha,beta,theta;
35 dspUint_16 i,j;
36
37 /*A = R cosh(PI, A) = R*/
38 A = (dspDouble)acosh(pow((dspDouble)10.0,(dspDouble)sll/20.0)) / PI;
39 A = A * A;
40
41 /*开出存放系数的空间*/
42 retDspDouble = (dspDouble *)malloc(sizeof(dspDouble) * (nbar - 1));
43 if(retDspDouble == NULL)
44 return DSP_ERROR;
45 sf = retDspDouble;
46
47 /*开出存放系数的空间*/
48 retDspDouble = (dspDouble *)malloc(sizeof(dspDouble) * N);
49 if(retDspDouble == NULL)
50 return DSP_ERROR;
51 result = retDspDouble;
52
53 alpha = prod(1, 1, (nbar - 1));
54 alpha *= alpha;
55 beta = (dspDouble)nbar / sqrt( A + pow((nbar - 0.5), 2) );
56 for(i = 1; i <= (nbar - 1); i++)
57 {
58 *(sf + i - 1) = prod(1,1,(nbar -1 + i)) * prod(1,1,(nbar -1 - i));
59 theta = 1;
60 for(j = 1; j <= (nbar - 1); j++)
61 {
62 theta *= 1 - (dspDouble)(i * i) / ( beta * beta * ( A + (j - 0.5) * (j - 0.5)) );
63 }
64 *(sf + i - 1) = alpha * (dspDouble)theta / (*(sf + i - 1));
65 }
66
67 /*奇数阶*/
68 if((N % 2) == 1)
69 {
70 for(i = 0; i < N; i++)
71 {
72 alpha = 0;
73 for(j = 1; j <= (nbar - 1); j++)
74 {
75 alpha += (*(sf + j - 1)) * cos( 2 * PI * j * (dspDouble)(i - ((N-1)/2))/N );
76 }
77 *(result + i) = 1 + 2 * alpha;
78 }
79 }
80 /*偶数阶*/
81 else
82 {
83 for(i = 0; i < N; i++)
84 {
85 alpha = 0;
86 for(j = 1; j <= (nbar - 1); j++)
87 {
88 alpha += (*(sf + j - 1)) * cos( PI * j * (dspDouble)(2 * (i - (N/2)) + 1) / N );
89 }
90 *(result + i) = 1 + 2 * alpha;
91
92 }
93 }
94 *w = result;
95 free(sf);
96
97 return DSP_SUCESS;
98
99 }
...全文
784 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧