數字信號處理實驗

實驗一 MATLAB基礎
(標題,宋體四號,加粗,2倍行距,居中,大綱1級,段前1行段後0.5行)
1.MATLAB的啓動 (宋體小四,加粗,21磅行距,左對齊,大綱2級,段前0.5行,懸掛2字符)
有多種方式可啓動MATLAB,最常用的方法就是雙擊系桌面的MATLAB圖標,也可以在開始菜單的程序選項中選擇MATLAB快捷方式。
初次啓動MATLAB後,將進入MATLAB默認設置的桌面平臺。(宋體小四,21磅行距,兩端對齊,正文文本,首行2字符)
2.桌面平臺
默認設置情況下的桌面平臺包括6個窗口,分別是MATLAB主窗口、命令窗口、歷史窗口、當前目錄窗口、發行說明書窗口和工作間管理窗口。
3. 實驗心得(實驗心得內容全部手寫完成!)
(1)實驗內容(對實驗內容進行闡述,具體描述掌握的知識及自己的操作學習過程,不少於200字)
1.MATLAB程序編輯/調試器(編寫算法程序的地方)
在MATLAB的命令窗口中有3種方式可進入程序編輯/調試器
(1)選擇菜單欄的“File”項中的“New”或“Open”項。
(2)選擇工具欄的“New”或“Open”項。
(3)在命令窗口中輸入edit命令。
MATLAB的程序類型有以下三種
(1)腳本M文件
(2)程序M文件
(3)函數M文件(常稱爲M函數)
2.MATLAB幫助系統
(1)單擊MATLAB主窗口菜單的“Help”|“Demos”選項,或在命令窗口輸入demo,將進入MATLAB的演示界面。
(2)命令窗口查詢幫助有“help+關鍵詞”,顯示所有幫助說明;“lookfor+關鍵字”,查詢相關函數等。
3.變量
(1)變量的命名
(2)一些特殊的變量
ans:用於結果的缺省變量名;
i、j:虛數單位;
pi:圓周率;
nargin:函數的輸入變量個數;
eps:計算機的最小數;
nargout:函數的輸出變量個數;
inf:無窮大;
nan:不定量。
4.向量的生成
由冒號運算符生成:A=初值:增值:終值
5.矩陣的生成
(1)在命令窗口中直接輸入
(2)由多個向量生成矩陣
(3)一些常用的特殊矩陣
單位矩陣:eye(m,n);eye(m);
零矩陣:zeros(m,n);zero(m);
一矩陣:ones(m,n);ones(m);
對角矩陣:對角元素向量V=[a1,a2,…an],A=diag(V);
隨機矩陣:rand(m,n)產生一個mn均勻分佈的隨機矩陣,如Y=randn(m,n)%生成mn正態分佈隨機矩陣
6.矩陣運算
矩陣的四則運算,運算符有+、-、、\、.\、/、./、、.、’和.’
7.基本平面圖形繪製命令plot的調用格式
(1)plot(X,Y)
(2)plot(Y)
(3)plot(X1,Y1,X2,Y2,…)
(4)plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2,…)
8.二維圖形註釋命令
(1)axis(V)
(2)grid on
(3)title(‘string’)
(4)text(x,y,’string’)
(5)xlabel(‘string’)、ylabel(‘string’)
(6)[x,y]=ginput(n)
(7)gtext(‘string’)
(8)hold on/off
(9)plotyy(x1,y1,x2,y2)
(10)多子圖,subplot
(11)syem
(2)實驗收穫及總結(不少於150字)
通過本次實驗在原有的matlab基礎上加深了對於matlab的認知,複習了各種二維矩陣的運算,掌握了一些新的命令,對於matlab繪圖有了更深刻的理解,同時對於函數文件的編寫有了更加深刻的印象。複習了matlab的窗口使用,對於基本上的matlab知識掌握更加熟練,同時編寫了很多腳本文件,掌握了很多特殊變量,運用註釋將程序的可讀性有了進一步的提高。
實驗二 信號的表示 (前一頁末尾插入分頁符)
1.實驗目的 (標號重新開始於1)
1.瞭解MATLAB程序設計語言的基本特點,熟悉MATLAB軟件運行環境。
2.掌握各種信號的建模方式。
3.掌握各種信號的圖形表示方法。
4.掌握變量等有關概念,具備初步的將一般數學模型轉化爲對應的計算機模型並進行處理的能力。
2.實驗設備
PC機
MATLAB7.0軟件
3.實驗內容
學習使用MATLAB7.0軟件;學習信號的圖形表示方法;掌握各種信號的建模方式;實現單位採樣序列δ(n)、單位階躍序列u(n)、矩形序列Rg(n)、三角波、方波、鋸齒波、Sinc函數。
4.思考題
(1)實現單位採樣序列δ(n)、單位階躍序列u(n)、矩形序列Rg(n),並用圖形顯示。寫出程序及輸出圖形。
單位採樣序列δ(n)
n=-5:10;
y=[zeros(1,5),1,zeros(1,10)];
stem(n,y);
axis([-5,10,0,2]);
title(‘單位採樣序列’);
在這裏插入圖片描述
單位階躍序列u(n)
n=-5:10;
y=[zeros(1,5),ones(1,11)];
stem(n,y,‘r’);
axis([-5,10,0,2]);
title(‘單位階躍序列u(n)’)
在這裏插入圖片描述
矩形序列Rg(n)
n=-5:10;
y=[zeros(1,5),ones(1,5),zeros(1,6)];
plot(n,y,‘b’);
stem(n,y,‘b’);
axis([-5,10,0,2]);
title('矩形序列Rg(n ');
在這裏插入圖片描述
(2) 實現三角波、方波、鋸齒波、Sinc函數,並用圖形顯示。寫出程序及輸出圖形。
三角波
x=0:0.01:1
y=abs(sawtooth(10
pi*(x+0.05),0.5));
plot(x,y,‘m’);
axis([0,1,0,2])
title(‘三角波’);
在這裏插入圖片描述
方波
x=-2pi/100:pi/1024:2pi/100;
y=square(2pi30x,60);
plot(x,y,‘y’);
title(方波’’);
ylim([-1.5,1.5]);
在這裏插入圖片描述
鋸齒波
x=0:0.01:1
y=sawtooth(10
pi*(x+0.05),1);
plot(x,y,‘y’);
axis([0,1,-2,2])
title(‘¾â³Ý’);
在這裏插入圖片描述
Sinc函數
y=sinc(x);
plot(x,y,‘k’);
title(‘sincº¯Êý’);
在這裏插入圖片描述
實驗三 FFT頻譜分析及應用
1.實驗目的
1.通過實驗加深對FFT的理解。
2.熟悉應用FFT對典型信號進行頻譜分析的方法。
2.實驗設備
PC、MATLAB7.0軟件
3.實驗內容
使用MATLAB程序實現信號頻域特性的分析。涉及離散傅里葉變換(DFT)、快速傅里葉變換(FFT)及信號頻率分辨率等知識點。
4.思考題
被噪聲污染的信號,比較難看出所包含的頻率分量,如一個有50Hz和120Hz正弦信號構成的信號,受零均值隨機噪聲的干擾,數據採樣率爲1000Hz,試用FFT函數來分析其信號頻率成分,要求:
畫出時域波形;
分析信號功率譜密度;
t=0:0.001:0.8;
x=sin(2pi50t)+cos(2pi120t);
y=x+1.5*randn(1,length(t));
subplot(3,1,1);plot(t,x);
subplot(3,1,2);plot(t,y);
Y=fft(y,512);
P=Y.conj(Y)/512;
f=1000
(0:255)/512;
subplot(3,1,3);plot(f,P(1:256));
title(‘FFT N=512’);
xlabel(‘頻率(單位:Hz)’);
ylabel(‘P’);
在這裏插入圖片描述
實驗四 信號的運算-卷積
1.實驗目的
1.掌握信號的線性卷積運算。
2.掌握信號的循環卷積運算。
3.信號的循環卷積計算線性卷積的條件。
2.實驗設備
PC、MATLAB7.0軟件
3.實驗內容
學習使用MATLAB7.0軟件進行建模;學習信號卷積運算的MATLAB實現;實現信號的線性卷積運算、應用DFT實現線性卷積運算、驗證循環卷積計算線性卷積的條件。
4.思考題
1.如果信號x(n)=x1(n)*x2(n)利用線性卷積計算。用conv函數實現如下:y=conv(x1,x2)。
function y = circonvt(x1,x2,N)
if(length(x1)>N||length(x2)>N)
error(‘N必須大於等於x的長度’);
end
x1=[x1 zeros(1,N-length(x1))];
x2=[x2 zeros(1,N-length(x2))];
x1=fft(x1,N);x2=fft(x2,N);x=x1.*x2;
y=ifft(x,N);y=real(y);
end
circonvt( [1 5 4],[4 2 5],4)
在這裏插入圖片描述
2.假設卷積下面信號

