当前位置:首页 » 编程语言 » 循环卷积c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

循环卷积c语言

发布时间: 2023-01-18 15:49:53

❶ 快速卷积在什么情况下效率最高呢

一、实验目的
1、学会FFT算法程序(或函数)的使用方法;
2、了解序列的线性卷积和圆周卷积之间的关系;
3、验证有限长FFT算法实现线性相关运算的快速计算方法;
4、解FFT的点数对快速卷积与快速相关运算结果所产生的影响;
5、了学会利用FFT算法进行有限长序列的线性卷积的快速计算;
6、掌握基-2快速傅立叶变换(Fast FourierTransform,FFT)的算法原理及其程序实现方法.
二、实验原理
1、有限长序列的线性卷积和圆周卷积线性卷积和圆周卷对于有限长序列,存在两种形式的卷积,即积。设x(n)是长度光JM的有限长序列,y(n)是长度为N的有限长序列,则二者的线性卷积可表示为:
M-1
线性卷积的结果序列f(n)是一个长度为L=N +M -1的有限有限长序列,且长序列。将x(n)及y(n)均补零增长为L点的二者的L点的圆周卷积可表示为:
圆周卷积的结果序列f(n)是一个长度为L的有限长序列,由圆周卷积的点数所决定。有限长序列的线性卷积和圆周卷积之间的关系可用公式表示如下:
即:圆周卷积是线性卷积以圆周卷积的点数几为周期进行周期延拓后所取的主值序列。因而,在圆周卷积的点数大于或等于线性卷积的长度时、圆周卷积结果和线性卷积结果相等,这也是快速卷积算法的理论基础之一。
2、离散傅里叶变换的卷积性质
离散傅里叶变换的卷积性质也是快速卷积算法的另一理论基础。若f(n)是有限长序列x(n)和有限长序列y(n)的L点圆周卷积,即公式(5-2),则 f(n)的L点离散傅里叶变换为: F_c (k)=X(k)Y(k)
3、Matlab中FFT与IFFT的实现
离散傅立叶变换(Discrete Fourier Transform, DFT)实现了频域的离散化,方便了计算机处理,在数字信号处理中有着非常重要的作用。但直接计算DFT的运算量与变换长度N的平方成正比,计算量太大。而快速傅立叶变换FFT则是快速计算DFT的有效算法,大大提高了DFT的运算效率,在信号频谱的分析、滤波器频率响应的计算,以及线性卷积的快速计算等方面起着非常重要的作用。FFT 采用分组计算的方式进行DFT的快速计算,具体算法原理参看教材,在附录B中也给出了常用的基-2时间抽取FFT算法和分裂基FFT 算法的c语言程序。相应的,IFFT 则为离散傅里叶反变换,即 IDFT 的快速计算方法。在Matlab中,提供了f(t)和 ifi(t)两个函数来分别实现快速傅立叶变换的正变换和反变换。Ft(t)和if(t)两个函数是用机器语言而不是Matlab 指令写成的,执行速度很快。除了输入、输出参数的含义不同之外,这两个函数的调用方法完全相同,因此以ff()函数为例说明二者的使用方法。ff()函数常用调用格式有两种:
(1)Xk=fft(xn)
其中,xn为输入时域序列x(n),返回结果xk为x(n)的离散傅里叶变换X(k)。当xn是矩阵时(对应于多通道信号),计算xn中每一列信号的离散傅里叶变换。当xn的长度是2的整数幂,采
用基2快速算法计算,否则采用较慢的混合基算法进行计算。
(2)Xk=fft(xn,NFFT)
这种调用格式相比较于上一种调用格式,多了一个输入参数NFFT,用于指定FFT的点数。当NFFT的值是2的整数幂,采用基-2快速算法计算,否则采用较慢的混合基算法进行计算。当xn的长度大于NFFT时,对 xn进行自动截断;当xn的长度小于NFFT时,在xn后自动进行补零。
4、快速卷积基本算法的原理
利用FFT进行有限长序列的线性卷积的快速计算即为快速卷积算法。按照上述相关原理,利用FFT计算线性卷积,即计算公式中的f(n)的算法步骤可用下图来表示:

其中,FFT运算的点数L应满足L≥N+ M-1。为了采用基-2的算法,常常需要L还应满足L=2M
5、快速相关算法原理
利用 FFT 讲行有限长序列相关运算的快速实现则称为快速相关算法。若(n)是长度头M的有限长序列,y(n)是长度为N的有限长序列,则一者的线性百相关序列R(m)与二者的线性卷积运算之间的关系可表示

