关注作者了解更多
我的其他CSDN专栏
过程控制系统
工程测试技术
虚拟仪器技术
可编程控制器
工业现场总线
数字图像处理
智能控制
传感器技术
嵌入式系统
复变函数与积分变换
单片机原理
线性代数
大学物理
热工与工程流体力学
数字信号处理
光电融合集成电路技术
电路原理
模拟电子技术
高等数学
概率论与数理统计
数据结构
C语言
模式识别原理
自动控制原理
数字电子技术
关注作者了解更多
资料来源于网络,如有侵权请联系编者
目录
实验一 离散时间信号与系统的时域分析
一、实验目的
二、实验原理
三、实验过程记录
四、结果分析
实验二 离散信号 Z 变换
一、实验目的
二、实验原理
三、离散系统的频率特性
实验三 IIR 滤波器的设计与信号滤波
1、实验目的
2.实验原理
3、实验步骤及内容
实验代码
6实验报告要求
实验四 用窗函数法设计 FIR 数字滤波器
1、实验目的
2、实验原理
3、实验步骤及内容
6实验要求
实验五 用 FFT 作谱分析
1实验目的
2、实验原理
3、实验步骤及内容
实验数据记录
6实验报告要求
实验 6 综合实验
1实验目的
2、实验内容 (三选一)
3实验报告要求
实验一 离散时间信号与系统的时域分析 1
实验二 离散信号 Z 变换 7
实验三 双线性变换法设计 IIR 数字滤波器 19
实验四 用窗函数法设计 FIR 数字滤波器 19
实验五 用 FFT 作谱分析 19
实验六 综合实验 25
实验一 离散时间信号与系统的时域分析
-
一、实验目的
-
1.掌握离散时间信号与系统的时域分析方法。
2.掌握序列傅氏变换的计算机实现方法,利用序列的傅氏变换对离散信号、系统及系 统响应进行频域分析。
3.熟悉理想采样的性质,了解信号采样前后的频谱变化,加深对采样定理的理解。
二、实验原理
实现2.离散时间系统的单位脉冲响应3连续时间信号的采样,绘制单位脉冲序列,绘制单位阶跃序列,绘制理想采样序列,绘制正弦序列,分析特性
-
三、实验过程记录
- 1单位脉冲序列
-
clear all; clc; n1=-5;n2=5;n0=0; n=n1:n2;%自变量 x=[n==n0];%因变量,利用大括号判断里面的表达式是否成立,如果成立则函数有效,有数值 %否侧函数无效,没有数值 stem(n,x,'filled');%利用filled绘制实心火柴梗 axis([n1,n2,0,1.1*max(x)]);%绘制坐标系 xlabel('(n)');ylabel('幅度x(n)'); title('单位脉冲序列');
2单位冲激序列
clear all
n = 40;
x = ones(1,n);
xn = 0:n-1;
subplot(211);
stem(xn,x);
grid on
axis([-1 51 0 1.1]);
title('单位阶跃序列u(n)')
ylabel('u(n)');
xlabel('n');
x = [zeros(1,10),1,ones(1,29)];
subplot(212);
stem(xn,x);
grid on
axis([-1 51 0 1.1]);
title('单位跃迁序列u(n-10)')
ylabel('u(n-10)');
xlabel('n');
3正弦序列
clear all
n = 0:59;
x = sin(pi/7*n);
stem(n,x);
ylabel('x(n)');
xlabel('n');
title('正弦序列')
axis([0 40 -1.5 1.5]);
grid on;
4理想采样序列
%绘制理想采样信号序列
%给定信号参数
A = 200;
alpha = 50*pi;
T = 1/10000;
Omega = 260*pi;
n = 0:1:100;
%计算信号在不同时刻的值
x = A.*exp(-alpha.*n.*T).*cos(Omega.*T.*n);
figure %绘制理想采样信号序列
stem(x,'g') %绘制单位抽样序列
%修改时间坐标值,保证信号0时刻的值为1,添加图的坐标含义标题等信息
set(gca, 'XTick', 1:101);
set(gca,'XTickLabel',0:100);
title('(d) Desired sampled signal')
grid on
xlabel('Time index n')
ylabel('Amplitude')
axis([1 101 -200 200]) %规范坐标轴范围
hold on
%给定信号参数
A = 100;
alpha = 0.4;
T = 1/1000;
Omega = 700*pi;
n = 0:100;
%计算信号在不同时刻的值
xx = A.*exp(-alpha.*n.*T).*cos(Omega.*T.*n);
%绘制修改参数后的理想采样信号序列
stem(xx,'b') %绘制单位抽样序列
改变参数A=1,a =0.4, W =700p ,产生理想采样信号序列 x n( ) 。
代码:
%给定信号参数
A = 1;
alpha = 0.4;
T = 1/10000;
Omega = 700*pi;
n = 0:1:100;
%计算信号在不同时刻的值
x = A.*exp(-alpha.*n.*T).*cos(Omega.*T.*n);
figure %绘制理想采样信号序列
stem(x,'g') %绘制单位抽样序列
%修改时间坐标值,保证信号0时刻的值为1,添加图的坐标含义标题等信息
set(gca, 'XTick', 1:101);
set(gca,'XTickLabel',0:100);
title('(d) Desired sampled signal')
grid on
xlabel('Time index n')
ylabel('Amplitude')
axis([1 101 -200 200]) %规范坐标轴范围
hold on
%给定信号参数
A = 100;
alpha = 0.4;
T = 1/1000;
Omega = 700*pi;
n = 0:100;
%计算信号在不同时刻的值
xx = A.*exp(-alpha.*n.*T).*cos(Omega.*T.*n);
%绘制修改参数后的理想采样信号序列
stem(xx,'b') %绘制单位抽样序列
>>结果截图
5.实指数序列
clear all
n = 0:20;
x1 = 1.3.^n;
x2 = (-1.3).^n;
x3 = 0.8.^n;
x4 = (-0.8).^n;
subplot(221)
stem(n,x1,'fill')
grid on;
ylabel('x1(n)');
xlabel('n');
title('x1 = 1.6^n')
subplot(222)
stem(n,x2,'fill')
grid on;
ylabel('x2(n)');
xlabel('n');
title('x2 = (-1.6)^n')
subplot(223)
stem(n,x3,'fill')
grid on;
ylabel('x3(n)');
xlabel('n');
title('x1 = 0.8^n')
subplot(224)
stem(n,x4,'fill')
grid on;
ylabel('x4(n)');
xlabel('n');
title('x1 = 1(-0.8)^n')
四、结果分析
分别绘制了单位脉冲序列,单位阶跃序列,正弦序列,理想采样的指数正弦序列,改变参数后的理想采样正弦序列,实指数序列等图像
实验二 离散信号 Z 变换
-
一、实验目的
1、熟悉离散信号 Z 变换的原理及性质
2、熟悉常见信号的 Z 变换
3、了解正/反 Z 变换的 MATLAB 实现方法
4、了解离散信号的 Z 变换与其对应的理想抽样信号的傅氏变换和拉氏变换之间的关系
5、了解利用 MATLAB 实现离散系统的频率特性分析的方法
二、实验原理
实验过程记录
一、正/反 Z 变换
代码:
clc;
clear;
close all;
%%
% Example 1 for the Z transform
syms n % Define the temporal independent variable represented by the mathmatical symbols.
f = 0.5^n; % Define the sequence in the time domain.
Fz = ztrans(f); % Perform z transform based on the function ztrans.
disp(Fz); % Print the output.
%%
% Example 2 for the Z transform
syms z % Define the independent variable in the complex frequency domain.
Fz = 2*z/(2*z - 1); % Define the z transform in the complex frequency domain.
f = iztrans(Fz); % Perform inverse z transform based on the function iztrans.
disp(f); % Print the output
%%
% Example 3 for the Z transform
syms n % Define the independent variable
hn = kroneckerDelta(n, 1) + kroneckerDelta(n, 2) + kroneckerDelta(n,3); %Define the sequence in the time domain
disp(hn)
Hz = ztrans(hn); % Perform the z transform
disp(Hz)
Hz = simplify(Hz); % Simplify the expression of the H(z)
disp(Hz)
运行结果:
z/(z - 1/2)
(1/2)^n
kroneckerDelta(n - 1, 0) + kroneckerDelta(n - 2, 0) + kroneckerDelta(n - 3, 0)
1/z + 1/z^2 + 1/z^3
(z^2 + z + 1)/z^3
-
三、离散系统的频率特性
-
代码:
%Example 4
a = [1,0]; % Define the coefficients of the denominator polynomial
b = [1,-0.5]; % Define the coefficients of the numerator polynomial
[H,omega] = freqz(b,a,10); % Compute the frequency response of the transfer function
disp(H)
disp(omega)
%%
%Example 5
a = [1,0]; % Define the coefficients of the denominator polynomial
b = [1,-0.5]; % Define the coefficients of the numerator polynomial
[H,omega] = freqz(b,a,200,'whole'); % Compute the frequency response of the transfer function
disp(H)
disp(omega)
Ha = abs(H); % Amplitude
Ph = angle(H); % Phase
运行结果:
求点代码如上
绘图代码
figure
subplot(2,1,1)
plot(omega,Ha)
hold on
set(gca, 'XTick', 0:pi/10:2*pi);
set(gca,'XTickLabel',0:pi/10:2*pi);
title('(a) Amplitude-frequency response')
grid on
xlabel('omega')
ylabel('Amplitude')
axis([0 2*pi 0.5 1.5])
grid on
subplot(2,1,2)
plot(omega,Ph)
set(gca, 'XTick', 0:pi/10:2*pi);
set(gca,'XTickLabel',0:pi/10:2*pi);
title('(a) Phase-frequency response')
grid on
xlabel('omega')
ylabel('Phase')
axis([0 2*pi -0.6 0.6])
grid on
运行结果
三、实验内容
代码:
syms z; % Define the independent variable
F1z = (z^2+z+1)/(z^2+z-2);
f1 = iztrans(F1z); % Perform the inverse z transform
disp(f1)
运行结果:
(-2)^n/2 - kroneckerDelta(n, 0)/2 + 1
题目二
代码:
syms z;Flz=(z^4+z^3+z^2+z+1)/(z^4);fl=iztrans(Flz);disp(fl)
结果:
kroneckerDelta(n - 1, 0) + kroneckerDelta(n - 2, 0) + kroneckerDelta(n - 3, 0) + kroneckerDelta(n - 4, 0) + kroneckerDelta(n, 0)
题目三;
代码
syms z;Flz=(2*z^2+6*z+12)/(z^4);fl=iztrans(Flz);disp(fl)
结果:
2*kroneckerDelta(n - 2, 0) + 6*kroneckerDelta(n - 3, 0) + 12*kroneckerDelta(n - 4, 0)
5.实验要求
六.实验感想
通过Z变换和Z反变换,熟悉了MATLAB的使用
实验三 IIR 滤波器的设计与信号滤波
1、实验目的
(1)熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。
(2)掌握数字滤波器的计算机仿真方法。
(3)通过观察对实际心电图信号的滤波作用,获得数字滤波的感性知识
2.实验原理
3、实验步骤及内容
实验代码
用双线性变换法设计Butterworth低通数字滤波器,要求通带频率为 ,通带波纹小于1dB,阻带频率为 ,幅度衰减大于15dB,采样频率为Fs=100Hz。
clc;
%写出已知条件,设置采样点数
wp=0.25*pi;ws=0.4*pi;
rp=1;as=15;
fs=2000;Nn=128;
%由数字指标映射到模拟滤波器指标
WP=wp*fs;WS=ws*fs;
%利用巴特沃斯滤波器的设计方法,设计一个模拟滤波器
[N,Wn]=buttord(WP,WS,rp,as,'s');
[z,p,k]=buttap(N);
[B,A]=zp2tf(z,p,k);
%转换到数字滤波器
[b,a]=lp2lp(B,A,Wn);%从一个低通原型变换为具有不同截止频率的低通滤波器
[bz,az]=impinvar(b,a,fs);%根据冲激响应不变法得到数字滤波器
freqz(bz,az,Nn,fs);
WS=2*fs*tan(ws/2);
WP=2*fs*tan(wp/2);
[bz,az]=bilinear(b,a,fs);
freqz(bz,az,Nn,fs);[H,w]=freqz(bz,az);
figure;
subplot(211);
plot(w/pi,abs(H));
subplot(212);
plot(w/pi,angle(H));
运行结果
6实验报告要求
7实验感想
通过IIR滤波器的设计,熟悉了MATLAB的使用
实验四 用窗函数法设计 FIR 数字滤波器
1、实验目的
(1)掌握用窗函数法设计 FIR 数字滤波器的原理和方法。
(2)熟悉线性相位 FIR 数字滤波器特性。
(3)了解各种窗函数对滤波特性的影响
2、实验原理
、
3、实验步骤及内容
实验代码:
1设计滤波器,采用汉明窗,长度41(阶数40),采样频率2000hz:
clear all; close all; clc;
% 滤波器长度
N=41;
%采样频率
fs=2000;%各种滤波器的特征频率
fc_lpf=200;
fc_hpf=200;
fp_bandpass=[200 400];
fc_stop=[200 400];%以采样频率的一般,对频率归一化
wn_lpf=fc_lpf*2/fs;
wn_hpf=fc_hpf*2/fs;
wn_bandpass=fp_bandpass*2/fs;
wn_stop=fc_stop*2/fs;%采用fir1函数设计FIR滤波器
b_lpf=fir1(N-1,wn_lpf);
b_hpf=fir1(N-1,wn_hpf,'high');
b_bandpass=fir1(N-1,wn_bandpass,'bandpass');
b_stop=fir1(N-1,wn_stop,'stop');%求幅频响应
m_lpf=20*log(abs(fft(b_lpf)))/log(10);
m_hpf=20*log(abs(fft(b_hpf)))/log(10);
m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);
m_stop=20*log(abs(fft(b_stop)))/log(10);% 设置频率响应的横坐标单位为hz
x_f=0:(fs/length(m_lpf)):fs/2;% 单位脉冲响应
subplot(4,2,1);stem(b_lpf);xlabel('n');ylabel('h(n)');legend('lpf');
subplot(4,2,3);stem(b_hpf);xlabel('n');ylabel('h(n)');legend('hpf');
subplot(4,2,5);stem(b_bandpass);xlabel('n');ylabel('h(n)');legend('bandpass');
subplot(4,2,7);stem(b_stop);xlabel('n');ylabel('h(n)');legend('stop');% 幅频响应
subplot(4,2,2);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('lpf')
subplot(4,2,4);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('hpf')
subplot(4,2,6);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('bandpass')
subplot(4,2,8);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('stop');
仿真脉冲响应和幅频响应图
6实验要求
7.实验感想
通过FIR滤波器设计,熟悉了MATLAB的使用
实验五 用 FFT 作谱分析
1实验目的
(1)进一步加深 DFT 算法原理和基本性质的理解(因为 FFT 只是 DFT 的一种快速算法,所 以 FFT 的运算结果必然满足 DFT 的性质)
(2)熟悉 FFT 算法原理及子程序的应用。
(3)掌握用 FFT 对连续信号和时域离散信号进行频谱分析的基本方法。了解可能出现的分 析误差和原因,以便在实际中正确应用 FFT。
2、实验原理
3、实验步骤及内容
实验数据记录
%《数字信号处理(第4版)》第10章实验2程序exp2a.m
% 西安电子科技大学出版社出版 高西全 丁玉美 合著 2016年
% 时域采样理论验证
Tp=64/1000;
%产生M长采样序列x(n)
% Fs=1000;T=1/Fs;
Fs=1000;T=1/Fs;
M=Tp*Fs;n=0:M-1;
A=444.128;alph=pi*50*2^0.5;omega=pi*50*2^0.5;
xnt=A*exp(-alph*n*T).*sin(omega*n*T);
Xk=T*fft(xnt,M); %M点FFT[xnt)]
yn='xa(nT)';
subplot(3,2,1);tstem(xnt,yn);box on;title('(a) Fs=1000Hz');
k=0:M-1;fk=k/Tp;
subplot(3,2,2);plot(fk,abs(Xk));title('(a) T*FT[xa(nT)],Fs=1000Hz');
xlabel('f(Hz)');
ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))])
% Fs=300;T=1/Fs;
Fs=300;T=1/Fs;
M=ceil(Tp*Fs);n=0:M-1;
xnt=A*exp(-alph*n*T).*sin(omega*n*T);
Xk=T*fft(xnt,M); %M点FFT[xnt)]
yn='xa(nT)';
subplot(3,2,3);tstem(xnt,yn);box on;title('(b) Fs=300Hz');
k=0:M-1;fk=k/Tp;
subplot(3,2,4);plot(fk,abs(Xk));title('(b) T*FT[xa(nT),Fs=300Hz');
xlabel('f(Hz)');ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))])
% Fs=200;T=1/Fs;
Fs=200;T=1/Fs;
M=ceil(Tp*Fs);n=0:M-1;
xnt=A*exp(-alph*n*T).*sin(omega*n*T);
Xk=T*fft(xnt,M); %M点FFT[xnt)]
yn='xa(nT)';subplot(3,2,5);tstem(xnt,yn);box on;title('(c) Fs=200Hz');
k=0:M-1;fk=k/Tp;
subplot(3,2,6);plot(fk,abs(Xk));title('(c) T*FT[xa(nT),Fs=200Hz');
xlabel('f(Hz)');ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))])
先对下列序列进行谱分析,
选择FFT的变换区间N为8和16两种情况进行频谱分析。分别打印其幅频特性曲线,并进行对比、分析和讨论。
对于第一个序列
对于第2个序列
对于第3个序列
对下列周期序列进行频谱分析:
选择FFT的变换区间N为8和16两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线,并进行对比、分析和讨论。
对于第4个序列
对于第5个序列
对模拟周期信号进行频谱分析:
选择采样率Fs=64Hz,对变换区间N=16,32,64三种情况进行谱分析。分别打印其幅频特性,并进行分析和讨论。
对于第6个序列
6实验报告要求
内容总结
图1a和1b说明x1(n)=R4(n)的8点DFT和16点DFT分别是x1(n)的频谱函数的8点采样和16点采样,图2a和图3a表明x3(n)=x2(n+3)8R8(n)的8点DFT的模相等,但是当N=16时,x3(n)与x2(n)不满足位移关系,所以导致2b和3b的模不相同。
x4(n)的周期为8,所以N=8和N=16是其周期的整数倍,得到正确的单一频率正弦波的频谱,仅在0.25Π处有1跟单一谱线,如图4a和4b所示。
X5(n)的周期为16,所以N=8时,得到的频谱不正确,如5a所示。当N=16时,为其周期的整数倍,故能得到正确的频谱,在0.25Π和0.125Π处有两根单一谱线,如图5b所示。
x6(n)有三个频率成分,f1=4hz,f2=8hz,f3=10hz。所以x6(n)的周期为0.5,采样频率Fs=64Hz = 16f1 = 8f2 = 6.4f3。变换区间N=16时,观察时间Tp = 16T = 0.25s,不是x6(t)的整数倍周期,所以所得频谱不正确,如图6a所示。变换区间N=32,64时,观察时间Tp=0.5s,1s,是x6(t)的整数周期,所以所得频谱正确,如图6b和6c所示。图中3根谱线正好位于4Hz,8Hz,10Hz处。变换区间N=64时频谱幅度是变换区间N=32时2倍.
通过以上实验进一步论证了当周期信号的频谱是离散谱,只有用整数倍周期的长度做FFT,得到的离散谱才能代表周期信号的频谱。
实验 6 综合实验
1实验目的
(1)了解语音信号的获取及基本处理
(2)给定设计指标,能选用多种方法设计出符合指标要求的滤波器。
(3)掌握各种设计方法的原理,步骤以及特点。
(4)培养学生实际应用及综合设计的能力。
2、实验内容 (三选一)
二.设计一个数字带通滤波器
采用FIR函数设计滤波器
clear all; close all; clc;
% 滤波器长度
N=41;
%采样频率
fs=2000;%各种滤波器的特征频率
fc_lpf=200;
fc_hpf=200;
fp_bandpass=[200 400];
fc_stop=[200 400];%以采样频率的一般,对频率归一化
wn_lpf=fc_lpf*2/fs;
wn_hpf=fc_hpf*2/fs;
wn_bandpass=fp_bandpass*2/fs;
wn_stop=fc_stop*2/fs;%采用fir1函数设计FIR滤波器
b_lpf=fir1(N-1,wn_lpf);
b_hpf=fir1(N-1,wn_hpf,'high');
b_bandpass=fir1(N-1,wn_bandpass,'bandpass');
b_stop=fir1(N-1,wn_stop,'stop');%求幅频响应
m_lpf=20*log(abs(fft(b_lpf)))/log(10);
m_hpf=20*log(abs(fft(b_hpf)))/log(10);
m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);
m_stop=20*log(abs(fft(b_stop)))/log(10);% 设置频率响应的横坐标单位为hz
x_f=0:(fs/length(m_lpf)):fs/2;% 单位脉冲响应
subplot(4,2,1);stem(b_lpf);xlabel('n');ylabel('h(n)');legend('lpf');
subplot(4,2,3);stem(b_hpf);xlabel('n');ylabel('h(n)');legend('hpf');
subplot(4,2,5);stem(b_bandpass);xlabel('n');ylabel('h(n)');legend('bandpass');
subplot(4,2,7);stem(b_stop);xlabel('n');ylabel('h(n)');legend('stop');% 幅频响应
subplot(4,2,2);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('lpf')
subplot(4,2,4);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('hpf')
subplot(4,2,6);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('bandpass')
subplot(4,2,8);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(hz)');ylabel('幅度(db)','fontsize',8);legend('stop');
脉冲仿真响应和幅频响应图
设计带通滤波器
% 定义截止频率和阻尼比
omega_0 = 10;
xi = 0.707;% 创建二阶低通滤波器传递函数模型
H_second_order_lowpass = tf(omega_0^2, [1, 2*xi*omega_0, omega_0^2]);% 创建二阶高通滤波器传递函数模型
H_second_order_highpass = tf([1, 0, 0], [1, 2*xi*omega_0, omega_0^2]);% 创建二阶带通滤波器传递函数模型
H_second_order_bandpass = tf([2*xi*omega_0, 0], [1, 2*xi*omega_0, omega_0^2]);% 创建二阶带阻滤波器传递函数模型
H_second_order_bandstop = tf([1, 0, omega_0^2], [1, 2*xi*omega_0, omega_0^2]);% 创建第一个图:对比二阶低通和高通滤波器的频率响应曲线
figure;
subplot(1,2,1);
bode(H_second_order_lowpass, 'b', H_second_order_highpass, 'r');
grid on;
legend('Lowpass', 'Highpass');
title('二阶滤波器:低通、高通');% 创建第二个图:对比二阶带通和带阻滤波器的频率响应曲线
subplot(1,2,2);
bode(H_second_order_bandpass, 'g', H_second_order_bandstop, 'm');
grid on;
legend('Bandpass', 'Bandstop');
title('二阶滤波器:带通、带阻');
仿真曲线:
3实验报告要求
(1)简述实验目的。
(2)编程实现各实验内容,列出实验清单及说明。
(3)总结实验结论并写出实验收获或感想
4.实验感想
掌握了低通,高通,带通滤波器的基本设计思想,熟悉了MATLAB的使用。