選定循環卷積的長度爲N=21,確定y1(n)=x(n)h(n)的哪些數值與線性卷積y2(n)=x(n)*h(n)結果中的數值相同。編寫代碼並輸出圖形,分析錯誤數據的原因,怎樣才能使兩者數據相同。
function y = circonvt(x1,h,N)
if(length(x1)>N||length(h)>N)
error(‘N必須大於等於x的長度’);
end
x1=[x1 zeros(1,N-length(x1))];
h=[h zeros(1,N-length(h))];
x1=fft(x1,N);h=fft(h,N);x=x1.*h;
y=ifft(x,N);y=real(y);

n1=0:1:12;
x1=0.9.^n1;
h=ones(1,12);
h=[zeros(1,9) h];
N=length(x1)+length(h)-1;
n=0:N-1;
ny=0:20;
y1=circonvt(x1,h,21);
y2=circonvt(x1,h,N);
x1=[x1 zeros(1,N-length(x1))];
h=[h zeros(1,N-length(h))];
X1=fft(x1,N);
H=fft(h,N);
X=X1.*H;
x=ifft(X);
x=real(x);
subplot(2,2,1);stem(n,x1);title(‘x1(n)’);axis([0,33,0,1]);
subplot(2,2,2);stem(n,h);title(‘h(n)’);axis([0,33,0,1]);
subplot(2,2,3);stem(ny,y1,‘fill’);title(‘21點循環卷積’);axis([0,33,0,8]);
hold on;
subplot(2,2,4);stem(n,x);title(‘線性卷積’);axis([0,33,0,8]);
subplot(2,2,3);stem(n,x,‘r’,’–’);axis([0,33,0,8]);
hold off;
在這裏插入圖片描述
3.已知系統響應爲h(n)=sin(0.2n)+cos(0.5n) 0<=n<20,輸入爲x(n)=exp(0.2n) 0<=n<10,畫出用DFT方法實現求系統輸出的系統框圖, 編寫用DFT實現的程序代碼並輸出圖形。
function [ y] = circonvt(x1,x2,N )
if(length(x1)>N|length(x2)>N)
error(‘N必須大於等於x的長度’);
end
x1=[x1 zeros(1,N-length(x1))];
x2=[x2 zeros(1,N-length(x2))];
X1=fft(x1,N);X2=fft(x2,N);X=X1.*X2;
y=ifft(X,N);y=real(y);