由于线性卷积可以用FFT讲行快速计算,则按公式,相关运算也可以利用fft进行快速计算,在此不再赘述其原理。需要时,根据傅立叶变换的反折和共轭特性可以减少一次FFT的使用提高计算效率。
三、实验步骤、数据记录及处理
本实验利用Matlab中提供的fft()和 ifft()函数进行快速卷积算法和快速相关算法性卷积和圆周卷积之间的关系进行验证。具体的实验内容和实验的实现,并对有限长序列线
步骤如下所示:
其中:
1、用 Matlab生成两个有限长序列x(n) y(n)

(1)基于fft()和 ifft()函数,编程利用4点快速卷积算法计算有限长序列x(n)与y(n)的卷积,结果令为c1(n)。
(2)基于fft()和 ifft()函数,编程利用速卷积算法计算有限长序列x(n)与y(n)的卷积,结果令为c2(n)
(3)调用conv()函数计算有限长序列x(n)与y(n)的卷积,结果令为c3(n)。分别绘制序列x(n)、y(n)、c1(n)、c2(n)和c3(n)的图形。对结果进行分析,并通过实验结果验证有限长序列线生卷积和圆周卷积之间的关系。
2、设两个有限长序列x(n)和h(n)分别为:
(1)x(n)=(sin 0.4n)·R,(n+1);
(2)h(n)=(0.9)"R,o(n+1)
按图所示的快速卷积算法原理编写完整的快速卷积算法程序计算y(n)=x(n)*h(n),绘制序列图形,并通过 conv()函数对结果进行验证。
3、将实验1中实验内容4所给定的信号利用快速相关算法进行自相关序列的计算,并将结果与实验1中的结果进行对比验证。
实验程序:
clc;clear all;close all;
nx=0:1:2;x=[1,1,1];%确定x(n)与y(n)的自变量取值范围
ny=0:1:2;y=[2,2,2];%生成x(n)与h(n)
L=pow2(nextpow2(length(x)+length(y)-1));%确定FFT快速卷积的点数
xk=fft(x,L);%计算x的L点FFT,结果为x(k)
yk=fft(y,L);%计算y的L点FFT,结果为y(k)
YK=xk.*yk;%计算y(k)
c1n=ifft(YK,4);%四点
c2n=ifft(YK,L);%八点
c3n=conv(x,y);%线性卷积
n1=0:1:3;%确定n1的取值范围
n2=0:1:7;%确定n2的取值范围
n3=0:1:4;%确定n3的取值范围
%绘制x(n)与y(n)波形
figure('name','x(n)与y(n)序列');
subplot(2,1,1);stem(nx,x);grid on;xlabel('n');ylabel('x(n)');title('序列x(n)');
subplot(2,1,2);stem(ny,y);grid on;xlabel('n');ylabel('y(n)');title('序列y(n)');
%绘制x(n)与y(n)序列卷积波形
figure('name','x(n)与y(n)序列卷积');
subplot(3,1,1);stem(n1,c1n);grid on;xlabel('n');ylabel('c1(n)');title('x(n)与y(n)的4点fft');
subplot(3,1,2);stem(n2,c2n);grid on;xlabel('n');ylabel('c2(n)');title('x(n)与y(n)的8点fft');
subplot(3,1,3);stem(n3,c3n);grid on;xlabel('n');ylabel('c3(n)');title('x(n)与y(n)的线性卷积');
登录后复制


clc;clear all;close all;
nxn=1:15;nhn=1:20;%确定x(n)与y(n)的自变量取值范围
xn=sin(0.4*nxn);hn=0.9.^nhn;%生成x(n)与h(n)
L=pow2(nextpow2(length(xn)+length(hn)-1));%确定FFT快速卷积的点数
Xk=fft(xn,L);%计算x的L点FFT,结果为x(k)
Hk=fft(hn,L);%计算y的L点FFT,结果为y(k)
Yk=Xk.*Hk;%计算YK
y1n=ifft(Yk,L);%对YK调用IFFT,求得y1(n)
y2n=conv(xn,hn);%计算y2(n)的卷积
n1=(nxn(1)+nhn(1)):1:(L+nxn(1)+nhn(1)-1);%确定n1的自变量取值范围
n2=(nxn(1)+nhn(1)):1:(nxn(15)+nhn(20));%确定n2的自变量取值范围
%绘制有限长序列想x(n)与h(n)
figure('name','x(n)与h(n)序列');
subplot(2,2,1);stem(nxn,xn);grid on;xlabel('n');ylabel('x(n)');title('x(n)=(sin0.4n)*R15(n+1)');
subplot(2,2,2);stem(nhn,hn);grid on;xlabel('n');ylabel('h(n)');title('h(n)=((0.9)^n)R20(n+1)');
subplot(2,2,3);stem(n1,y1n);grid on;xlabel('n');ylabel('y(n)');title('快速卷积法计算y(n)');
subplot(2,2,4);stem(n2,y2n);grid on;xlabel('n');ylabel('y(n)');title('conv()函数计算y(n)');
登录后复制

