数字信号处理中的常用方法

产生方波

clear
t=0:0.01:10;
subplot(4,1,1)
f1=square(t);                      %  产生周期为2pi的方波信号
plot(t,f1)
axis([0,10,-1.2,1.2])
subplot(4,1,2)
f2=square(t,30);              %  产生周期为2pi,占空比为30%的方波信号  
plot(t,f2)
axis([0,10,-1.2,1.2])
subplot(4,1,3)
f3=square(2*pi*t);                %  产生周期为1的方波信号
plot(t,f3)
axis([0,10,-1.2,1.2])
subplot(4,1,4)
f4=square(2*pi*t,80);             %  产生周期为1,占空比为80%的矩形脉冲信号
plot(t,f4)
axis([0,10,-1.2,1.2])

产生三角波,锯齿波

clear
t=0:0.01:15;
subplot(3,1,1)
f1=sawtooth(t);
plot(t,f1)
axis([0,15,-1.2,1.2])
subplot(3,1,2)
f1=sawtooth(pi*t);
plot(t,f1)
axis([0,15,-1.2,1.2])
subplot(3,1,3)
f1=sawtooth(2*pi*t,0.5);
plot(t,f1)
axis([0,15,-1.2,1.2])

angle-相位角求取

用法

P=angle(Z)

函数返回向量Z的相位角P,单位是弧度,若元素向量或数组Z为复数,则相位角位于-pi到+pi之间。

besselap-besself低通模拟滤波器

用法

[z,p,k]=besselap(n)

函数返回n阶低通模拟besself滤波器的零点z,极点p和增益k。其中,n《=25,且p的长度为n,k为标量,z是一个空矩阵。

传递函数:

buttap-Butterworth低通模拟滤波器

用法

[z,p,k]=buttap(n)

函数返回 n阶低通模拟Butterworth滤波器的零点z,极点p和增益k。其中,p的长度为n,k为标量, z是一个空矩阵。

cheb1ap-切比雪夫1型低通模拟滤波器

用法

[z,p,k]=cheb1ap(n,Rp)

函数返回n阶切比雪夫1型低通滤波器的零点z,极点p和增益k。其中,p的长度为n,k为标量,z是一个空矩阵。Rp指定通带上允许的波纹类型(单位是dB)。

cheb2ap-切比雪夫2型低通模拟滤波器

用法

[z,p,k]=cheb2ap(n,Rs)

函数返回 n阶切比雪夫2型低通模拟滤波器的零点z,极点p和增益k。其中, z和p的长度为n,若n为奇数,则z的长度为n-1,k为标量。Rs指定阻带上允许的波纹类型(单位是dB)

时域分析

conv-计算卷积

w=conv(u,v)

函数计算两个信号向量u和v的卷积。其中u的长度为m,v的长度为n,则返回计算结果w长度为(m+n+1)。

cov-计算协方差

1.R=cov(X)

函数返回信号X的协方差矩阵R。X可为向量或矩阵。当X为向量时,cov(X)返回一个包含方差的标量R。当X为矩阵时,cov(X)返回协方差矩阵。

2.R=cov(X,Y)

函数求信号X和Y之间的协方差。

生成一个随机矩阵,然后计算该随机矩阵X的协方差矩阵。

fft/ifft-快速傅立叶变换/反变换

1.Y=fft(X)/Y=ifft(X)

函数按照基2的算法对X进行快速傅立叶变换/反变换。若X是一个矩阵,则对矩阵的每列进行快速傅立叶变换/反变换,返回Y是和X相同大小的矩阵。若X是一个多维序列,则对第一个非单独维进行快速傅立叶变换/反变换。

2.Y=fft(X,n)/Y=ifft(X,n)

函数对X进行n点快速傅立叶变换/反变换。当X是一个向量,若X的长度小于n,则先对X进行补零使其长度为n;若X的长度大于n,则对X进行剪切使其长度为n,最后得到一个长度为n的向量Y。当X是一个矩阵,则利用同样方法对矩阵的每一列进行调整,然后对矩阵的每列进行快速傅立叶变换/反变换,最后得到一个n行的矩阵Y。

3.Y=fft(X,n,dim)/Y=ifft(X,n,dim)

用法同上,dim用来指定进行快速离散傅立叶变换/反变换的维数。

信号sig中含有正弦信号和噪声信号,对其进行快速离散傅立叶变换。并求出原始信号频率成分。

>> t=0:0.005:1;
>> x=sin(2*pi*20*t)+cos(2*pi*60*t);
>> sig=x+rand(1,length(t));
>> subplot(1,2,1);
>> plot(sig(1:60));
>> title(‘原始信号图‘);

