数字信号处理
复习
实验1
matlab相关语法
figure函数:用于创建数据窗口
subplot函数:h = subplot(m,n,p)figure划分为m×n块,在第p块创建坐标系,并返回它的句柄
stem函数用于显示茎秆图
abs(x)函数是对数组元素进行绝对值处理,或者求复数的幅值
angle函数:求复数相角
matlab如何绘制幅频特性曲线?
幅频:
专门用于求离散系统频响特性的函数freqz(),调用freqz()的格式有以下几种:
(1)[H,w]=freqz(B,A,N); %N默认值为512
(2)[H,w]=freqz(B,A,N,‘whole’);
(3)[H,w]=freqz(B,A,[自定义区间]);
(1)式调用默认区间 0:pi
(2)式调用主值区间 -pi:pi
(3)式自定义区间,如[0:2pi/n:2pi]
最后利用abs()和angle()函数及plot()函数,即可绘制出系统在频率区间的频响曲线。,
混叠与泄露现象
混叠是由于对连续信号x(t)的采样不满足采样定理,即fs<2fh,使频谱产生失真
什么是泄露?
信号将被截断为帧,倘若信号截断的长度不为原始正弦信号周期的整数倍,那么,截断后的信号则不为周期信号。由于信号的非周期截断,导致频谱在整个频带内发生了拖尾现象。这是非常严重的误差,称为泄漏,是数字信号处理所遭遇的最严重误差。
实验2
matlab相关语法
fft函数:对于时间离散序列x,y=fft(x,N),N是序列x参与fft运算的点的个数,返回序列y的长度也为N
tic和toc函数:tic函数会记录起始时刻,toc函数会自动计算时间差,自动输出
unwrap函数:一般和angle配合使用
ph0=angle(s)*180/pi=[10 150 -90]
ph1=unwrap(angle(s))*180/pi=[10 150 270]
nextpow2函数:
2^nextpow2(320)=512
2^nextpow2(128)=128
FFT
什么是循环卷积
https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E5%8D%B7%E7%A7%AF/16600419#1
matlab如何直接时域线性卷积和FFT求线性卷积,圆周卷积
matlab直接求线性卷积和FFT求线性卷积
圆周卷积matlab写法
注意:线性卷积和圆周卷积并没有想象中的那么大区别
——————————————————————————
实验一
n=0:1:15;
%初始化数据
a=0.1;
f1=0.0625;
%改变的频率
f2=0.4375;
f3=0.5625;
xb1=exp(-a*n).*sin(2*pi*f1*n);
figure
subplot(3,2,1);
%绘制时域茎杆图
stem(n,xb1,'.');
title('f=0.0625的时域特性');
xlabel('n');
ylabel('xb1(n)');
grid on;
%绘制频域特性曲线
[H,w]=freqz(xb1,1,[],'whole',1);
Hamplitude=abs(H);
subplot(3,2,2);
plot(w,Hamplitude);
title('f=0.0625的幅频响应');
xlabel('w/(2*pi)');
ylabel('|H(exp(jw))|');
grid on;
%改变频率为0.4375,其余一样
xb2=exp(-a*n).*sin(2*pi*f2*n);
subplot(3,2,3);
stem(n,xb2,'.');
title('f=0.4375的时域特性');
xlabel('n');
ylabel('xb2(n)');
grid on;
[H,w]=freqz(xb2,1,[],'whole',1);
Hamplitude=abs(H);
subplot(3,2,4);
plot(w,Hamplitude);
title('f=0.4375的幅频响应');
xlabel('w/(2*pi)');
ylabel('|H(exp(jw))|');
grid on;
%改变频率为0.5625,其余一样
xb3=exp(-a*n).*sin(2*pi*f3*n);
subplot(3,2,5);
stem(n,xb3,'.');
title('f=0.5625的时域特性');
xlabel('n');
ylabel('xb3(n)');
grid on;
[H,w]=freqz(xb3,1,[],'whole',1);
Hamplitude=abs(H);
subplot(3,2,6);
plot(w,Hamplitude);
title('f=0.5625的幅频响应');
xlabel('w/(2*pi)');
ylabel('|H(exp(jw))|');
grid on;
实验二
%利用自己定义的线性卷积函数直接求线性卷积和FFT求线性卷积,进行时间对比
N=16;
n=0:1:15;
p=8;q=2;
a=0.1;f=0.0625;
xa=exp(-((n-p).^2)./q);
xb=exp(-a*n).*sin(2*pi*f*n);
%自己定义的函数直接卷积
tic
[y1,ny1]=conv_self(xa,16,xb,16);
toc
%FFT求线性卷积,进行时间对比
X1=fft(xa,2*16-1);
H1=fft(xb,2*16-1);
Y5=X1.*H1;
tic
y=ifft(Y5);
toc
figure(2)
stem(y);
title("FFT线性卷积");
%自己定义的直接卷积函数
function[y,ny]=conv_self(x,nx,h,nh)
ny=nx+nh-1;
for n=1:ny
y(n)=0;
for m=1:nh
k=n-m+1;
if(k>=1&k<=nx)
y(n)=y(n)+h(m)*x(k);
end
end
end
figure(1)
n=0:1:ny-1;
xx=0:nx-1;
hh=0:nh-1;
subplot(311);
stem(xx,x,'.');
title('xa序列');
grid;
subplot(312);
stem(hh,h,'.');
title('xb序列');
grid;
subplot(313);
stem(n,y,'.');
title('调用自定义的线性卷积函数后的线性卷积序列');
grid;
end
%自己定义的圆周卷积,非FFT
%线性卷积和圆周卷积相等的条件:N>=n1+n2
function [y,ny]=circonv(xa,na,xb,nb,N)
y=ones(1,N);
x1=ones(1,N);
x2=ones(1,N);
ny=min(na)+min(nb):min(na)+min(nb)+N-1消除图像偏移量
for i=1:N
if(i<=length(xa))
x1(i)=xa(i);
else
x1(i)=0;
end
end
for i=1:N
if(i<=length(xb))
x2(i)=xb(i);
else
x2(i)=0;
end
end
for i=1:N
y(i)=0;
for j=1:N
if j<=i
y(i)=y(i)+x1(j)*x2(i+1-j);
else
y(i)=y(i)+x1(j)*x2(N+i+1-j);
end
end
end
%利用上面函数求圆周卷积
[y1,ny1]=circonv(xa,16,xb,16,16);
figure(3);
stem(ny1,y1);
%FFT圆周卷积
%线性卷积和圆周卷积相等的条件:N>=n1+n2
%FFT圆周卷积16点
N=16;
n=0:1:15;
p=8;q=2;
a=0.1;f=0.0625;
xa=exp(-((n-p).^2)./q);
xb=exp(-a*n).*sin(2*pi*f*n);
tic
y=ifft(fft(xa,16).*fft(xb,16));
toc
figure(2)
stem(y);
title("FFT的16点圆周卷积");