clc;clear all;close all;
n1=1:100;n2=1:100;%确定n1,n2取值范围
x=[101,82,66,35,31,7,20,92,154,125,85,68,38,23,10,24,83,132,131,118,90,67,60,47,41,21,16,6,4,7,14,34,45,43,48,42,28,10,8,2,0,1,5,12,14,35,46,41,30,24,16,7,4,2,8,17,36,50,62,67,71,48,28,8,13,57,122,138,103,86,63,37,24,11,15,40,62,98,124,96,66,64,54,39,21,7,4,23,55,94,96,77,59,44,47,30,16,7,37,74];
mean(x(:))
x=x-mean(x);
Rx=xcorr(x);
y=x(end:-1:1);
subplot(2,1,1);stem(Rx);grid on;xlabel('t');ylabel('Rx');title('xcorr()函数计算的自相关序列');
L=pow2(nextpow2(length(n1)+length(n2)-1));%确定FFT快速卷积的点数
Xk=fft(x,L);%计算x的L点FFT,结果为x(k)
Yk=fft(y,L);%计算y的L点FFT,结果为y(k)
Rk=Xk.*Yk;%计算YK
Rn=ifft(Rk,L);%对RK调用IFFT,求得y1(n)
n=(n1(1)+n2(1)):(L+n1(1)+n2(1)-1);%确定n的自变量取值范围
subplot(2,1,2);stem(1:200,Rn(1:200));grid on;xlabel('t');ylabel('R(n)');title('fft计算的自相关序列');
登录后复制

四、思考题
(1)对实验内容2中快速卷积基本算法的运算量进行分析,即乘法和加法运算次数。

(2)利用实例说明快速卷积基本算法的适用条件,即在什么情况下效率最高。

(3)实验内容3中,如何通过DFT的性质,减少一次ftt()函数的调用,提高计算效率?

五、总结
通过此次实验的练习,加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT进行数字信号处理,并且掌握了循环卷积和线性卷积两者之间的关系

❷ 循环矩阵乘法怎么化作卷积

啊,这个还没人回答么?这个其实挺显然的,几乎就是卷积的定义,只是表达起来费劲。

设那个Circulant Matrix为A,
A的第1行元素:a_1、a_2、...、a_n
A的第2行元素:a_n、a_1、a_2、...、a_{n-1}
A的第3行元素:a_{n-1}、a_n、a_1、a_2、...、a_{n-2}
就这么一个一个错开,最后
A的第n行元素:a_2、a_3、...、a_n、a_1

设向量b的元素是:b_1、b_2、...、b_n
计算矩阵与向量相乘:Ab

先看卷积的定义:
对于任一两个向量 f 与 g,记 f°g 为它们的卷积,则:
f°g (n) = Σ_{m从-∞到∞} f(m) g(n-m)
也就是说:h = f°g 也是一个向量,它的第n个元素 h(n) 是:先把 g(m) 反过来变成 g(-m),然后再平移n得到 g(n-m),最后将 g(n-m) 与 f(m) 一一相乘。

建议楼主先熟悉一下卷积的定义,卷积有很多应用,比如下面这个(只为熟悉卷积定义):
任意两个多项式:
p(x) = 4x^3 + 5x^2 + 2
q(x) = 3x^2 + x + 8
那么 p(x) 乘以 q(x) 的系数是什么呢?就是 p 和 q 二者系数的卷积。
设 f = [2 0 5 4] 为 p 的系数,g = [8 1 3] 为 q 的系数(向量的下标从0开始)。
根据卷积的定义,
f°g (0) = f(0) g(0-0) = 2*8 = 16
f°g (1) = f(0) g(1-0) + f(1) g(1-1) = 2*1+0*8 = 2
f°g (2) = f(0) g(2-0) + f(1) g(2-1) + f(2) g(2-2) = 2*3+0+5*8 = 46
f°g (3) = f(1) g(3-1) + f(2) g(3-2) + f(3) g(3-3) = 0+5*1+4*8 = 37
f°g (4) = f(2) g(4-2) + f(3) g(4-3) = 5*3+4*1 = 19
f°g (5) = f(3) g(5-3) = 4*3 = 12
最后 f°g = [16 2 46 37 19 12] 恰好为 p(x)q(x) 的系数。