>> ftt_sig=fft(sig,512); %对sig信号进行补零的512点快速离散傅立叶变换
>> p=ftt_sig.*conj(ftt_sig)/512; %求信号的功率谱密度
>> f=1000*(0:255)/512; %设置频率的变换范围
>> subplot(1,2,2);
>> plot(f,ftt_sig(1:256)) %绘制功率谱密度分布图

>> title(‘功率谱密度图‘)

fftfilt-基于FFT额FIR滤波

用法

y=fftfilt(b,x)

函数使用叠加法进行基于FFT的FIR滤波。给定系数向量 b对输入向量x进行滤波。

y=fftfilt(b,x,n)

函数使用叠加法进行基于FFT的FIR滤波。给定系数向量b对输入向量x进行滤波。n用于决定FFT的长度。

filtfilt-零相位数字滤波

用法

y=filtfilt(b,a,x)

函数对输入信号 x进行正向和反向处理从而实现零相位数字滤波。b和a指定传递函数的系数, x是输入信号。函数对x进行前向滤波后,再将结果进行反向。

hilbert-希尔伯特变换

x=hilbert(xr)

函数将实序列xr进行希尔伯特变换,返回一个同样长度的复数序列x。若xr是一个矩阵,则对xr矩阵的每列进行希尔伯特变换。

x=hibert(xr,n)

函数将实序列xr进行n点希尔伯特变换,返回一个同样长度的复数序列x。对xr进行补零或者去零的操作使其长度为 n。

impinvar-用冲击响应不变法使模拟滤波器转换为数字滤波器

用法

[bz,az]=impinvar(b,a,fs)

函数在保持冲击响应不变的前提下,将模拟滤波器的传递函数的分子分母b和a转换为数字滤波器的传递函数的分子分母bz和az。fs为对模拟滤波器的采样频率,缺省为1hz。

[bz,az]=impinvar(b,a,fs,tol)

方法同上,tol为指定的公差,tol越大,则impinvar函数接近极点的可能性越大,缺省为极点值的0.001。

residuez-Z反变换

用法

[r,p,k]=residuez(b,a)

函数对有理Z函数进行Z反变换。b和a分别为有理Z函数的分子多项式系数向量和分母多项式系数向量。返回r为留数列向量,p为极点列向量,若分子多项式的阶数大于分母多项式的阶数,则k为展开式中的直接项。

信号产生

ones-产生单位阶跃信号

signal=ones(1,N)

函数产生一组N点单位阶跃信号signal,长度为N,信号幅值为1。

生成一个长度为5的单位阶跃信号,信号幅值为1。

signal=ones(1,5)

zeros-产生单位抽样信号

signal=[1,zeros(1,N-1)] 函数产生一组单位抽样信号signal。

1.生成一组长度为5的单位抽样信号

signal=[1,zeros(1,5-1)]

2.生成一个长度为5的单位抽样信号,它在时间轴上延迟2个周期。

x=zeros(1,5)    x(2)=1

sawtooth-生成锯齿波/三角波信号

1.sawtooth(t) 函数对时间变量t产生周期为2pi的锯齿波,幅值在+1到-1间变化。

2.sawtooth(t,width) 函数对时间变量t产生三角波,width是在0到1之间取值的尺度参数,指定锯齿波的波峰出现的位置。函数在[0,width*2*pi]区间内由-1增大到+1,在[width*2*pi,1]区间内由+1减小到-1。

width=1时,产生正极性锯齿波,width=0时,产生负极性锯齿波,width=0.5时,产生对称锯齿波。

square-生成方波信号

1.x=square(t) 函数对时间变量t产生周期为2pi,幅值为+-1的方波。

2.x=square(t,duty) 函数是对时间变量t产生指定周期,幅值为+-1的方波。duty是信号为正值的区域在一个周期内所占的比例。

时间: 2024-10-11 17:02:37

数字信号处理中的常用方法的相关文章

数字信号处理中为什么要加窗

对模拟信号进行数字处理时,首先要对模拟信号进行采样,采样频率由奈奎斯特采样定理决定.对采样而来的数字信号进行 DTFT处理得到其频谱.由 DTFT的计算公式可知, DTFT的计算需要用到信号的所有采样点,当信号为无限长或者是相当长时,这样的计算不可行也没有实际意义.因此会把信号分成许多一定长度的数据段,然后分段处理. 如果把数据进行分段,相当于对信号进行了加矩形窗的处理,对加窗后的信号做 DFT,将会出现由于加窗而引入的高频分量. 既然加窗不可避免,就选择一个合适的吧.窗的形状有许多种,选用合适

数字信号处理中各种频率关系