n1=0:1:19;
hn=sin(0.2n1)+cos(0.5n1);
n2=0:1:9;
xn=exp(0.2*n2);
N=length(xn)+length(hn)-1;
n=0:N-1;
ny=0:20;
y1=circonvt(xn,hn,21);
y2=circonvt(xn,hn,N);
xn=[xn zeros(1,N-length(xn))];
hn=[hn zeros(1,N-length(hn))];
X1=fft(xn,N);
H=fft(hn,N);
X=X1.*H;
x=ifft(X);
x=real(x);
subplot(2,2,1);stem(n,xn);title(‘xn(n)’);axis([0,33,0,5]);
subplot(2,2,2);stem(n,hn);title(‘hn(n)’);axis([0,33,-2,2]);
subplot(2,2,3);stem(ny,y1,‘fill’);title(‘21點循環卷積’);axis([0,33,-20,30]);
hold on;subplot(2,2,4);stem(n,x);title(‘線性卷積’);axis([0,33,-20,30]);
subplot(2,2,3);stem(n,x,‘r’,’–’);axis([0,33,-20,30]);
hold off;
在這裏插入圖片描述
實驗五:線性卷積的快速處理方法-重疊相加法
1.實驗目的
1.掌握線性卷積的正確處理方法-重疊相加法的原理。
2.掌握線性卷積的正確處理方法-重疊相加法的實現方法。
3.通過實驗和分析深入瞭解重疊相加法。
2.實驗設備
PC、MATLAB7.0軟件
3.實驗內容
學習使用MATLAB7.0軟件進行建模;學習重疊相加法的基本原理;學習重疊相加法的MATLAB實現;實現信號的重疊相加法運算;通過與卷積運算進行對比,比較其浮點運算次數及消耗的時間。
4.思考題
編寫一個實現塊卷積重疊相加法的M文件函數,該函數的輸入之一應是段的長度M或是FFT的長度。卷積運算應在DFT域中進行。最終,這將會使程序最快的運行。
function y = text(x,h,Nfft)
H=fft(h,Nfft);
M=Nfft-length(h)+1;
for ix=1:M:length(x)
x_seg=x(ix:ix+M-1);
X=fft(x_seg,Nfft);
Y=X.*H;
y_seg=ifft(Y);
y(ix:ix+M-1)=y(ix:ix+M-1)+y_seg(1:Nfft);
end
y=ifft(Y,Nfft);
ifany(imag(h))&&any(imag(x))
y=rear(y);
end