再回到我们的问题。
记向量 b = [b_1 b_2 ... b_n]。
向量 c = [a_n a_{n-1} ... a_2 a_1 a_n a_{n-1} ... a_2],也就是把向量a倒过来写2遍。
为了方便,b的下标从0到n-1,c的下标从-(n-1)到n-1,也就是:
c(0) = a_1,c(-1) = a_2,...,c(-n+1) = a_n
c(1) = a_n,c(2) = a_{n-1},...,c(n-1) = a_2
考察 b°c
b°c (0) = b(0) c(0) + b(1) c(-1) + b(2) c(-2) + ... + b(n-1) c(-n+1)
恰好为矩阵 A 的第1行与 b 的乘积。
b°c (1) = b(0) c(1) + b(1) c(0) + b(2) c(-1) + ... + b(n-1) c(-n+2)
恰好为矩阵 A 的第2行与 b 的乘积。
依次类推,直到:
b°c (n-1) = b(0) c(n-1) + b(1) c(n-2) + b(2) c(n-3) + ... + b(n-1) c(0)
恰好为矩阵 A 的第n行与 b 的乘积。
可以看到,矩阵与向量相乘完全等价于卷积。

============================================================

最后,再说一下DFT(离散傅立叶变换)和FFT(快速傅立叶变换)的关系。
这只关系到计算的快慢。我们统计一下最基本的加减乘除的运算数。
为了计算每一个卷积中的元素,比如:b°c (0),我们都要进行 O(n) 次的运算。
那么计算全部的卷积,就需要 O(n^2) 次运算。
跟直接计算一样,没有任何优势。

但是利用DFT和FFT就不一样了。
有这样一个定理:将序列经过 DFT 变换后,设 F = DFT(f),G = DFT(g) 分别为两个序列对应的傅立叶变换后的序列,那么:原序列中的卷积对应变换后的乘积。
详细说:考察 f°g 经过傅立叶变换后的序列:DFT(f°g),这个定理就是说:
DFT(f°g) = F*G,就是F和G中的元素一一相乘。
两个序列F和G中的元素一一相乘,只需要O(n)的计算量。

剩下的就是DFT(离散傅立叶变换)的计算量了。
用FFT算法,傅立叶变换只需要O(n log(n))的计算量,所以总计算量是:O(n log(n)),远小于O(n^2)的直接计算方法。

具体步骤如下:
1) 先将 b 与 c 进行 FFT 变换,得到:B=DFT(b),C=DFT(c),计算量 O(n log(n))
2) 将 B 与 C 中的元素一一相乘,得到:B*C,计算量 O(n)
3) 用反向的快速傅立叶变换,得到:b°c = IDFT(B*C),计算量 O(n log(n))
其中,IDFT代表反向的傅立叶变换。

❸ 如何用C语言实现数组的卷积过程~~~

