数字信号处理Matlab实验
实验三:IIR 数字滤波器的设计和实现(6学时)
数字信号处理的另一个重要应用是数字滤波器。数字滤波器是一个运算过程,将输入数列按既定的要求转换成输出数列。在数字信号的处理时只需利用数字相加、乘以常数和延时等运算,就可以完全达到传输特性的要求。数字滤波器分为无限冲激响应(IIR)和有限冲激响应(FIR)两大类。
本实验用 IIR 数字滤波器产生双音多频 DTMF 拨号信号的产生,演示 IIR 数字滤波器在通信系统中的应用。
DTMF 信号是将拨号盘上的 0~F 共16 个数字,用音频范围的 8 个频率来表示的一种编码方式。8 个频率分为高频群和低频群两组,分别作为列频和行频。每个字符的信号由来自列频和行频的两个频率的正弦信号叠加而成。频率组合方式如下图所示。
频率 1209Hz 1336Hz 1477Hz 1633Hz 697Hz 1 2 3 A 770Hz 4 5 6 B 852Hz 7 8 9 C 941Hz */E 0 #F D
根据 ITU Q.23 建议,DTMF信号的技术指标是:传送/接收率为每秒10个号码,或每个号码100ms。每个号码传送过程中,信号存在时间至少45ms,且不多于55ms,100ms的其余时间是静音。在每个频率点上允许有不超过±1.5%的频率误差。任何超过给定频率 ±3.5%的信号,均被认为是无效的,拒绝承认接收。另外,在最坏的检测条件下,信噪比不得低于15dB。 本次实验内容:
DTMF 信号的编码: 把您的联系电话号码 DTMF 编码生成为一个 .wav 文件。其中关键是不同频率的正弦波的产生,要求采用滤波法生成所要求的 DTMF信号。
通过本次实验,达到以下目的:
(a)复习和巩固 IIR 数字滤波器的基本概念; (b)掌握 IIR 数字滤波器的设计方法; (c)掌握 IIR 数字滤波器的实现结构;
(d)能够由滤波器的实现结构分析滤波器的性能(字长效应);
(e)了解通信系统电话 DTMF 拨号的基本原理和 IIR 滤波器实现方法。
实验代码:
d=input('请键入电话号码: ','s'); sum=length(d); total_x=[];
1
数字信号处理Matlab实验三、四 2013.6.1
fs=8000;%取样频率 sum_x=[];
sum_x=[sum_x,zeros(1,800)];%800个0 for a=1:sum %symbol=abs(d(a)); sum=11
tm=[49,50,51,65; 52,53,54,66; 55,56,57,67; 42,48,35,68]; %DTMF表中键的16个ASCII码值 for p=1:4; for q=1:4;
if tm(p,q)==abs(d(a)); break,end %得列号q end
if tm(p,q)==abs(d(a)); break, end %得行号p end
f1=[697,770,852,941];%行频率向量 f2=[1209,1336,1477,1633];%列频率向量 %为了发声,加长序列 n=1:400;
x=sin(2*pi*n*f1(p)/fs)+sin(2*pi*n*f2(q)/fs); %构成双频信号 x=[x,zeros(1,400)];%400个点后面再添加400个0 sum_x=sum_x+x;
total_x=[total_x,x];%将所编码连接起来 end
wavwrite(total_x,'C:\\Users\\log\\Documents\\MATLAB\\sound_3'); %将数据读入声音文件 sound(total_x);%发出声音 subplot(211);
plot(total_x);title('DTMF信号时域波形'); Xk=fft(x); subplot(212);
k=(1:800)*sum*fs/800; plot(k,abs(Xk));
xlabel('频率');title('DTMF信号频谱'); disp('双频信号已生成并发出.')
%接收端检测程序
k=[18 20 22 24 31 34 38 42]; %要求的DFT样本序号 %k=[18 19 20 21 22 23 24 25]; N=205; % ?
2
数字信号处理Matlab实验三、四 2013.6.1
%N=200;
disp('接收端检测到的号码为:') for a=1:sum %1:11
m=800*(a-1); %m=0:800:8000
X=goertzel(total_x(m+1:m+N),k+1); %用Goertzel算法计算11点DFT样本 val=abs(X);
%stem(k,val,'.'); grid; xlabel('k');ylabel('|X(k)|'); %set(gcf,'color','w') %设置背景色白色
%shg,disp('图形上显示11个近似基频的DFT幅度');pause(10); limit=80; for s=5:8
if val(s)>limit,break,end end for r=1:4
if val(r)>limit, break,end end
buffer(a)=tm(r,s-4); end
disp(char(buffer))%显示接收到的字符(char型) 运行截图:
3
数字信号处理Matlab实验三、四 2013.6.1
4
数字信号处理Matlab实验三、四 2013.6.1
实验四:FIR 数字滤波器的设计和实现(4学时)
本次实验的内容是另一类重要的数字滤波器 —— FIR 数字滤波器,要求如下:
录制自己的一段声音,长度为 45秒,取样频率 32kHz,然后叠加一个高斯白噪声,使得信噪比为 20dB。请采用窗口法设计一个 FIR 带通滤波器,滤波噪声提高质量。
提示:
(1) 滤波器指标参考:通带边缘频率为 4kHz,阻带边缘频率为4.5kHz,阻带衰减大于 50dB;
(2) Matlab 函数 y = awgn(x,snr,'measured') ,首先测量输入信号 x 的功率,然后对其叠加高斯白噪声;
(3) 请随实验报告同时提交原始和滤波后的声音文件(.mp3 格式)。 通过本次实验,掌握以下知识:
(a) FIR 数字滤波器窗口设计法的原理和设计步骤; (b) Gibbs 效应发生的原因和影响;
5
数字信号处理Matlab实验三、四 2013.6.1
(c) 不同类型的窗函数对滤波效果的影响,以及窗函数和长度 N 的选择。 实验代码:
[x,fs,bits]=wavread('C:\\Users\\log\\Documents\\MATLAB\\录音wav.wav'); snr=20; %信噪比20dB
x2=awgn(x,snr,'measured');%Add white Gaussian noise to a signal;measrusd:signal power wavwrite(x2,32000,16,'C:\\Users\\log\\Documents\\MATLAB\\录音wav_add.wav') t=0:1/fs:(size(x2)-1)/fs;
wp=8000*pi/32000; %数字通带边缘频率 ws=9000*pi/32000; %数字阻带边缘频率 wdelta=ws-wp; %过渡带宽
N=ceil(11*pi/wdelta); %向上取整,得N wc=(wp+ws)/2; %数字截止频率
b=fir1(N,wc/pi,blackman(N+1)); %选择Blackman窗,并归一化截止频率 figure(1) freqz(b,1,512); f2=filter(b,1,x2); figure(2) subplot(211);
plot(t,x2);title('滤波前 时域波形'); subplot(212);
plot(t,f2);title('滤波后 时域波形'); F2_k=fft(f2,1024); f=fs*(0:511)/1024; figure(3)
X2_k=fft(x2,1024); subplot(211);
plot(f,abs(X2_k(1:512)));
title('滤波前频谱');xlabel('f(Hz)');ylabel('Amplitude'); subplot(212);
F2=plot(f,abs(F2_k(1:512)));
title('滤波后频谱');xlabel('f(Hz)');ylabel('Amplitude');
wavwrite(f2,32000,16,'C:\\Users\\log\\Documents\\MATLAB\\录音final_4')
运行截图:
6
数字信号处理Matlab实验三、四 2013.6.1
7
数字信号处理Matlab实验三、四 2013.6.1
8
数字信号处理Matlab实验三、四 2013.6.1
9
因篇幅问题不能全部显示,请点此查看更多更全内容