数字信号处理与MATLAB实现
1. n1=[ns:nf];
x1=[zeros(1,n0-ns),1,zeros (1,nf-n0)]; %单位抽样序列的产生
2. subplot(2,2,4) 画2行2列的第4个图
3. stem(n,x) %输出离散序列,(plot连续)
4. 编写子程序可调用
4.1 单位抽样序列生成函数impseq.m
[x,m]=impseq(n0,ns,nf); %序列的起点为ns,终点为nf,在n=n0点处生成一个单位脉冲
用subplot函数n=[-5:5];x1=3*impseq(2,-5,5)-impseq(-4,-5,5)
x1 =
0 -1 0 0 0 0 0 3 0 0 0
n=[-5:5];x1=3*impseq(2,-4,5)-impseq(-4,-5,4) %起点到终点长度要一致
x1 =
0 -1 0 0 0 0 3 0 0 0
4.2 单位阶跃序列生成函数stepseq.m
[x,n]=stepseq(no,ns,nf) %序列的起点为ns,终点为nf,在n=n0点处生成一个单位阶跃
4.3 两个信号相加的生成函数sigadd.m
[y,n]=sigadd(x1,n1,x2,n2)
4.4 两个信号相乘的生成函数sigmult.m
[y,n]=sigmult(x1,n1,x2,n2)
4.5 序列移位y(n)=x(n-n0)的生成函数sigshift.m
[y,n]=sigshift(x,m,n0)
4.6 序列翻褶y(n)=x(-n)的生成函数sigfold.m
[y,n]=sigfold(x,n)
4.7 evenodd.m函数可以将任一给定的序列x(n)分解为xe(n)和xo(n)两部分
[xe,xo,m]=evenodd(x,n)
4.8 序列从负值开始的卷积conv_m, conv默认从0开始
function [y,ny]=conv_m(x,nx,h,nh)
有{x(n):nx1nnx2},{h(n):nh1nnh2}, 卷积结果序列为{y(n):nx1+nh1nnx2+nh2}
例. 设,,求
程序:
x1=[1,2,3];n1=-1:1;
x2=[2,4,3,5];n2=-2:1;
[y,n]=conv_m(x1,n1,x2,n2)
结果:
y =
2 8 17 23 19 15
n =
-3 -2 -1 0 1 2
因此
计算,得Z反变换
b=1;a=poly([0.9 0.9 -0.9]);
[r,p,k]=residuez(b,a)
结果:
r =
0.2500
0.5000
0.2500
p =
0.9000
0.9000
-0.9000
k =
[]
因此得到
相应的
5. [H,w]=freqz[B,A,M]
计算出M个频率点上的频率响应,存放于H向量中,M个频率存放在w向量中,freqz函数自动将这M个频率点均匀设置在频率范围[0,]之间。若缺省w和M时,函数自动选取512个频率点计算。不带输出向量的freqz函数将自动绘制幅频和相频曲线。
也可[H,w]=freqz(B,A);
plot(w/pi,abs(H)); 绘出幅频特性
6. zplane(z,p)
绘制出列向量z中的零点(以符号o表示)和列向量p中的极点(以符号x表示)以及参考单位圆。
7. 傅里叶变换信号时域和频域变换
连续对应着非周期,离散对应着周期。一个域的离散必然导致另一个域的周期延拓
8. fft和ifft:一维快速傅里叶变换和逆傅里叶变换
X=fft(x,N)
采用FFT算法计算序列向量X的N点DFT,缺省N时,fft函数自动按X的长度计算DFT。当N为2的整数次幂时,fft按基2算法计算,否则用混合基算法。ifft的调用格式类似。
9. fft2和ifft2: 二维快速正傅里叶变换和逆傅里叶变换
(1)Y=fft2(x)
数据二维傅里叶变换参数X是向量fft2(x)相当于fft(fft(x)’)’,即先对X的列做一维傅里叶变换,然后再对变换结果的行作一维傅里叶变换;若X是向量,则此傅里叶变换即变成一维傅里叶变换fft; 若X是矩阵,则是计算该矩阵的二位傅里叶变换。
(2)Y=fft2(X, M, N)
通过对X进行补零或截断,使得X成为(M*N)的矩阵。
函数iff2的参数应用与函数fft2完全相同。
10. czt: 线形调频Z变换
Y=czt(x,m,w,a)
此函数计算由z=a*w.^(-(0:m-1))定义的z平面螺旋线上各点的z变换,a规定了起点,w规定了相邻点的比例,m规定了变换的长度,后三个变量默认值为a=1,w=exp(j*2*pi/m)及m=length(x)因此y=czt(x)就等于y=fft(x).
11. dct和idct:离散余弦正变换和离散余弦逆变换
Y=dct(x,N)
完成如下变换,N的默认值为length(x).
k=0, 1, …,N-1
12. fftshift
Y=fftshift(x)
用来重新排列X=fft(x)的输出,当X为向量时,把X的左右两半进行交换,从而将零频分量移至频谱的中心;如果X为二维傅里叶变换的结果,它同时将X的左右和上下部分进行交换。
13. fftfilt
Y=fftfilt(b,x)
采用重叠相加法FFT对信号向量x快速滤波,得到输出序列向量y,向量b为FIR滤波的单位脉冲相应,h(n)=b(n+1),n=0,1,…,length(b)-1.
Y=fftfilt(b,x,N)
自动选取FFT长度NF=2^nextpow2(N), 输入数据x分段长度M=NF-length(b)+1, 其中nextpow2(N)函数求的一个整数,满足2^(nextpow2(N)-1)<=N<=2^nextpow2(N)
N缺省时,fftfilt自动选择合适的FFT长度NF和对x的分段长度M。
p = nextpow2(A), p 满足 2^p >= abs(A)
L=pow2(nextpow2(M+N-1)) M, N分别为序列延拓周期
14. 用DFT进行谱分析时,必须将序列阶段为长度为N的有限长序列。造成频谱泄露和谱间干扰。泄露使频谱变得模糊,分辨率降低;旁瓣引起不同分量间的干扰。截断效应无法完全消除,可以加宽窗和缓慢截断。矩形窗比海明窗的频率分辨率高(泄漏小),但谱间干扰大,因此海明窗是以牺牲分辨率来换取谱间干扰的降低。
栅栏效应是只能在离散点的地方看到真实的像,其余频谱被遮挡。为减少栅栏效应,可以在时域数据末端增加一些零点,使周期内点数增加,但不改变原有数据,即增加频域抽样点数N,频域抽样为,这样必然使谱线更密,这样原来看不到的谱分量就可能看到了。
15. x=[one(1,5),zero(1,N-5)]; %单位阶跃信号
y = filter(b,a,x) %直接型输出信号
16. N=25;
h=impz(b,a,N) %N次采样,b,a为零极点多项式系数,a不算1
如: %直接型
b=[1,-3,11,27,18];a=[16,12,2,-4,-1]
%级联型
b0=4;B=[1,1,0;1,-1.4142136,1];A=[1.-0.5.0;1.0.9.0.81]
%并联型
C=0;B=[-14,-12;24,26];A=[1,-2,3;1,-1,1]
delta=impseq(0,0,N);
x=[one(1,5),zero(1,N-5)];
h=filter(b,a,delta); %直接型单位脉冲响应
y = filter(b,a,x); %直接型输出信号
h=casfilter(b0,B,A,delta); %级联型单位脉冲响应
h=casfilter(b0,B,A,x); %级联型输出响应
h=parfiltr(C,B,A,delta); %并联型单位脉冲响应
h=parfiltr(C,B,A,x); %并联型输出响应
[b0,B,A]=dir2cas(b,a); %直接型转换成级联型
[b,a]=cas2dir(b0,B,A); %级联型转换成直接型
[C,B,A]=dir2par(b,a); %直接型转换成并联型
[b,a]=par2dir(C,B,A); %并联型转换成直接型
17. buttord.m
用来确定数字低通或模拟低通滤波器的阶次,其调用格式分别是
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论