积分为线性卷积,和圆形卷积。而题目是线性卷积,然后是所求的结果个数是上面两个数组 个数的和减去1
比如上面h数组里面单元是5 而x数组 是4
所以肯定一点是结果是等于8个数的
result[(sizeof(h) + sizeof(x)) / sizeof(double) - 1];这个就可以说明了
第二个知识点是卷积是怎么求的。第一步肯定是判断两个数组 那个长度长
conv(x, h, sizeof(x) / sizeof(x[0]), sizeof(h) / sizeof(h[0]), result); 就是实现这个目标的。
然后是长度长的放前面
好吧 我换个 数字来就把
x【】=
h【】=
然后卷积 一个是 x0*h0=1;实现语句 是第一个
for (int i = 0; i < lenH; i++)
{
for (int j = 0; j <= i; j++)
result[i] += x[j] * h[i - j];
}
此时 已经要转入第二步骤了:
for (int m = lenH; m < lenX; m++){
for (int j = 0; j <lenH; j++)
result[m] += x[m - j] * h[j];
}
第二部 应该是 x*h+x1*h(1-1)= 这里得h1 用0代替 但程序里 不是这样 而是 用x*h=
好吧 我可能设置的h数组不够长 加入 h有两个。x有
那么 结果 应该是x2*y1+x1*y0;
然后是第三部
是说 在要求的 结果 最后几个数字时候 比如原题里面 应该是有8个的。但到第二个循环才求到X得长度5个。
所以 后面应该是resual记住 数组下标 比实际小1. 所以
是这样的
用 for (int n = lenX; n < lenX + lenH - 1; n++){
for (int j = i - lenX + 1; j < lenH; j++)
result[n] += x[n - j] * h[j];
}里面的i 要改成n
for (int n = lenX; n < lenX + lenH - 1; n++){
for (int j = n - lenX + 1; j < lenH; j++)
result[n] += x[n - j] * h[j];
}
然后 是这样分析的
结果等于=x(0)h(5-0)+x(1)h(5-1)+x(2)h(5-2)+x(3)h(5-3)=x(0)h(5)+x(1)h(4)+x(2)h(3)+x(3)h(2) 记住 数组不够的地方 用0代替
(result, &result[8], ostream_iterator<double>(cout, " ")); 这个函数 就不想说了 自己去看stl 算法吧
另外,虚机团上产品团购,超级便宜

❹ 两个序列做类似于卷积的运算,不同的是把乘后求和改为求与并输出所有序列

原理方法
1
基本数学原理
我们假设有两个长度有限的任意序列A(n)和B(n),其中A(n)和B(n)的具体数学表达式可以看下图一。那么这两个有限长序列的卷积就应该为C(n)=A(n)*B(n),其具体表达式请参看一下图二。

