数字信号处理matlab相关实验

本文详细介绍了数字信号处理中的关键概念,包括幅频特性曲线绘制、混叠与泄露现象、线性卷积与循环卷积的MATLAB实现。通过具体实验,展示了如何使用MATLAB函数如freqz(), fft()进行信号分析与处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复习

实验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

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点圆周卷积");



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值