4种频率及其数量关系 实际物理频率表示AD采集物理信号的频率,fs为采样频率,由奈奎斯特采样定理可以知道,fs必须≥信号最高频率的2倍才不会发生信号混叠,因此fs能采样到的信号最高频率为fs/2. 角频率是物理频率的2*pi倍,这个也称模拟频率. 归一化频率是将物理频率按fs归一化之后的结果,最高的信号频率为fs/2对应归一化频率0.5,这也就是为什么在matlab的fdtool工具中归一化频率为什么最大只到0.5的原因. 圆周频率是归一化频率的2*pi倍,这个也称数字频率. 有关FFT频率与实

关于数字信号处理中的一些概念的理解

1,卷积:卷积的时域解释可类比为摔跤后疼痛感的持续,不同时刻的输入x(m)都对输出有影响,影响的大小取决于m时刻后的影响因子h(n-m),则此时(n时刻)的输出受m时刻的影响为x(m)*h(n-m),再考虑其他时刻的影响,则卷积公式得出. 从频域理解的话就是系统输出的傅里叶变换=输入的傅里叶变换*频率响应因子. 2,傅里叶变换:个人理解所谓的傅里叶变换就是通过数学上的累加将时间因子消去只留下频率因子的结果. 3,数字频率,模拟频率,采样频率的关系:w=2pi*f/fs;其中w是数字频率,f是模拟

转载--理解数字信号处理的三把钥匙

原址 在数字信号处理大厦中,有许许多多的小房间,有的门上写着"DFT",有的门上写着"滤波",有的门上写着"卷积",有的门上写着"相关",等等.每一个房间都藏着知识的秘密,每一个房间都要用属于自己的钥匙才能打开.但就整体上来说,理解数字信号处理有三把"万能"的钥匙:时域与频域的相互切换.向量和MATLAB软件.充分应用这三把钥匙,能为深入理解数字信号处理提供有力的帮助. 1.时域与频域的相互切换 深入理解数

数字信号处理--FFT与蝶形算法

在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征.尽管传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理.因此至DFT被发现以来,在很长的一段时间内都不能被应用到实际的工程项目中,直到一种快速的离散傅立叶计算方法——FFT,被发现,离散傅立叶变换才在实际的工程中得到广泛应用.需要强调的是,FFT并不是一种新的频域特征获取方式,而是DFT的一种快速实现算法.本文就FFT的原理以及具体实现过程进行详尽讲解. DFT计算公式 本文不

信号处理中数字频率和模拟频率简明讲解

数字频率和模拟频率 在数字信号处理的学习中,很多刚入门朋友常常为模拟频率.数字频率及其相互之间的关系所迷惑,甚至是一些已经对数字信号处理有所了解的朋友也为这个问题所困惑. 我们通常所说的频率,在没有特别指明的情况下,指的是模拟频率,其单位为赫兹(Hz),或者为1/秒(1/s),数学符号用f来表示.这是因为现实世界中的信号大多为模拟信号,频率是其重要的物理特性.以赫兹表示的模拟频率表示的是每秒时间内信号变化的周期数.如果用单位圆表示的话,如图1所示,旋转一圈表示信号变化一个周期,则模拟频率则指的是

FS,FT,DFS,DTFT,DFT,FFT的联系和区别 数字信号处理

DCT变换的原理及算法 文库介绍 对于初学数字信号处理(DSP)的人来说,这几种变换是最为头疼的,它们是数字信号处理的理论基础,贯穿整个信号的处理. 学习过<高等数学>和<信号与系统>这两门课的朋友,都知道时域上任意连续的周期信号可以分解为无限多个正弦信号之和,在频域上就表示为离散非周期的信号,即时域连续周期对应频域离散非周期的特点,这就是傅里叶级数展开(FS),它用于分析连续周期信号. FT是傅里叶变换,它主要用于分析连续非周期信号,由于信号是非周期的,它必包含了各种频率的信号,

《数字信号处理》 学习总结

21世纪属于数字化信息时代,很有幸学习了一些数字信号的基础内容,尽管还不清楚这些理论基础的应用,但他所应用的技术给了自己很多积累也让自己感受到了人类智慧的伟大,本文章主要论述对高西全和丁玉美编著的<数字信号处理>简要学习总结. 上图为对本书学习的主要内容, 信号有模拟信号,时域离散信号和数字信号之分,主要讨论的是离散信号和离散系统,为什么数字信号处理却讨论的是时域离散信号呢?原因是数字信号与离散信号的区别,数字信号存在量化误差,离散信号的特性研究相对容易. [分析方式] 任何事物都会有不同的分

数字信号处理与音频处理(使用Audition)

#include<iostream> #include<string> #include<stack> using namespace std; #define n 8 stack <int *> s; int * createMaze(){//初始化迷宫 int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=-1;//不设置为0的原因是超