2
相关函数指令
Matlab中的conv和deconv指令不仅可以用于多项式的乘除运算,还可以用于两个有限长序列的卷积和解积运算。
Matlab提供的函数conv,语法格式:w=conv(u,v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量。如果向量u和v的长度分别为N和M,则向量w的长度为N+M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数。下面我们看一下deconv指令。功能:求向量反褶积和进行多项式除法运算。语法格式:[q,r]=deconv(v,u) ,参数q和r分别返回多项式v除以多项式u的商多项式和余多项式。具体实例请看下一步。

3
conv和deconv指令实例
具体实例请看下图,这里我们求多项式(x2+2x+1)与多项式(2x2+x+3)的积,再求积与(x2+2x+1)的商。需要注意的是向量c代表多项式(2x4+5x3+7x2+7x+3)。

END
两个有限长序列的卷积实例
具体序列的数学形式
在这一步我们将具体的有限长时间序列按数学方式显示,具体请看下图。

解法一:循环求合法求卷积
在本例中我们将按照原理方法第一步中图二的方式进行卷积计算,即循环求合法求卷积。具体的代码及结果请看下图。图一是是生成有限长度时间序列,图二是根据原理方法第一步中图二的方式即循环求合法求卷积的具体代码,图三是是图二的计算结果。

解法二:0起点序列法
下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。

解法三:非平凡区间序列法
下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令。具体代码看下图。图一为计算代码,图二为计算结果。

绘图比较
这一步我们将解法二和解法三的计算结果绘制在一张图片中进行比较,其中第一幅是“0起点法”的计算结果图,第二幅是“非平凡区间法”的计算结果图。其中画图代码为:
subplot(2,1,1),stem(kc,c),text(20,6,'0 起点法') %画解法二的结果
CC=[zeros(1,KC(1)),C]; %补零是为了两子图一致
subplot(2,1,2),stem(kc,CC),text(18,6,'非平凡区间法') %画解法三的结果
xlabel('n')

小结
有以上可以得出如下结论:
1、“解法三”最简洁、通用;
2、“解法二”使用于序列起点时刻N1或(和)M1小于0的情况,比较困难;
3、“解法一”最繁琐,效率低下。

❺ 用c语言实现两个矩阵相乘怎么做

C语言实现矩阵相乘
问题描述:
编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。
分析:
首先我们可以根据题意写出函数头。可以定为void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分别是输入的m*n矩阵和n*p矩阵,lMatrixResult是输出的m*p矩阵。
因为m,n和p都是未知量,要进行处理的矩阵大小是变量。但我们可以定义比较大的二维数组,只使用其中的部分数组元素。
矩阵相乘的算法比较简单,输入一个m*n矩阵和一个n*p矩阵,结果必然是m*p矩阵,有m*p个元素,每个元素都需要计算,可以使用m*p嵌套循环进行计算。
根据矩阵乘法公式:
可以用循环直接套用上面的公式计算每个元素。嵌套循环内部进行累加前,一定要注意对累加变量进行清零。
数据要求
问题中的常量:
#define
MAX
10
/*矩阵最大行数和列数*/
问题的输入:
int
m,n,p;
/*相乘的两个矩阵的行列数*/
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
/*相乘的两个矩阵*/
问题的输出:
long
lMatrixResult[MAX][MAX];
/*矩阵相乘后得到的矩阵*/
初始算法
1.输入两个矩阵的的行列数m,n,p;
2.输入第一个矩阵的每个元素;
3.输入第二个矩阵的每个元素;
4.调用函数进行乘法运算,结果放在lMatrixResult
中;
5.
打印输出结果矩阵。
算法细化
算法的步骤4计算两个矩阵的乘法算法如下:
4.1
定义循环变量i,j,k;
4.2
嵌套循环计算结果矩阵(m*p)的每个元素。
程序代码如下:
#define
MAX
10
void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],
long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX])
{
int
i,j,k;
long
lSum;
/*嵌套循环计算结果矩阵(m*p)的每个元素*/
for(i=0;i<m;i++)

for(j=0;j<p;j++)

{

/*按照矩阵乘法的规则计算结果矩阵的i*j元素*/

lSum=0;

for(k=0;k<n;k++)

lSum+=lMatrix1[i][k]*lMatrix2[k][j];

lMatrixResult[i][j]=lSum;

}
}
main()
{
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
long
lMatrixResult[MAX][MAX],lTemp;
int
i,j,m,n,p;
/*输入两个矩阵的的行列数m,n,p*/
printf(" Please
input
m
of
Matrix1: ");
scanf("%d",&m);
printf("Please
input
n
of
Matrix1: ");
scanf("%d",&n);
printf("Please
input
p
of
Matrix2: ");
scanf("%d",&p);
/*输入第一个矩阵的每个元素*/
printf(" Please
elements
of
Matrix1(%d*%d): ",m,n);
for(i=0;i<m;i++)

for(j=0;j<n;j++)

{

scanf("%ld",&lTemp);

lMatrix1[i][j]=lTemp;

}
/*输入第二个矩阵的每个元素*/
printf(" Please
elements
of
Matrix2(%d*%d): ",n,p);
for(i=0;i<n;i++)

for(j=0;j<p;j++)

{

scanf("%ld",&lTemp);

lMatrix2[i][j]=lTemp;

}
/*调用函数进行乘法运算,结果放在lMatrixResult
中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*打印输出结果矩阵*/
printf(" Result
matrix:
");
for(i=0;i<m;i++)
{

for(j=0;j<p;j++)

printf("%ld
",lMatrixResult[i][j]);

printf(" ");
}
}
程序运行结果如下:
Please
input
m
of
Matrix1:
3
Please
input
n
of
Matrix1:
2
Please
input
p
of
Matrix2:
3
Please
elements
of
Matrix1(3*2):
1
2
0
1
3
0
Please
elements
of
Matrix2(2*3):
1
2
0
3
1
1
Result
matrix:
7
4
2
3
1
1
3
6
0

❻ FIR滤波器的C语言程序

length==256

❼ x(n)=5cos的周期

判断信号的因果性与稳定性:。
非因果,稳定
2.判断系统的因果性与稳定性: 。
因果,不稳定
3.判断信号是否为周期序列,若是,求其周期。
周期序列,周期为14
4.判断系统的线性与时不变性:。
第 1 页
泉州 舒华健身器材批发加盟连锁 -舒华总部直招
舒华健身器材批发品牌加盟连锁,火爆全国的健身器材加盟总部成熟模式,从选择装修到开店运营,总部全程扶持!
点击立即咨询,了解更多详情
咨询
舒华体育股份有限公司 广告
线性,时变
5.断下述系统是否是最小相位系统,为什么?
是,因系统零极点都在单位园内
6.用采样频率对信号采样,是否能不失真恢复原信号,为什么?
不能,因为
7.已知系统的差分方程为:判断该系统是IIR系统还是FIR系统,为什么?
该系统的传输函数为H(z)=1/(1-az-1)为IIR系
第 2 页
统,(或输出只与输入及前一时刻输出有关)
8.说明冲激响应不变法与双线性变换法的应用范围。
冲激响应不变法一般适用于低通滤波器的设计、加抗混叠滤波器的带通滤波器的设计,模拟频率和数字频率之间是线性关系;双线性变换适用于片段常数特性滤波器的设计,模拟频率与数字频率之间是非线性关系。
二、一线性时不变因果系统由下面差分方程描述:

第 3 页
1.确定该系统的系统函数H(z),画出其零极点图。
2.求系统的冲激响应h(n),说明该系统是否稳定。
3.求系统频率响应H(ejω)。
1.
零点: 极点:
2.
极点全部在单位圆内,系统稳定
第 4 页
3.
三、已知线性时不变系统的单位冲激响应和输入分别为:

1.用线性卷积的方法求输出序列。
2.计算和的8点循环卷积。
3.在什么条件下循环卷积等于线性卷积结果?

第 5 页

第 6 页

线性卷积的结果图 循环卷积的结果图
二序列在时,即>=11点时,循环卷积=线性卷积
四、已知定义在的有限长序列为:
第 7 页
={ 4, -2, 2, 3,-1, -2, 0,1,-4 }
X(k)为其9点的DFT,不直接计算DFT,求:
解:因为(4分)
所以

五、FFT来计算信号的频谱,已知信号的最高频率为,要求频率分辨率为,试确定:
1.采样间隔T,
第 8 页
2.采用基-2FFT的最小样点数N,以及与此相对应的最小记录长度,
3. 按你确定的参数,计算所获得的实际分辨率,
4.若须将分辨率提高一倍,如何获得,为什么。
解:1)采样间隔T: T=1/(2fh)=1/(22.51000)=0.2ms,
2)基-2FFT的最小样点数N :N=fs/f=5000/10=500, 取N为512
相对应的最小记录长度: Tp=5120.2ms=0.1024s
第 9 页
3)按确定的参数所获得的实际分辨率:f= fs /N=5000/512=9.77Hz
4)若须将分辨率提高一倍,可通过保持采样频率不变并将原记录长度增加一倍,作2N 点FFT获得。
六、已知采样频率,用双线性变换法设计一2阶Butterworth 低通滤波器,3dB截止频率为=100Hz,求 H(z)。
解:1)求数字频率: fc=100Hz
c=2fc/fs=2100/1000=0.2
2)频率预畸变: c=tg(c /2) =0.32
3)滤波器节数: N=2
第 10 页
4)查表求得归一化模拟传输函数
5)双线性变换求传输函数:
七、用窗函数法设计一严格线性相位低通数字滤波器,截止频率,要求过渡带弧度,阻带最小衰减。
1.选择合适的窗函数并确定节数N
2.求滤波器的延时
3.求h(n)
解:1)由给定的指标确定窗函数和长度N
第 11 页
由dB可选择汉宁窗、汉明窗、布拉克曼窗或凯塞窗等,若再考虑从滤波器节数最小的原则出发,可选择汉宁窗或汉明窗。这里选择汉宁窗。
,,也可取N=21。

