实验一:数字信号的 FFT 分析
1、实验内容及要求
(1) 离散信号的频谱分析:
设信号
此信号的0.3pi 和 0.302pi两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度N和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。
(2) DTMF 信号频谱分析
用计算机声卡采用一段通信系统中电话双音多频(DTMF)拨号数字 0~9的数据,采用快速傅立叶变换(FFT)分析这10个号码DTMF拨号时的频谱。
2、实验目的:
通过本次实验,应该掌握:
(a) 用傅立叶变换进行信号分析时基本参数的选择。
(b) 经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT) 后信号频谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都是离散的。
(c) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
(e) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和MPEG Audio。
3、实验过程及结果:
(1)离散信号的频谱分析:
(a)代码:
N=5000;
n=[0:1:N-1];
x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-1/4*pi);
f=abs(fft(x,N));
semilogy(n/N*2,f);
axis([0.29 0.46 0 10^5]);
(b)结果:
(2) DTMF 信号频谱分析
(a)代码:
x=wavread('sound.wav');
n=0:1:8799;
subplot(2,1,1);plot(n,x);
title('音频信号波形');xlabel('n');
X=fft(x,8800);magX=abs(X(1:1:8800));
w=2*pi/8800*n;
subplot(2,1,2);stem(w/pi,magX);title('音频信号的FFT');
xlabel('frequency in pi units')
axis([0,1,0,2500])
(b)结果:
实验二: DTMF 信号的编码
1、实验内容及要求
1)把您的联系电话号码通过DTMF 编码生成为一个 .wav 文件。
³ 技术指标:
± 根据 ITU Q.23 建议,DTMF 信号的技术指标是:传送/接收率为每秒 10 个号码,或每个号码 100ms。
± 每个号码传送过程中,信号存在时间至少 45ms,且不多于 55ms,100ms 的其余时间是静音。
± 在每个频率点上允许有不超过±1.5% 的频率误差。任何超过给定频率±3.5% 的信号,均被认为是无效的,拒绝接收。
(其中关键是不同频率的正弦波的产生。可以使用查表方式模拟产生两个不同频率的正弦波。正弦表的制定要保证合成信号的频率误差在±1.5%以内,同时使取样点数尽量少)
2)对所生成的DTMF文件进行解码。
³ DTMF 信号解码可以采用 FFT 计算 N 点频率处的频谱值,然后估计出所拨号码。但 FFT计算了许多不需要的值,计算量太大,而且为保证频率分辨率,FFT的点数较大,不利于实时实现。因此,FFT 不适合于 DTMF 信号解码的应用。
³ 由于只需要知道 8 个特定点的频谱值,因此采用一种称为 Goertzel 算法的 IIR 滤波器可以有效地提高计算效率。其传递函数为:
³
2、实验目的
(a)复习和巩固 IIR 数字滤波器的基本概念;
(b)掌握 IIR 数字滤波器的设计方法;
(c)掌握 IIR 数字滤波器的实现结构;
(d)能够由滤波器的实现结构分析滤波器的性能(字长效应);
(e)了解通信系统电话 DTMF 拨号的基本原理和 IIR 滤波器实现方法。
3、实验过程及结果:
(a)代码:
clear
clc
d=input('请键入电话号码 ','s');
sum=length(d);
fs=8000;
tm=[49,50,51;52,53,54;55,56,57;0,48,0];
buf=[];
total_x=[];
sum_x=[];
sum_x=[sum_x,zeros(1,800)];
for i=1:sum
num=d(i)-48+1;
f1=[1336,1209,1336,1477,1209,1336,1477,1209,1336,1477];
f2=[941,697,697,697,770,770,770,852,852,852];
n=1:400;
x=sin(2*pi*n*f1(num)/fs) + sin(2*pi*n*f2(num)/fs);
x=[x,zeros(1,400)];
sum_x=sum_x+x;
total_x=[total_x,x];
end
wavwrite(total_x,'num_sound')
sound(total_x);
plot(total_x);
title('电话号码时域波形')
k = [18 20 22 24 31 34 38 42];
N=205;
for a=1:sum
m=800*(a-1);
X=goertzel(total_x(m+1:m+N),k+1);
val = abs(X);
figure(2)
subplot(2,6,a);
stem(k,val,'.');
grid;xlabel('k');ylabel('|X(k)|')
set(gcf,'color','w') ;
limit = 80;
for c=5:8;
if val(c) > limit, break, end
end
for l=1:4;
if val(l) > limit, break, end
end
buf(a)=tm(l,c-4);
end
disp(['接收端检测到的号码'])
disp(setstr(buf))
(b)结果:
实验三:FIR 数字滤波器的设计和实现
1、实验内容及要求:
³ 录制自己的一段声音,长度为 45秒,取样频率 32kHz,然后叠加一个高斯白噪声,使得信噪比为 20dB。请采用窗口法设计一个 FIR 带通滤波器,滤除噪声提高质量。
n 提示:
³ 滤波器指标参考:通带边缘频率为 4kHz,阻带边缘频率为4.5kHz,阻带衰减大于 50dB;
³ Matlab 函数 y = awgn(x,snr,'measured') ,首先测量输入信号 x 的功率,然后对其叠加高斯白噪声;
2、实验目的
³ 通过本次实验,掌握以下知识:
± FIR 数字滤波器窗口设计法的原理和设计步骤;
± Gibbs 效应发生的原因和影响;
± 不同类型的窗函数对滤波效果的影响,以及窗函数和长度 N 的选择。
3、实验过程及结果:
(a)代码:
[x1,fs,bits]=wavread('jin.wav');
xinzaobi=20;
x2=awgn(x1,xinzaobi,'measured'); wavwrite(x2,43000,16,'jin1.wav');
t=0:1/fs:(size(x2)-1)/fs;
wp=8000*pi/43000;
ws=9000*pi/43000;
wdelta=ws-wp;
N=ceil(11*pi/wdelta);
wn=(ws+wp)/2;
b=fir1(N,wn/pi,blackman(N+1));
figure(1)
freqz(b,1,512)
x3=filter(b,1,x2);
figure(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前时域波形');
subplot(2,1,2)
plot(t,x3);
title('滤波后时域波形');
F0=fft(x3,1024);
f=fs*(0:511)/1024;
figure(3)
y2=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:512)));
title('滤波前频谱')
xlabel('Hz');
ylabel('幅度');
subplot(2,1,2)
F2=plot(f,abs(F0(1:512)));
title('滤波后频谱')
xlabel('Hz');
ylabel('幅度');
wavwrite(x3,43000,16,'jin2.wav');
(b)结果:
实验总结:
通过这次matlab仿真实验,了解了matlab在数字信号处理中的相关应用,可以说是让自己对matlab的功能有了进一步的认知。感觉matlab的功能确实非常强大,最直接的感受就是把加了噪声的音频信号通过滤波器后去除噪声,音频信号又“完美”地播放出来,没有噪声了。自己也对数字滤波器有了一个的认识,之前学习过模拟滤波器,也做过相关实验,感觉数字滤波器确实比较“节省成本”—不需要电容、电感。还有经过DSP硬件实验,也了解了通过DSP芯片如何实现数字滤波器,觉得数字滤波器的效果还是很好的。
下面是对各个实验的小结:
实验1: 学习了傅立叶变换进行信号分析时基本参数的选择,离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。学习了采用快速傅立叶变换(FFT)分析电话多频(DTMF)拨号的相关分析方法。
实验2:学会了将电话号码通过DTMF 编码生成为一个 .wav 文件,对所生成的DTMF文件进行解码,了解通信系统电话 DTMF 拨号的基本原理和 IIR 滤波器实现方法。
实验3:了解了FIR 数字滤波器窗口设计法的原理和设计步骤;Gibbs 效应发生的原因和影响;不同类型的窗函数对滤波效果的影响,以及窗函数和长度 N 的选择。
第二篇:MATLAB实验报告(四份!!!)
MATLAB 实验报告
实验一 基本操作和简单语句输入
一 实验环境 计算机 MATLAB软件
二 实验目的 1.熟悉MATLAB的命令窗口。
2.掌握MATLAB一些基本操作,能进行一般的数值计算。
3.实现语句的重调和修改 。
三 预备知识 1.MATLAB的窗口组成 MATLAB主窗口中,层叠平铺了Command window(命令窗口),Launch pad(发射台),Workspace(工作空间),Command history(命令历史记录),Current directory(当前目录)等子窗口。
2.命令窗口菜单栏 单击菜单栏上的“File”选项,就会弹出下拉菜单New,Open等
四 实验内容与步骤
1.启动MATLAB
2.观察MATLAB窗口的各个组成部分
1) 了解菜单栏各菜单功能,用鼠标打开MATLAB各个菜单,在状态栏里显示当前鼠标所指的菜单项的含义。
2) 用鼠标指向常用工具栏的每个工具按钮,了解其含义。
3.命令窗口的打开和关闭。
(1)查看菜单窗口中有哪些菜单命令。
(2)在命令窗口中输入命令a=3;b=4;y=a*b+a/b,然后回车,查看命令显示结果。
(3)利用MATLAB中编辑命令行时常用的按键功能,调出一个语句,对它进行修改,并把运行结果复制到word中保存。
(4)关闭命令窗口。
(5)打开命令窗口。
4.使用MATLAB帮助
5.在命令窗中输入demo,将出现MATLAB演示窗,对MATLAB功能进行一次浏览。
五 练习
1. 调出MATLAB/stateflow的演示示例。
This is a demonstration of some aspects of the MATLAB language.
First,let us create a simple vector with 9 elements called a.a=[1 2 3 4 6 4 3 4 5]
So a=
1 2 3 4 6 4 3 4 5
Now let us add 2 to each element of our vector, a, and store the result in a new vector.
Notice how MATLAB requires no special handling of vector or matrix math.b=a+2
So b=
3 4 5 6 8 6 5 6 7
Creating graphs in MATLAB is as easy as one command.let us plot the result of our vector addition with grid lines.plot(b)
Grid on
2.计算,x=2,x=3时的值。
>> x=2, y=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x)
x =2
y = -4.4697
>> x=3, y=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x)
x = 3
y = 10.386
3.计算
>> cos(60)-sqrt(9-sqrt(2))
ans = -3.7066
4.已知: a=3,A=4,b=,B=-1,c=a+A-2B,C=a+B+2c,求: C
>> a=3,A=4,b=a^2,B=b^2-1,c=a+A-2*B,C=a+B+2*c
a = 3
A = 4
b = 9
B = 80
c = -153
C = -223
实验二 矩阵和数组的操作
一 实验环境 计算机 MATLAB软件
二 实验目的 1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。
2.学习矩阵和数组的加减运算与乘法。
3.掌握对数组中元素的寻访与赋值,会对数组进行一般的操作。
三 预备知识
常用的产生特殊矩阵的函数: eye(n)单位阵 rand(m,n)随机矩阵 rand(m,n)正态分布随机阵
zeros(m,n)零矩阵 ones(n)全部元素都为1的矩阵 magic(n)
四 实验内容与步骤
1. 用三种方法创建一个3x3矩阵,利用矩阵编辑器将其扩充为4x5的矩阵,并保存。
1) 直接输入法 如在命令输入A=[3,2,1;4,5,6;7,8,9]。
2) 直接利用MATLAB提供的函数创建一个3x3矩阵 如在命令区输入rand(3,3)即得到一个3x3的随机矩阵。
3) 利用MATLAB提供的“Matrix Editor”完成输入。
2. 建立一个等差数列,然后由它产生一个对角阵。
>> a=linspace(0,1.5,5)
a = 0 0.3750 0.7500 1.1250 1.5000
>> B=diag(a)
B =
0 0 0 0 0
0 0.3750 0 0 0
0 0 0.7500 0 0
0 0 0 1.1250 0
0 0 0 0 1.5000
3. 利用MATLAB的函数inv(A)求方阵A的逆矩阵。
>> A=[1,2;5,6]
A = 1 2
5 6
>> B=inv(A)
B = -1.5000 0.5000
1.2500 -0.2500
五 练习
1. 创建一个5x5矩阵,提取主对角线以上的部分。
>> A=rand(5,5)
A = 0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.4860 0.8214 0.7382 0.4103 0.0099
0.8913 0.4447 0.1763 0.8936 0.1389
>> B=A-tril(A)
B = 0.9501 0.7621 0.6154 0.4057 0.0579
0.4565 0.7919 0.9355 0.3529
0.9218 0.9169 0.8132
0.4103 0.0099
0.1389
2. A=rand(3),B=magic(3),C=rand(3,4),计算AxBxC
>> A=rand(3)
A =
0.2028 0.2722 0.7468
0.1987 0.1988 0.4451
0.6038 0.0153 0.9318
>> B=magic(3)
B =
8 1 6
3 5 7
4 9 2
>> C=rand(3,4)
C =
0.4660 0.5252 0.8381 0.3795
0.4186 0.2026 0.0196 0.8318
0.8462 0.6721 0.6813 0.5028
>> A*B*C
ans =
9.9025 7.6305 7.8546 11.2710
6.9648 5.4717 5.7935 7.5764
12.5380 10.1149 11.1993 13.6187
3.创建一个3x3矩阵,并求其转置,逆矩阵。
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A'
ans =
8 3 4
1 5 9
6 7 2
>> inv(A)
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
4.用两种方法求Ax=b的解(A为四阶随机矩阵,b为四阶列向量)。
>> A=rand(4)
A =
0.7095 0.1934 0.1509 0.8537
0.4289 0.6822 0.6979 0.5936
0.3046 0.3028 0.3784 0.4966
0.1897 0.5417 0.8600 0.8998
>> b=[3;5;1;4]
b =
3
5
1
4
>> x=A\b
x =
-33.5325
60.6078
-54.7098
27.3192
>> x=linsolve(A,b)
x =
[ -25012684883469343857355768268856511193160192689537070603213733888/745923421447342920013045063411519019849591248812743641090641579]
[ 45208809461043319490286549508580640316173479517271044628108279808/745923421447342920013045063411519019849591248812743641090641579]
[ -40809314514940621024347106478778749067505032416204336537704333312/745923421447342920013045063411519019849591248812743641090641579]
[ 2264222330641016109064651939180364655304909872418653511505412096/82880380160815880001449451490168779983287916534749293454515731]
>> double(x)
ans =
-33.5325
60.6078
-54.7098
27.3192
实验三 MATLAB绘图
一 实验环境 计算机 MATLAB软件
二 实验目的
1. 掌握MATLAB的基本绘命令。
2. 掌握运用MATLAB绘制一维、二维、三维的图形方法。
3. 给图形加以修饰。
三 预备知识 特殊的二维图形函数有:直方图、柄图、阶梯图、饼图、频数累计柱状图、极坐标图
四 实验内容和步骤
1. 创建一个5x5魔方矩阵,并画出这个矩阵的图形。
A=magic(5);
>> plot(A)
2. 在同一坐标轴里绘出y=sin(x),z=cos(x)两条曲线。
x=linspace(0,2*pi,50);
>> y=sin(x);
>> plot(x,y)
>> hold on
>> z=cos(x);
>> plot(x,z)
>> hold off
3. 画出y=的曲线(x(-5,5))。在这曲线上加入相同区间里的y=的曲线,并且采用绿色折线标识。
>> x=linspace(-5,5,100);
>> y=x.^2;
>> plot(x,y)
>> hold on
>> z=x.^(1/3);
>> plot(x,z,'g--')
4. 在同一窗口不同坐标系里分别绘出y1=sinx,y2=cosx,y3=cinh(x),y4=cosh(x)4个图形。
>> x=linspace(0,2*pi,30);
>> subplot(2,2,1);plot(x,sin(x));
>> subplot(2,2,2);plot(x,cos(x));
>> subplot(2,2,3);plot(x,sinh(x));
>> subplot(2,2,4);plot(x,cosh(x));
5. 绘制一个三维曲线x=cosp,y=sinp,z=p。
>> p=0:pi/10:20*pi;
>> x=cos(p);y=sin(p);z=p;
>> plot3(x,y,z)
五 练习
1. 画出横坐标在(-15,15)上的函数y=cosx的曲线。
>> x=linspace(-15,15,100);
>> y=cos(x);
>> plot(x,y)
2. 用图形表示离散函数y=并加入网格。
>> n=7:12;
>> y=1./abs(n-6);
>> plot(n,y,'p')
>> grid
3. 用图形表示连续调制波形y=sin(t)sin(9t)及其包络线。
>> t=linspace(0,4*pi,300);
>> y=sin(t).*sin(9*t);
>> y1=sin(t);y2=-sin(t);
>> plot(t,y,t,y1,'-.',t,y2,'-.')
实验四 M文件的缩写
一 实验环境 计算机 MATLAB软件
二 实验目的
1. 学习MATLAB中的关系运算和逻辑运算,掌握它们的表达形式和用法。
2. 掌握MATLAB 中的选择结构和循环结构。
3. 学会用MATLAB进行M文件的编写和调用。
三 预备知识
1.关系和逻辑运算 MATLAB常用的关系符有:﹤、﹥、﹤=、﹥=、==、~=。
2.选择结构 if语句和switch语句
3.循环结构 for语句一般用于循环次数已知的情况,while语句一般用于循环次数未知的情况
四 实验内容和步骤
1. 创建一个矩阵,用函数all和any作用于该矩阵,比较结果。
创建一个矩阵 a=[1,2,0,3;2,0,1,4];
b=all(a),c=any(a),d=all(b),e=any(b)
比较结果 b=1 0 0 1 c= 1 1 1 1 d=0 e=1
2. 编写一个switch语句,判断输入数的奇偶性。
n=input(n==);
switch mod(n,2);
case 1
A=‘奇’
case 0
A=‘偶’
otherwise
A=‘空’
end
3. 编写一个程序画出某一分段函数所表示的曲面,并用M文件存储。
步骤1:打开MATLAB的M文件编辑器file/new/M-file,编写内容。
步骤2:选择file/save命令,将文件保存并命名。
步骤3:在command window窗口输入文件名,可看到图形。
五 练习
1. 编写一个程序计算n的阶乘。
function
N=input('N=');
result=1;
for i=1:N
result=result*i;
end
result;
>> aaa
N=3
ans =
6
2. 编写一个程序求出阶乘大于或等于的最小整数。
function m=fei
m=1;
max=99^99
n=1;
while m<max
m=m*n;
n=n+1;
end
n=n-1
>>m=1
>>fei
max=3.6973e+197
n=120
ans=6.6895e+198
>>n=119;
>>jiech(119)
m=5.5746e+196
ans=5.5746e+196