n1=0:1:19;
hn=sin(0.2n1)+cos(0.5n1);
n2=0:1:9;
xn=exp(0.2n2);
z=conv(hn,xn);
N=length(xn)+length(hn)-1;
hn=[hn zeros(1,N-length(hn))];
R=length(xn);
M=length(hn);
y=fftfilt(xn,hn,8);
k1=1:length(y);
k=1:N;
plot(k1,y,‘b-o’,k,z,‘g-x’)
xlabel(‘time’)
ylabel(‘amplitude’)
legend(‘y[n]’,‘z[n]’)
在這裏插入圖片描述
實驗六:線性卷積的快速處理方法-重疊保留法
1.實驗目的
1.掌握線性卷積的正確處理方法-重疊保留法的原理。
2.掌握線性卷積的正確處理方法-重疊保留法的實現方法。
3.通過實驗和分析深入瞭解重疊保留法。
2.實驗設備
PC、MATLAB7.0軟件
3.實驗內容
學習使用MATLAB7.0軟件進行建模;學習重疊保留法的基本原理;學習重疊保留法的MATLAB實現;實現信號的重疊保留法運算;通過與卷積運算進行對比,比較其浮點運算次數及消耗的時間。
4.思考題
1.通過couv函數來測試此函數的正確性。考慮使用下面信號
x(n)= h(n)=
function y = circonvt(x,h,N)
if(length(x)>N||length(h)>N)
error(‘N必須大於等於X的長度’);
end
x=[x zeros(1,N-length(x))];
h=[h zeros(1,N-length(h))];
X=fft(x,N);
H=fft(h,N);
X1=X.H;
y=ifft(X1,N);
y=real(y);
end
function y = ovrlpsav( x,h,N )
Lenx=length(x);
M=length(h);
if N<M
N=M+2
end
M1=M-1;
L=N-M1;
h=[h,zeros(1,N-M)];
x=[zeros(1,M1),x,zeros(1,N-1)];
K=floor((Lenx+M-1)/(L));
Y=zeros(K+1,N);
for k=0:K
xk=x(k
L+1:k
L+N);
Y(k+1,:)=circonvt(xk,h,N);
end
Y=Y(:,M:N)’;
y=(Y(😃)’;
end
xn=ones(1,17);
n1=0:1:100;
hn=sin(n1*pi/13);
z=conv(hn,xn);
N=length(xn)+length(hn)-1;
hn=[hn zeros(1,N-length(hn))];
R=length(xn);
M=length(hn);
y=ovrlpsav(xn,hn,10);
k1=1:length(y);
k=1:N;
plot(k1,y,‘b-o’,k,z,‘g-x’);
title(‘x(n)和h(n)的循環卷積圖像’);
xlabel(‘n’);
ylabel(‘y’);
在這裏插入圖片描述
在這裏插入圖片描述

實驗七:IIR數字濾波器的設計
1.實驗目的
1.掌握脈衝響應不變法和雙線性不變法設計IIR數字濾波器的原理和方法。
2.觀察雙線性變換法和脈衝響應不變法設計的濾波器的頻域特性,瞭解雙線性變換法和脈衝響應不變法的特點和區別。
2.實驗設備
PC、MATLAB7.0軟件
3.實驗內容
學習使用MATLAB7.0編寫程序,實現IIR數字濾波器的設;設計脈衝響應不變法和雙線性變換法設計IIR數字濾波器的方法、不同設計方法得到的IIR濾波器頻域特性異同等知識點。
4.思考題
1.查看幫助文件,瞭解相關函數的調用格式。
2.用雙線性變換法設計一個Chebyshev1型數字帶通濾波器,設計指標爲,T=1ms,Rp=1dB,Wp1=0.35Π,Wp2=0.65Π,Rs=60dB, Ws1=0.2Π,Ws2=0.8Π
按實驗步驟附上所設計濾波器的H(z)及相應的幅頻特性曲線定性分析得到的圖形,判斷設計是否滿足要求。
Ts=0.001;
Fs=1/Ts;
Rp=1;Rs=60;
wp1=0.35pi;
wp2=0.60
pi;
ws1=0.2pi;
ws2=0.8
pi;
Wp1=(2/Ts)*tan(wp1/2);
Wp2=(2/Ts)tan(wp2/2);
Wp=[Wp1,Wp2];
Ws1=(2/Ts)tan(ws1/2)
Ws2=(2/Ts)tan(ws2/2);
Ws=[Ws1,Ws2];
BW=Wp2-Wp1;
Omegaw0=sqrt(Wp1
Wp2);
[N,OmegaC]=cheb1ord(Wp,Ws,Rp,Rs,‘s’);
[z0,p0,k0]=cheb1ap(N,Rp);
AnalogB=k0
real(poly(z0));
AnalogA=real(poly(p0));
[BandB,BandA]=lp2bp(AnalogB,AnalogA,Omegaw0,BW); [DigitalB,DigitalA]=bilinear(BandB,BandA,Fs); [sos,G]=tf2sos(DigitalB,DigitalA);
[Hz,Wz]=freqz(DigitalB,DigitalA,1024,‘whole’); dbHz=20
log10((abs(Hz)+eps)/max(abs(Hz))); grd=grpdelay(DigitalB,DigitalA,Wz);
subplot(2,2,1);
plot(Wz/pi,abs(Hz));
title(‘幅頻響應’);
xlabel(’’),ylabel(‘幅度:|Hz|’);
axis([0,1,0,1.1]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
grid;
subplot(2,2,4);
plot(Wz/pi,dbHz);
title(‘模值(dB)’);
xlabel(‘頻率(單位:\pi)’);
ylabel(‘分貝(dB)’);
axis([0,1,-40,5]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,‘YTickmode’,‘manual’,‘YTick’,[-50,-30,-2,0]);
grid;
subplot(2,2,2);
plot(Wz/pi,angle(Hz)/pi); title(‘相頻響應’);
xlabel(’’);
ylabel(‘單位:\pi’);
axis([0,1,-1,1]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
grid;
subplot(2,3,3);
plot(Wz/pi,grd);
title(‘羣延遲’);
xlabel(‘頻率(單位:\pi)’); ylabel(‘樣本’);
axis([0,1,0,8]);
set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,ws1/pi,wp1/pi,wp2/pi,ws2/pi,1]);
set(gca,‘YTickmode’,‘manual’,‘YTick’,[0:0.5:10]);
grid;
set(gcf,‘color’,‘w’);
在這裏插入圖片描述
實驗八 FIR數字濾波器的設計

  1. 實驗目的
    (1)掌握用窗函數法和頻率採樣法設計FIR數字濾波器的原理和方法。
    (2)數字線性相位FIR濾波器的幅頻特性的相頻特性。
    (3)瞭解不同窗函數對濾波器性能的影響。
  2. 實驗設備
    PC,MATLAB7.0
  3. 實驗內容
    使用MATLAB編寫程序,實驗FIR數字濾波器的設計;涉及窗函數法和頻率採樣法設計FIR數字濾波器的方法,線性相位FIR濾波器的幅頻特性和相頻特性的特點,窗函數選擇及對濾波器性能的影響等知識點。
  4. 思考題
    (1)用Blackman窗設計一個數字帶通濾波器,設計指標爲Rp=1dB,Wp1=0.35π,Wp2=0.65π,Rs=60dB,Ws1=0.2π,Ws2=0.8π。
    答:
    ws1=0.2pi;
    wp1=0.35
    pi;
    wp2=0.65pi;
    ws2=0.8
    pi;
    tr_width=min((wp1-ws1),(ws2-wp2));
    %N=ceil(11pi/tr_width)+1;
    N=ceil(11
    pi/tr_width);
    n=[0:1:N-1];
    wc1=(ws1+wp1)/2;
    wc2=(ws2+wp2)/2;
    hd=ideal_lp(wc2,N)-ideal_lp(wc1,N);
    w_black=(blackman(N))’;
    h=hd.w_black;
    [dB,mag,pha,grd,w]=freqz_m(h,[1]);
    delta_w=2
    pi/1000;
    w_center=(wp1+wp2)/2;
    Rp1=-(min(dB(wp1/delta_w+1:w_center/delta_w+1)));% actual passband ripple
    As1=-round(max(dB(1:1:ws1/delta_w+1))); % Min stopband attenuation
    Rp2=-(min(dB(w_center/delta_w+1:wp2/delta_w+1)));% actual passband ripple
    As2=-round(max(dB(ws2/delta_w+1:1:501))); % Min stopband attenuation
    %plots
    subplot(2,2,1);
    stem(n,hd);
    title(’ 理想脈衝響應 ‘);
    axis([0,N-1,-0.3,0.38]);
    xlabel(‘n’);
    %set(gca,‘YTickMode’,‘manual’,‘YTick’,[0,0.1,0.2,0.3]);
    subplot(2,2,2);
    stem(n,w_black);
    title(‘Blackman 窗’);
    axis([0,N-1,0,1.1]);
    xlabel(‘n’);
    subplot(2,2,3);
    stem(n,h);title(’ 實際脈衝響應 ‘);
    axis([0,N-1,-0.3,0.38]);xlabel(‘n’);
    %set(gca,‘YTickMode’,‘manual’,‘YTick’,[0,0.1,0.2,0.3]);
    subplot(2,2,4);
    plot(w/pi,dB);title(‘幅頻響應:dB’);
    grid;axis([0,1,-80,0]);
    xlabel(‘pi’);ylabel(‘dB’);
    set(gca,‘XTickMode’,‘manual’,‘XTick’,[0,0.2,0.35,0.65,0.8,1.0]);
    部分功能函數:
    function hd=ideal_lp(wc,N);
    alpha=(N-1)/2;
    n=0:1:N-1;
    m=n-alpha+eps;
    hd=sin(wcm)./(pim);
    函數freqz_m:
    function [dB,mag,pha,grd,w]=freqz_m(b,a)
    [H,w]=freqz(b,a,1000,‘whole’); % w ranging from 0 to 2pi radians per sample.
    H=(H(1:501))’;
    w=(w(1:501))’;mag=abs(H);
    dB=20*log10((mag+eps)/max(mag));
    pha=angle(H);grd=grpdelay(b,a,w);
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章