2)确定延时值
3)求理想的单位脉冲响应

4)求h(n)

第 12 页
一、填空题
1.全通系统的零极点有 的特性,零点位置在 ,极点位置在 。
镜像共轭对称,单位圆外,单位圆内
2.N=16 时,1,10的倒码分别为:1: ,10: 。
1000(8),0101(5)
3.线性相位FIR滤波器当h(n)偶对称且N为偶数时,其幅度响应关于π为 对称,不适于设计 和 滤波器。
奇,高通,带阻
4.基-2 指FFT的长度N为 ,共有
第 13 页
个蝶式运算。
2M,NM/2
5.脉冲响应不变法不适合设计 和 滤波器,因为 原因。
高通,带阻,混叠
6.用矩形窗函数设计FIR滤波器增加节数N可减少 但不能减少 。
过度带,阻带衰减
7.用长度为M的严格线性相位FIR滤波器对信号滤波,滤波器的相位响应为 ,输出信号的延时为 个样点。
、(M-1)/2
第 14 页
二、判断题:
1.判断信号的因果性与稳定性:。
非因果,稳定
2.判断系统的因果性与稳定性: 。
因果,不稳定
3.判断信号是否为周期序列,若是,求其周期。
周期序列,周期为14
4.判断系统的线性与时不变性:。
第 15 页
线性,时变
5. 断下述系统是否是最小相位系统,为什么?

是,因系统零极点都在单位园内
三、作图题
1.已知,画出(要求标明坐标):
1), 2)
1) (2分) 2) (4分)
第 16 页

x(n) x((n-2))6R6(n)
2.已知传输函数为画出级联型结构流图
(4分)
3
第 17 页
1 -3.5 0.5 z-1

-1 2.5
四、计算题
1.已知序列为:{x(-3)= -1,x(-2)=0,x(-1)=1,x(0)=2,x(1)=1,x(2)=0,x(3)=1;其它值为0},求的富氏反变换。
解:由富氏变换的对称性:
F[xe(n)]= Re[X(ei)]
知Re[X(ei)]的富氏反变换为序列x(n) 的共轭对称序列xe(n),由于
x (n)为实序列,有:
第 18 页
xe(n)= 1/2[x (n)+x (-n)]
x(-3)= -1,x(-2)=0,x(-1)=1,x(0)=2,x(1)=1,x(2)=0,x(3)=1
令y(n)= x(-n)有:
{y(-3)=1,y(-2)=0,y(-1)=1,y(0)=2,y(1)=1,y(2)=0,y(3)= -1}
因此:
{ xe(-3)=0,xe(-2)=0,xe(-1)=1,xe(0)=2,xe(1)=1,xe(2)=0,xe(3)=0,其余为0}
2.已知滤波器的单位脉冲响应为,在间取非零值, 用FFT方法求。
第 19 页
1)求滤波器的频率响应;
2)确定为了保证用基-2 FFT方法正确计算全部时最小的FFT长度L;
3)指出若采用16点FFT时,仅那些点的值正确,为什么?求出这些的点的开始点和结束点的范围。
解:
1)滤波器的频率响应

2)由题目知x(n)长度为N=16,h(n)的长度为M=9,卷积输出长度为L=N+M-1=24,故可取基-2 FFT的长度为32。
第 20 页
3)线性卷积yl(n)与循环卷积y(n)的关系:
y(n)=yl((n+16*m))R16(n),而线性卷积的长度为24,故从n=0~7及n=16~24的点被混叠;因此,仅当n=8~15时才有正确的值。
3.已知序列,是对的Z变换在单位园上进行N=8
的等间隔采样值,起点为,求在N=8的逆DFT:
解:
因为是对的Z变换X(z)进行N=8的等间隔采样,故有:
=
第 21 页
按频率采样定理: =

五、设计题
1.已知采样频率,用双线性变换法设计一Butterworth 低通滤波器,3dB截止频率为=100Hz,阻带下边频=400Hz,阻带最小衰减为=22dB求 H(z)。
解: 1)求数字频率: fc=100Hz
c=2fc/fs=2100/1000=0.2
s=2fr/fs=2400/1000=0.8
第 22 页
2)频率预畸变: c=tg(c /2) =0.32
s=tg(s /2) =3.08
3)滤波器节数:

取N=2
4)查表求得归一化模拟传输函数
5)双线性变换求传输函数:
H(z)=(1+2z-1+z-2)/(15.1849-17.5312z-1+6.3463z-2)
第 23 页
2.用窗函数法设计一严格线性相位低通数字滤波器,截止频率,要求过渡带弧度,阻带最小衰减。
(1)选择合适的窗函数并确定节数N
(2)求滤波器的延时
(3)求h(n)和H(z)
解: 1)选择合适的窗函数:
因为要求滤波器的阻带衰减As50dB,可选择汉明窗。
滤波器节数:N=A/=8/0.32=25
2)滤波器的延时:=(N-1)/2=12
3)求h(n)(选择汉明窗):
第 24 页
hd(n)=1/(2) e-jd=sin[0.1 (n-)]/[(n-)]
w(n)= [0.54-0.46cos(2n /(N-1))]RN(n)
h(n)=hd(n)w(n)= 0.5[1-cos(2n /(N-1))] sin[0.1 (n-)]/[(n-)] RN(n)
一、填空题
1.最小相位系统传输函数的零点位置在 ,极点位置在 。
单位圆内、单位圆内
2.求N=16 时,8,11 的倒码: 8: , 11: ,
0001(1) 、1101(13)
第 25 页
3.线性相位FIR滤波器当h(n)偶对称且N为偶数时,其幅度响应关于π为 对称,不适于设计 和 滤波器。
奇 、高通、带阻
4.用长度为M的严格线性相位FIR滤波器对信号滤波,滤波器的相位响应为 ,输出信号的延时为 个样点。
第 26 页
网络文库
搜索
x(n)=5cos的周期