第一篇:《信號處理matlab仿真》大作業
中國石油大學(華東)信息與控制工程學院
《信號處理matlab仿真》結課作業
專業班級:電子班 學
號:***** 姓
名:****** 任課老師:***** 2088年11月12日
《信號處理matlab仿真》結課作業
一、實現算法及設計思路
1、基本信號顯示
正弦信號的顯示,可以對它的幅度、角頻率以及初相位進行設置輸入。
A1=get(handles.edit1,'String');A=str2num(A1);
w1=get(handles.edit2,'String');w=str2num(w1);
p1=get(handles.edit3,'String');p=str2num(p1);t=-2*pi:0.01:2*pi;y=A*sin(w*t+p);plot(t,y,'r-.');grid
title('正弦信號');
方波信號:
t0=-6*pi;t1=6*pi;dt=1;t=t0:dt:t1;y1=square(t);plot(t,y1,'r-');grid
title('方波信號')鋸齒信號:
t0=-6*pi;t1=6*pi;dt=0.05;t=t0:dt:t1;
f=sawtooth(pi/5*t,0);plot(t,f,'r-')grid
title('鋸齒信號')單位階躍信號:
t=-5:0.01:5 y1=u(t);plot(t,y1,'r');grid
title('單位階躍信號')
《信號處理matlab仿真》結課作業
U(t):
function f=u(t)f=(t>0);%t>0時,f為1,否則為0 end 抽樣信號:
t=-15:0.01:15;t1=t/pi;y4=sinc(t1);plot(t,y4,'r-');grid title('抽樣信號');指數信號:
clc t=0:.001:10;ft=exp(t);plot(t,ft,'r-'),grid title('指數信號)')
2、序列運算
單位脈沖序列,可以對位移量進行設置:
t=str2num(get(handles.edit1,'String'));k=[t-3:t+7];fk=[(k-t)==0];stem(k,fk)title('單位脈沖序列')單位階躍序列,可以對位移量進行設置:
t=str2num(get(handles.edit2,'String'));k=[t-3:t+7];fk=[(k-t)>=0];stem(k,fk)title('單位階躍序列')指數序列,可以對底數進行設置:
t=str2num(get(handles.edit3,'String'));
《信號處理matlab仿真》結課作業
k=[0:10];fk=t.^k;stem(k,fk)title('指數序列')序列卷積,可以對卷積幅度進行設置(針對了特定的兩個序列): t=str2num(get(handles.edit4,'String'));k1=-1:3;k2=-1:3;f1=[0 1 3 2 0 ];f2=[0 4 3 2 1 ];y=t*conv(f1,f2);k0=k1(1)+k2(2);k3=length(f1)+length(f2)-2;k=k0:k0+k3;stem(k,y)title('卷積序列')
3、卷積與傅里葉變換
卷積,針對兩個特定的信號,對卷積幅度進行設置: clc
t=str2num(get(handles.edit1,'String'));t11=0;
t12=1;
t21=0;
t22=2;
t1=t11:0.001:t12;ft1=2*rectpuls(t1-0.5,1);t2=t21:0.001:t22;ft2=t2;
《信號處理matlab仿真》結課作業
t3=t11+t21:0.001:t12+t22;ft3=conv(ft1,ft2);ft3=t*ft3*0.001;plot(t3,ft3)title('f1(t)*f2(t)')方波傅里葉分析,對方波幅度進行設置: clc f=str2num(get(handles.edit2,'String'));t=0:0.01:2*pi;y=f*sin(t);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9+sin(11*t)/11);plot(t,y),grid title('方波傅立葉分析')
《信號處理matlab仿真》結課作業
離散傅里葉變化,針對指數信號,對底數進行設置: t=str2num(get(handles.edit3,'String'));n=-5:5;x=t.^n;k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n'*k);p=abs(X);plot(w/pi,p),grid title('離散傅立葉變換');快速傅里葉變化,針對指數信號,對底數進行設置: N=str2num(get(handles.edit3,'String'));x0=sin(N*2*pi*[1:8]/8)*5;dt=2*pi/8;w=linspace(0,2*pi,1000)/dt;x0=x0*exp(-j*[1:length(x0)]'*w)*dt;plot(w,abs(x0))title('快速傅立葉變換')
4、濾波器設計
FIR低通濾波器,可以對階數、截止頻率進行設置:
A1=get(handles.edit1,'String');N=str2num(A1);w1=get(handles.edit2,'String');Wn=str2num(w1);b=fir1(N,Wn,'low');
《信號處理matlab仿真》結課作業
fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR高通濾波器,可以對階數、截止頻率進行設置: A1=get(handles.edit3,'String');N=str2num(A1);w1=get(handles.edit4,'String');Wn=str2num(w1);b=fir1(N,Wn,'high');fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR帶通濾波器,可以對階數、截止頻率進行設置: A1=get(handles.edit5,'String');N=str2num(A1);w1=get(handles.edit6,'String');Wn=str2num(w1);b=fir1(N,Wn);fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));巴特沃斯低通濾波器:
《信號處理matlab仿真》結課作業
[b,a]=butter(11,0.5);figure(1);freqz(b,a,512,1000)n=0:40;x1=[(n-3)>=0];x2=[(n-20)>=0];x=x1-x2;y=filter(b,a,x);figure(2)subplot(1,2,1)stem(n,x);axis([0,35,-0.3,1.3]);grid title('x(n)');subplot(1,2,2)stem(n,y)grid title('y=filter(b,a,x)');切比雪夫I型濾波器: wp1=1000;ws1=1500;wc=3000;
《信號處理matlab仿真》結課作業
wp=wp1/wc;ws=ws1/wc;[n,wn]=cheb1ord(wp,ws,1,15);[b,a]=cheby1(n,1,wn);freqz(b,a,512,6000);axis([0,3000,-40,5]);
5、簡單圖像處理:
打開圖片:
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},' 載入圖像 ');%選擇路徑打開圖像
if isequal(filename,0)|isequal(pathname,0)%若 filename 為 0 或 pathname為 0,即未選中文件
errordlg('未選中文件 ','警告');%建立一個名為警告的錯誤對話框,內容為“未選中文件 ”
return;else
file=[pathname,filename];%將文件名和目錄名組合成一個完整的路徑
x=imread(file);%讀入圖像
set(handles.axes1,'HandleVisibility','ON');%設置圖形對象屬性,可從命令窗口中和 GUIs 中訪問
axes(handles.axes1);%定義圖形區域 axes1
imshow(x);%顯示圖像
《信號處理matlab仿真》結課作業
set(handles.axes1,'HandleVisibility','OFF');%設置圖形對象屬性,不可從命令窗口中和 GUIs 中訪問
axes(handles.axes2);%定義圖形區域 axes2 imshow(x);%顯示圖像
handles.img=x;%把圖像發給handles.img end 灰度處理:
global T %定義全局變量
axes(handles.axes2);%定義圖形區域 axes2 T=getimage;%從坐標軸獲取圖像數據
x=rgb2gray(handles.img);%利用 rgb2gray函數對源圖像進行灰度處理 imshow(x);%顯示圖像
xlabel('灰度圖像 ');% x 軸名為“灰度圖像 ”
handles.img=x;%把圖像發給 handles.img 傅里葉變換:
axes(handles.axes2);i1=handles.img;%獲取圖像
i2=im2double(i1);%圖像矩陣轉換成雙精度浮點類型
f1=fft2(i2);%對圖像進行二維離散傅里葉變換
fc1=fftshift(f1);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
i=log(1+abs(fc1));%對變換后的圖像矩陣數據求絕對值后取自然對數 imshow(i);
《信號處理matlab仿真》結課作業
xlabel('傅里葉變換圖像 ');handles.img=i;直方圖均衡化:
axes(handles.axes2);%定義圖形區域 axes2 T=getimage;%從坐標軸獲取圖像數據
x=rgb2gray(handles.img);%利用 rgb2gray函數對源圖像進行灰度處理 h=histeq(x);%對圖像進行直方圖均衡化處理
imshow(h);%顯示圖像
xlabel('直方圖均衡化后的圖像 ');handles.img=h;低通濾波器處理: axes(handles.axes2);y1=handles.img;%獲取圖像
x=rgb2gray(handles.img);%灰度變換
f=double(x);%數據類型轉換為雙精度數值
g=fft2(f);%二維離散傅里葉變換
g=fftshift(g);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
[M,N]=size(g);%返回矩陣 g 的大小,即 M 為行數,N 為列數
nn=2;%二階巴特沃斯低通濾波器 d0=50;%截止頻率 50Hz m=fix(M/2);
n=fix(N/2);%取矩陣 g 的行數和列數一半的整數
《信號處理matlab仿真》結課作業
for i=1:M
for j=1:N % 循環
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));%計算低通濾波器傳遞函數
result(i,j)=h*g(i,j);%結果返回到 result
end end result=ifftshift(result);%將圖象頻譜中心從矩陣的中心移到矩陣的原點 y2=ifft2(result);%二維離散傅里葉反變換
y3=uint8(real(y2));%把矩陣 y2 實部轉換成 8 位無符號數據
imshow(y3);%顯示低通濾波后的圖像
xlabel('低通濾波圖像 ');handles.img=y3;高通濾波器處理: axes(handles.axes2);x=handles.img;%獲取圖像
y=rgb2gray(handles.img);%灰度變換
f=double(y);%數據類型轉換為雙精度數值 k=fft2(f);%二維離散傅里葉變換
g=fftshift(k);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
[M,N]=size(g);%返回矩陣 g 的大小,即 M 為行數,N 為列數
nn=2;%二階
《信號處理matlab仿真》結課作業
d0=25;%截止頻率 25Hz m=fix(M/2);n=fix(N/2);for i=1:M
for j=1:N %循環 d=sqrt((i-m)^2+(j-n)^2);if d<=d0 h=0;else h=1;end result(i,j)=h*g(i,j);%結果返回到 result end end result=ifftshift(result);%將圖象頻譜中心從矩陣的中心移到矩陣的原點
y2=ifft2(result);%二維離散傅里葉反變換
y3=uint8(real(y2));%把矩陣 y2 實部轉換成 8 位無符號數據 imshow(y3);%顯示高通濾波后的圖像
xlabel('高通濾波圖像 ');handles.img=y3;上下翻轉:
axes(handles.axes2);
T= getimage;%從坐標軸獲取圖像數據 f=flipud(handles.img);%將圖像矩陣上下翻轉
《信號處理matlab仿真》結課作業
imshow(f);%顯示翻轉后的圖像
xlabel('上下翻轉后的圖像 ');handles.img=f;左右翻轉:
axes(handles.axes2);T= getimage;%從坐標軸獲取圖像數據 f=fliplr(handles.img);%將圖像矩陣左右翻轉
imshow(f);%顯示翻轉后的圖像
xlabel('左右翻轉后的圖像 ');handles.img=f;
二、調試分析
這個錯誤主要是不細心造成,檢查發現右括號少了,加上就解決了。
對變量沒有定義,直接進行使用,在程序開始之前對其進行了重新定義。
《信號處理matlab仿真》結課作業
Freqz錯誤使用,對程序及freqz參數調整,得到解決。
跟上面的問題一樣,都是對freqz重新調整,得到解決。如圖所示:
沒有對axes1進行定義,直接使用,程序加了:axes(handles.axes1);得到解決。
《信號處理matlab仿真》結課作業
這個錯誤開始的時候以為是圖窗設計的不合理,或者是程序的問題,就把圖窗和.m文件都刪了重新設計,還是這個錯誤,排除了圖窗設計錯誤,就對程序進行重新設計,最后實現了簡單的圖像處理按鈕的編寫并且沒有了錯誤。
直接對.img進行了使用,對程序作了一下改動,此問題得到解決:
三、測試結果
1、仿真系統開始界面:
《信號處理matlab仿真》結課作業
2、基本信號顯示:
①:正弦信號的顯示:
②:方波信號的顯示:
③:鋸齒信號的顯示:
《信號處理matlab仿真》結課作業
④:單位階躍信號的顯示:
⑤:抽樣信號的顯示:
《信號處理matlab仿真》結課作業
⑥:指數信號的顯示:
3、序列運算:
①:單位脈沖序列:
②:單位階躍序列:
③:指數序列:
《信號處理matlab仿真》結課作業
④:序列卷積:
4、卷積與傅里葉變換:
①:卷積:
②:方波傅里葉分析:
《信號處理matlab仿真》結課作業
③:離散傅里葉變換:(主要是對指數信號)
④:快速傅里葉變換:(主要是對指數信號)
《信號處理matlab仿真》結課作業
5、濾波器設計:
①:FIR低通濾波器:
②:FIR高通濾波器:
③:FIR帶通濾波器:
④:巴特沃斯低通濾波器:(幅頻與相頻圖線)
《信號處理matlab仿真》結課作業
⑤:切比雪夫I型濾波器:
6、簡單圖像處理:
①:選擇圖片打開:
《信號處理matlab仿真》結課作業
②:灰度處理:
③:傅里葉變換:
④:直方圖均衡化:
《信號處理matlab仿真》結課作業
⑤:低通濾波器處理:
⑥:高通濾波器處理:
⑦:上下翻轉:
《信號處理matlab仿真》結課作業
⑧:左右翻轉:
注:每項操作完成后,都有一個返回主界面按鈕,為退出此項操作,這里不一一展示。
四、課程總結及心得體會
通過近一段的學習,我明確了matlab是一款集數據分析、矩陣運算、信號處理和圖形顯示于一體,可方便地應用于數學計算、算法開發、數據采集、系統建模和仿真、數據分析和可視化、科學和應用軟件開發等方面的強悍軟件,是研究人員、工程人員研究工作中不可多得的工具,也是我們學習過程中必不可少的軟件。而正因為其強
《信號處理matlab仿真》結課作業
大之處,以及可視性及可交互性使我對它的學習產生了濃厚的興趣。開學至今,我們學習了 matlab 矩陣及其運算、matlab 程序設計、m文件操作、m文件 調試、m文件編程以及 matlab 繪圖等,一段時間下來,對 matlab 還是有了一定的框架性認識及編程能力。并且在學習matlab 過程中,我感覺到它和 c 語言有許多相似之處,它有c語言的特征,但是比 c 語言編程計算更加簡單,適合于復雜的數學運算。以上就是我對此課程的總結和心得體會。
根據自己學習的過程提出以下兩點建議:
1、針對上課學習: 對于軟件類的學習存在這樣一個問題,我們可以上課時帶電腦到課堂上或機房授課,一方面老師在講臺上演示,另 一方面同學們在下面即時練習,這樣印象會更加深刻。
2、針對課下學習:近期 matlab 學習,老師給的課下作業很少,僅有實驗,也許老師考慮同學們比較忙,以及可能交上來的作業效果質量達不到預期效果。但我認為適量的課下作業還是非常有必要的,尤其是對于我們這些普遍自制力較差的情況,這點顯得更加有意義。課下作業可以布置那些老師演示過的程序或 ppt 中程序略加改動,讓我們下課后及時完成上交。可以使我們及時鞏固。
第二篇:基于matlab的語音信號濾波處理——數字信號處理課程設計
數字信號處理課程設計
題目: 學院: 專業: 班級: 學號: 姓名: 指導教師:
基于matlab的語音信號濾波處理
物理與電子信息學院電子信息工程
摘要:
語音信號處理是研究用數字信號處理技術和語音學知識對語音信號進行處理的新興學科,是目前發展最為迅速的學科之一,通過語音傳遞信息是人類最重要,最有效,最常用和最方便的交換信息手段,所以對其的研究更顯得尤為重要。
Matlab語言是一種數據分析和處理功能十分強大的計算機應用軟件,它可以將聲音文件變換成離散的數據文件,然后用起強大的矩陣運算能力處理數據。這為我們的本次設計提供了強大并良好的環境!
本設計要求自己錄制一段自己的語音后,在MATLAB軟件中采集語音信號、回放語音信號并畫出語音信號的時域波形和頻譜圖。再在Matlab中分別設計不同形式的FIR數字濾波器。之后對采集的語音信號經過不同的濾波器(低通、高通、帶通)后,觀察不同的波形,并進行時域和頻譜的分析。對比處理前后的時域圖和頻譜圖,分析各種濾波器對于語音信號的影響。最后分別收聽進行濾波后的語音信號效果,做到了解在怎么樣的情況下該用怎么樣的濾波器。
目錄
1.設計內容……………………………………………………………4 2.設計原理……………………………………………………………4 2.1語音信號的時域分析…………………………………………4 2.2語音信號的頻域分析…………………………………………5 3.設計過程……………………………………………………………5 3.1實驗程序源代碼………………………………………………6
3.1.1原語音信號時域、頻域圖………………………………6
3.1.2低通濾波器的設計………………………………………6
3.1.3高通濾波器的設計………………………………………7
3.1.4帶通濾波器的設計………………………………………8
3.1.5語音信號的回放………………………………………9 3.2調試結果描述…………………………………………………10 3.3所遇問題及結果分析…………………………………………15
3.3.1所遇主要問題…………………………………………16
3.3.2結果分析………………………………………………16 4.體會與收獲…………………………………………………………17 5.參考文獻……………………………………………………………17
1.設計內容:
1.首先錄制好一段自己的語音。
2.用Matlab分別設計好3種類型的濾波器(指標自己確定):低通型、高通型、帶通型。3.用Matlab將語音信號進行采樣,并分別將其通過所設計的3種濾波器。4.用Matlab自帶的語音返回函數收聽濾波后的語音信號,分析并比較其與原語音信號的差異。
2.設計原理:
語音信號時一種非平穩的時變信號,它帶著各種信息。在語音編碼、語音合成、語音識別和語音增強等語音處理中無一例外需要提取語音中包含的各種信息。語音信號分析的目的就在于方便有效的提取并表示語音信號所攜帶的信息。語音信號處理可以分為時域和變換域等處理方法,其中時域分析是最簡單的方法,直接對語音信號的時域波形進行分析,崎嶇的特征參數主要有語音的短時能量,短時平均過零率,短時自相關函數等。2.1語音信號的時域分析
信號提取:通過圖形用戶界面上的菜單功能按鍵采集電腦上的一段音頻信號,完成音頻信號的頻率,幅度等信息的提取,并得到該語音信號的波形圖。
信號調整:在設計的用戶圖形界面下對輸入的音頻信號進行各種變化,如變化幅度、改變頻率等操作,以實現對語音信號的調整。
2.2語音信號的頻域分析
信號的傅里葉表示在信號的分析和處理中起著重要的作用。因為對于線性系統來說,可以很方便地確定其對正弦或復指數和的響應,所以傅里葉分析方法能完善地解決許多信號分析和處理問題。另外,傅里葉表示使信號的某些特性變得更明顯,因此,它能更深入地說明信號的各項紅物理現象。
由于語音信號時隨著時間變化的,通常認為,語音是一個受準周期脈沖或隨機噪聲源激勵的線性系統的輸出。輸出頻譜是聲道系統頻率響應與激勵源頻譜的乘積。身份到系統的頻率響應及激勵源都是隨時間變化的,因此一般標準的傅里葉表示雖然適用于周期及平穩隨機信號的表示,但不能直接用于語音信號。由于語音信號可以認為在短時間內,近似不變,因而可以采用短時分析法。
1.信號變換:在用戶圖形界面西啊對采集的語音信號進行Fourier等變換,并畫出變換前后的頻譜圖和倒譜圖。
2.信號濾波:濾除語音信號中的噪音部分,可以采用抵用濾波、高通濾波、帶通濾波,并比較各種濾波后的效果。
3.設計過程:
3.1實驗程序源代碼(原語音信號存放在e:下):
3.1.1.原語音信號的時域、頻域圖
[x1,fs,bits]=wavread('e:txwz.wav');%sound(x1,fs,bits);figure(1);
plot(x1);%做原始語音信號的時域圖形 title('原始語音信號');xlabel('時間 t');ylabel('音量 n');figure(2);y1=fft(x1);%做length(x1)點的FFT y1=fftshift(y1);%平移,是頻率中心為0 derta_fs = fs/length(x1);%設置頻譜的間隔,分辨率 plot([-fs/2:derta_fs: fs/2-derta_fs],abs(y1));%畫出原始語音信號的頻譜圖
title('原始語音信號的頻譜');grid on;3.1.2低通濾波器的設計
%低通濾波:截止頻率4000,阻帶衰減20dB,過渡帶寬0.1π
fc1=4000;N1=2*pi*0.9/(0.1*pi)wc1=2*pi*fc1/fs;if rem(N1,2)==0 N1=N1+1;end Window= boxcar(N1+1);%長度為N1的矩形窗Window b1=fir1(N1,wc1/pi,Window);
figure(3);freqz(b1,1,512);title('低通濾波器的頻率響應');x1_low = filter(b1,1,x1);%對信號進行低通濾波 figure(4);plot(x1_low);title('信號經過低通濾波器(時域)');figure(5);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_low))));title('信號經過低通濾波器(頻域)');3.1.3高通濾波器的設計
%高通濾波:截止頻率4000,阻帶衰減40dB,過渡帶寬0.1π
fc2=4000;N2=2*pi*3.1/(0.1*pi)wc2=2*pi*fc1/fs;N2=N2+mod(N2,2);Window=hanning(N2+1);b2=fir1(N2,wc2/pi,'high',Window);figure(6);freqz(b2,1,512);%數字濾波器頻率響應 title('高通濾波器的頻率響應');
x1_high = filter(b2,1,x1);%對信號進行高通濾波 figure(7);plot(x1_high);title('信號經過高通濾波器(時域)');figure(8);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_high))));title('信號經過高通濾波器(頻域)')3.1.4帶通濾波器的設計
%帶通濾波:下截止頻率4000,上截止頻率8000,阻帶衰減20dB,過渡帶寬度0.1π
f1=4000;f2=8000;%帶通濾波器的通帶范圍 w1=2*pi*f1/fs;w3=w1+0.1*pi;w2=2*pi*f2/fs;w4=w2-0.1*pi;w=[(w1+w3)/2,(w2+w4)/2];B=0.1*pi;N3=ceil(2*0.9*pi/B);N3=N3+mod(N3,2);Window=boxcar(N3+1);b3=fir1(N3,w/pi,'stop',Window);%帶通濾波器
figure(9);freqz(b3,1,512);%數字濾波器頻率響應 title('帶通濾波器的頻率響應');x1_daitong = filter(b3,1,x1);%對信號進行帶通濾波 figure(10);plot(x1_daitong);title('信號經過帶通濾波器(時域)');figure(11);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_daitong))));title('信號經過帶通濾波器(頻域)');3.1.5語音信號的回放(分別執行)
sound(x1,fs,bits);%原始信號
sound(x1_low,fs,bits);%經過低通濾 sound(x1_high,fs,bits);%經過高通濾波 sound(x1_daitong,fs,bits);%經過帶通濾波
3.2調試結果描述
原始語音信號的時域圖形:
原始語音信號頻譜:
低通濾波器的頻率響應:
信號經過低通濾波后的時域波形:
信號經過低通濾波后的頻域波形
高通濾波器的頻率響應:
信號經過高通濾波后的時域波形:
信號經過高通濾波后的頻域波形:
帶通濾波器的頻率響應:
信號經過帶通濾波后的時域波形:
信號經過帶通濾波后的頻域波形:
3.3所遇問題及結果分析
3.3.1所遇主要問題
1.在高通與帶通濾波器的設計時老是報錯,但同樣的用法在低通濾波器中就可以實現
b2=fir1(N2,wc2/pi,'high',Window);??? Error using ==> fir1 The window length must be the same as the filter length.其要求在fir函數中所選用的窗長要和濾波器長度一致。但在參考書上指出,濾波器階數必須為窗長加1。經上網查詢后,原來高通、帶阻濾波器的階數應該控制為奇數,因為如果階數為偶數,則在π點必有一零點,這對于高通帶阻來說是不允許的,故取階數為奇數,而你FIR1濾波器階數為M+1階,所以你的M必須為偶數,所以可以將程序中去窗長算法由原程序的: N2=2*pi*0.9/(0.1*pi);if rem(N2,2)==0 N2=N2+1;End 和: N3=2*pi*0.9/(0.1*pi);if rem(N3,2)==0 N3=N3+1;End 改為了:
N2=N2+mod(N2,2);和: B=0.1*pi;(B為過渡帶寬)N3=ceil(2*0.9*pi/B);N3=N3+mod(N3,2);2.在設計高通濾波器時先是使用的矩形窗,用矩形窗驗證出來的結果中低頻語音分量依舊很強,不能將其全部抑制在0,之后換窗,選著了最小衰減可以到達53dB的海明窗,再次試驗,非常成功!3.3.2結果分析
經過回放三個不同類型濾波器輸出的語音信號,并與原語音信號對比得到了如下結論。
語音高頻成分音質非常尖銳,齒音中,聲音有些暗淡。語音低頻成分音質沉穩,空間感覺強,語音渾厚。語音中頻成分音質有力度,有通透感。
4.體會與收獲
以往都是通過課本來感性的認知語音信號,通過本次的課程設計,讓我對語音信號有了一個較為實際的認識。于此同時,讓我再次把數字信號處理及數字濾波器的設計方法重新進行了復習和學習。而對于Matlab,也再次讓我感受到了其功能的強大。最為重要的是,本次課 17
程設計讓我重新審視了學習的過程:只去做實驗是不行的,首先還是要思考,遇到了問題查書籍,百度搜索也只是一種手段,更加重要的是想,再理解,只有這樣才能真正的做好實驗。
5.參考文獻
《數字信號處理》錢同惠、百度文庫
第三篇:基于Matlab的ASK仿真
基于MATLAB的2ASK調制
根據數字帶通調制原理,運用MATLAB進行編程,仿真調制過程,記錄并分析仿真結果。
形成設計報告。
課程設計需要運用MATLAB編程實現2ASK,2FSK,2PSK,2DPSK調制解調過程,并且輸出其調制后的波形,畫出頻譜、功率譜密度圖,并比較各種調制的誤碼率情況,討論其調制效果。
二進制數字調制技術原理
數字信號的傳輸方式分為基帶傳輸和帶通傳輸,在實際應用中,大多數信道具有帶通特性而不能直接傳輸基帶信號。為了使數字信號在帶通信道中傳輸,必須使用數字基帶信號對載波進行調制,以使信號與信道的特性相匹配。這種用數字基帶信號控制載波,把數字基帶信號變換為數字帶通信號的過程稱為數字調制。通常使用鍵控法來實現數字調制,比如對載波的振幅、頻率和相位進行鍵控。
2ASK
2ASK信號的產生方法通常有兩種:模擬調制和鍵控法。解調有相干解調和非相干解調。P=1時f(t)=Acoswt;p=0時f(t)=0;其功率譜密度是基帶信號功率譜的線性搬移
2.2 數字調制技術的仿真實現
MATLAB是一種功能強大的科學計算和工程仿真軟件,它的交互式集成界面能夠幫助用戶快速的完成數值分析、數字信號處理、仿真建模、和優化等功能。本課程設計需要運用MATLAB編程實現2ASK,2FSK,2PSK,2DPSK調制解調過程,并且輸出其調制后的波形,畫出頻譜、功率譜密度圖,并比較各種調制的誤碼率情況,討論其調制效果。
3.程序與調試圖形 3.1、ASK調制解調 3.1.1 ASK程序: 3.3.2 ASK圖形:
close all clear all n=16;fc=1000000;
%fc>=bitRate fc/bitRate為每個二進制包含sin周期個數 bitRate=1000000;N=50;%noise=ti;noise=10;
signal=source(n,N);transmittedSignal=askModu(signal,bitRate,fc,N);signal1=gussian(transmittedSignal,noise);configueSignal=demoASK(signal1,bitRate,fc,n,N);
1.隨機信號的產生
2.ASK信號調制
3.信道加噪聲后信號
4.接收信號的解調
5.解調出的二進制信號
3.4、誤碼率分析
1.ASK誤碼率分析
ASK clear all close all i=10;j=5000;
t=linspace(0,5,j);%取0,0.001,0.002。。5 共5001個點
fc=10;fm=i/5;B=2*fc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%生基帶信號
a=round(rand(1,i));%隨機序列
figure(2)
產
plot(rand(1,i))st=t;for n=1:10
if a(n)<1;
for m=j/i*(n-1)+1:j/i*n
%一個信號取500個點
st(m)=0;
end
else
for m=j/i*(n-1)+1:j/i*n
st(m)=1;
end
end end figure(1);subplot(421);plot(t,st);axis([0,5,-1,2]);title('基帶信號');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%載波
s1=cos(2*pi*fc*t);subplot(422);
plot(s1);title('載波信號');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%調制
e_2ask=st.*s1;subplot(423);plot(t,e_2ask);title('已調信號');noise =rand(1,j);
e_2ask=e_2ask+noise;%加入噪聲
subplot(424);plot(t,e_2ask);
title('加入噪聲的信號');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相干解調
at=e_2ask.*cos(2*pi*fc*t);at=at-mean(at);subplot(425);plot(t,at);
title('相乘后信號');
[f,af] = T2F(t,at);%通過低通濾波器
[t,at] = lpf(f,af,2*fm);subplot(426);
plot(t,at);
title('解調后波形');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%抽樣判決
for m=0:i-1;
if at(1,m*500+250)+0.5<0.5;
for j=m*500+1:(m+1)*500;
at(1,j)=0;
end else
for j=m*500+1:(m+1)*500;
at(1,j)=1;
end end end subplot(427);plot(t,at);axis([0,5,-1,2]);title('抽樣判決后波形')
第四篇:數字信號處理課后習題Matlab作業
數字信號處理MATLAB
第1頁
習題數字信號處理MATLAB習題
M1-1 已知g1(t)?cos(6?t),g2(t)?cos(14?t),g3(t)?cos(26?t),以抽樣頻率fsam?10Hz對上述三個信號進行抽樣。在同一張圖上畫出g1(t),g2(t)和g3(t)及抽樣點,對所得結果進行討論。
解:
第2頁
從以上兩幅圖中均可看出,三個余弦函數的周期雖然不同,但它們抽樣后相應抽樣點所對應的值都相同。那么這樣還原回原先的函數就變成相同的,實際上是不一樣的。這是抽樣頻率太小的原因,我們應該增大抽樣頻率才能真實還原。如下圖:f=50Hz
第3頁
程序代碼
f=10;
t=-0.2:0.001:0.2;g1=cos(6.*pi.*t);g2=cos(14.*pi.*t);g3=cos(26.*pi.*t);k=-0.2:1/f:0.2;h1=cos(6.*pi.*k);h2=cos(14.*pi.*k);h3=cos(26.*pi.*k);% subplot(3,1,1);
% plot(k,h1,'r.',t,g1,'r');% xlabel('t');% ylabel('g1(t)');% subplot(3,1,2);
% plot(k,h2,'g.',t,g2,'g');% xlabel('t');% ylabel('g2(t)');% subplot(3,1,3);
% plot(k,h3,'b.',t,g3,'b');% xlabel('t');% ylabel('g3(t)');
plot(t,g1,'r',t,g2,'g',t,g3,'b',k,h1,'r.',k,h2,'g.',k,h3,'b.')
第4頁
xlabel('t');ylabel('g(t)');
legend('g1(t)','g2(t)','g3(t)');
M2-1 利用DFT的性質,編寫一MATLAB程序,計算下列序列的循環卷積。
(1)g[k]={1,-3,4,2,0,-2,},h[k]={3,0,1,-1,2,1};(2)x[k]=cos(?k/2),y[k]=3k,k=0,1,2,3,4,5。解:(1)循環卷積結果
6.0000-3.0000 17.0000-2.0000 7.0000-13.0000
程序代碼
第5頁
g=[1-3 4 2 0-2];h=[3 0 1-1 2 1];l=length(g);L=2*l-1;GE=fft(g,L);HE=fft(h,L);y1=ifft(GE.*HE);for n=1:l
if n+l<=L
y2(n)=y1(n)+y1(n+l);else
y2(n)=y1(n);
end end y2
stem(0:l-1,y2)xlabel('k')ylabel('y(k)')title('循環卷積')
(2)循環卷積結果
-71.0000-213.0000 89.0000 267.0000 73.0000 219.0000
第6頁
程序代碼
k=0:5;
x=cos(pi.*k./2);y=3.^k;l=length(x);L=2*l-1;GE=fft(x,L);HE=fft(y,L);y1=ifft(GE.*HE);for n=1:l
if n+l<=L
y2(n)=y1(n)+y1(n+l);
else
y2(n)=y1(n);
end end y2
stem(0:l-1,y2)xlabel('k')ylabel('y’(k)')title('循環卷積')
第7頁
M2-2 已知序列x[k]???cos(k?/2N),|k|?N
0,其他?(1)計算序列DTFT的表達式X(ej?),并畫出N=10時,X(ej?)的曲線。
(2)編寫一MATLAB程序,利用fft函數,計算N=10時,序列x[k]的DTFT在?m?2?m/N的抽樣值。利用hold函數,將抽樣點畫在X(ej?)的曲線上。
解:
(1)X(e)?DTFT{x[k]}?j?k????x[k]e??j?k?k??N?cos(k?/2N)eN?j?k
程序代碼
N=10;k=-N:N;
x=cos(k.*pi./(2*N));W=linspace(-pi,pi,512);
第8頁
X=zeros(1,length(W));for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k);X=X+X1;end
plot(W,abs(X))xlabel('W');ylabel('abs(X)');
(2)
程序代碼
N=10;k=-N:N;
x=cos(k.*pi./(2*N));X_21=fft(x,21);L=-10:10;
W=linspace(-pi,pi,1024);X=zeros(1,length(W));for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k);X=X+X1;end
第9頁
plot(W,abs(X));hold on;
plot(2*pi*L/21,fftshift(abs(X_21)),'o');xlabel('W');ylabel('abs(X)');
M2-3 已知一離散序列為x[k]?Acos?0k?Bcos[(?0???)k]。用長度N=64的Hamming窗對信號截短后近似計算其頻譜。試用不同的A和B的取值,確定用Hamming窗能分辨的最小的譜峰間隔??w?c的值。
解:f1=100Hz f2=120Hz時
2?中cN
f2=140Hz時
第10頁
f2=160Hz時
第11頁
由以上三幅圖可見
f2=140Hz時,各譜峰可分辨。則?f又
??w?c2?N
?40Hz
且
??w???T?2??fT?2??40?1 800所以c=3.2(近似值)
程序代碼
N=64;L=1024;
f1=100;f2=160;;fs=800;
A=1;B1=1;B2=0.5;B3=0.25;B4=0.05;T=1/fs;ws=2*pi*fs;k=0:N-1;
x1=A*cos(2*pi*f1*T*k)+B1*cos(2*pi*f2*T*k);x2=A*cos(2*pi*f1*T*k)+B2*cos(2*pi*f2*T*k);x3=A*cos(2*pi*f1*T*k)+B3*cos(2*pi*f2*T*k);x4=A*cos(2*pi*f1*T*k)+B4*cos(2*pi*f2*T*k);hf=(hamming(N))';x1=x1.*hf;x2=x2.*hf;x3=x3.*hf;x4=x4.*hf;
X1=fftshift(fft(x1,L));X2=fftshift(fft(x2,L));X3=fftshift(fft(x3,L));X4=fftshift(fft(x4,L));
W=T*(-ws/2+(0:L-1)*ws/L)/(2*pi);subplot(2,2,1);plot(W,abs(X1));title('A=1,B=1');xlabel('W');ylabel('X1');subplot(2,2,2);
第12頁
plot(W,abs(X2));title('A=1,B=0.5');xlabel('W');ylabel('X2');subplot(2,2,3);plot(W,abs(X3));title('A=1,B=0.25');xlabel('W');ylabel('X3');subplot(2,2,4);plot(W,abs(X4));title('A=1,B=0.05');xlabel('W');ylabel('X4');
M2-4 已知一離散序列為x[k]?cos?0k?0.75cos?1k,0?k?63。其中, ?0?2?/15,?1?2.3?/15。
(1)對x[k]做64點FFT, 畫出此時信號的譜。
(2)如果(1)中顯示的譜不能分辨兩個譜峰,是否可對(1)中的64點信號補0而分辨出兩個譜峰。通過編程進行證實,并解釋其原因。
解:(1)
第13頁
程序代碼
W0=2*pi/15;W1=2.3*pi/15;N=64;k=0:N-1;
x=cos(W0*k)+0.75*cos(W1*k);X=fft(x);
plot(k/N,abs(X));grid on;
title('64點FFT');
(2)
第14頁
第15頁
由以上三幅圖看出:不能對(1)中的64點信號補零而分辨出兩個譜峰,這樣的方法只能改變屏幕分辨率,但可以通過加hamming窗來實現對譜峰的分辨。程序代碼
W0=2*pi/15;W1=2.3*pi/15;N=64;L=1024;k=0:N-1;
x=cos(W0*k)+0.75*cos(W1*k);X=fft(x,L);
plot((0:L-1)/N,abs(X));grid on;
title('1024點FFT');
M2-5 已知一連續信號為x(t)=exp(-3t)u(t),試利用DFT近似分析
第16頁
其頻譜。若要求頻率分辨率為1Hz,試確定抽樣頻率fsam、抽樣點數N以及持續時間Tp。
解:
本題使用矩形窗,則N?fsamfsam1??fsam,Tp??1 ?f1?f
第17頁
由以上三幅圖可以看出當fsam越來越大時,近似值越來越接近
第18頁
于實際值。即fsam越大擬合效果越好,造成的混疊也是在可以允許的范圍內。程序代碼
fs=100;ws=2*pi*fs;Ts=1/fs;N=fs;
x=exp(-3*Ts*(0:N-1));y=fft(x,N);l=length(y);
k=linspace(-ws/2,ws/2,l);
plot(k,Ts*fftshift(abs(y)),'b:');hold on;
w=linspace(-ws/2,ws/2,1024);y1=sqrt(1./(9+w.^2));plot(w,y1,'r')
title('fs=100Hz時的頻譜')legend('近似值','實際值);
M2-6 試用DFT近似計算高斯信號g(t)?exp(?dt2)的頻譜抽樣值。
π?2通過和頻譜的理論值G(j?)?exp(?)比較,討論如何根據時域的信
d4d號來恰當地選取截短長度和抽樣頻率使計算誤差能滿足精度要求。
解:
第19頁
第20頁
由以上三幅圖可以看出:
當時域截取長度相同時,抽樣間隔越小時誤差越小,當抽樣間隔一定時,時域截取長度越長,誤差越小。當取抽樣間隔為1S,時域截取長度為2S時,誤差較大,絕對誤差在0.5左右;當抽樣間隔為0,5S,時域截取長度為2S時,誤差比間隔為1S時小,絕對誤差不大于0.2;當抽樣間隔為0.5S時域截取長度為4S時,誤差更小,絕對誤差不大于0.04。因為時域截取長度越長,保留下來的原信號中的信息越多,抽樣間隔越小,頻譜越不容易發生混疊,所以所得頻譜與理論值相比,誤差更小。
程序代碼
Ts=0.5;N=4;N0=64;
k=(-N/2:(N/2))*Ts;
第21頁
x=exp(-pi*(k).^2);X=Ts*fftshift(fft(x,N0));
w=-pi/Ts:2*pi/N0/Ts:(pi-2*pi/N0)/Ts;XT=(pi/pi)^0.5*exp(-w.^2/4/pi);subplot(2,1,1)
plot(w/pi,abs(X),'-o',w/pi,XT);xlabel('omega/pi');ylabel('X(jomega)');
legend('試驗值','理論值');
title(['Ts=',num2str(Ts)subplot(2,1,2)plot(w/pi,abs(X)-XT)ylabel('實驗誤差')
xlabel('omega/pi');
'N=',num2str(N)]);第22頁
' '
第五篇:MATLAB作業
第一章 MATLAB R2010a簡介
主要內容總結如下:
本章主要介紹了MATLAB的功能和它的用戶界面以及MATLAB R2010a的路徑搜索。MATLAB的功能是多種多樣的,有數學計算功能、圖形化顯示功能、M語言編程功能、編譯功能Simulink建模仿真功能,自動代碼生成功能,圖形用戶界面開發功能等一系列功。在介紹MATLAB R2010a用戶界面時,主要介紹了它的啟動方法,主菜單及其功能。學習心得體會:
通過本章的學習,我了解了MATLAB的基本功能,認識了它的界面和啟動方法,以及主菜單功能,被他強大的計算功能和其他功能深深吸引,學會了MATLAB,將會為我以后學習其他方面的知識提供一種工具,使學習其他的東西更加的方便。我非常喜歡這門課,所以我一定會努力學好它的。
第二章 基本使用方法
主要內容總結如下:
本章主要介紹了MATLAB中一些簡單的數學運算和常用的數學函數和數學運算符,標點符號的使用,常用的操作命令和快捷鍵,整數、浮點數、復數、邏輯變量等數據類型和他們之間的轉換,數據類型操作函數和變量,MATLAB中的關系運算符邏輯運算符等運算符和它們的優先級,以及一些基礎函數,如位操作函數、邏輯運算函數、集合函數、時間與日期函數。本章還介紹了MATLAB中的腳本文件。
學習心得體會:
通過本章的學習我了解了MATLAB中的簡單數學運算符,一些操作命令和快捷鍵,MATLAB R2010a的數據類型和運算符,還有一些基礎函數,腳本文件。我認為這些東西是基本的東西,但是我又必須要學好它們,只有把這些基礎都掌握了,才能為以后的學習打下堅實的基礎。我認為MATLAB中的許多函數我應該熟練它的作用,做到看到函數要知道其作用。我在這一部分的學習中,腳本文件的編寫對我來說有一定的困難,我以后一定多加練習,學好他們。
第三章 數組和向量
主要內容總結如下:
本章主要介紹了數組和向量兩個大的方面。其中數組介紹了數組的創建,數組的操作(如獲取數組中的元素,從數組中移除元素,數組算術操作,數組邏輯運算數組連接,切片、重排和線性化數組),和一些實例應用;向量部分介紹了向量的創建,尺寸,索引(包括數值索引、邏輯索引),縮短,向量操作(包括算術操作、邏輯操作、應用庫函數、連接、切片)等知識。學習心得體會:
通過本章的學習我對數組和向量有了一個全新的認識,這部分的學習有許多細節需要注意,如我們在從數組中移除元素時,元素必須整列整行的移除;行向量可以直接輸入,列向量輸入時中間需要用到分號;.*,./,和.^被分別用作逐個元素相乘,相除,及指數運算等等。還有一些函數如zeros,rand,diag,magic等都可以產生一些常用的數組,學習時應該熟練掌握。向量的索引對我來說是比較難的知識,剛開始學的時候不太理解,不過后來經過我反復的學習逐漸了解,這部分知識我還需要努力。向量和數組這部分知識在以后的幾章會經常用到,并且和實際聯系的也比較緊密,所以我必須要學好他們。
第四章MATLAB 的數學運算 本章主要內容總結如下:
本章主要介紹了多項式與差值,函數運算,微分方程三大模塊。其中多項式與插值主要介紹了多項式的四則運算,roots函數,polyval函數,polyder函數,多項式擬合,以及數據插值;函數運算主要介紹了函數圖像的繪制,函數的極值,數值積分和含參數函數的使用;微分積分主要介紹了常微分初值問題和常微分方程邊值問題。
學習心得體會:
通過本章的學習掌握了在MATLAB中對多項式的處理,和圖形的繪制,極值的求解,函數的求解,微分、積分的處理。本章所介紹的MATLAB處理方法處理的是高等數學中經常遇到的問題,從這里可以知道MATLAB是一種很好的數學工具。本章學習時有許多問題需要注意,如多項式在相加時要等長;繪制函數圖像的函數為fplot;使用含參數函數還可以通過匿名函數來實現,函數的參數在使用之前必須先賦值等問題。這一部分也介紹了許許多多的函數,我應該在課下熟練掌握,充分理解其作用。
第五章 字符串、單元數組和結構體
本章主要內容總結如下:
本章主要介紹了的字符串生成、執行、字符串與數值之間的轉化;單元數組的生成和一些操作;結構體的生成和一些操作。在MATLAB中,生成字符串的簡單方法為stringname=’the content of the string’.;單元數組可以通過賦值語句直接創建,也可以利用cell函數先為單元數組分配一個內存空間,然后再給各個單元賦值;結構體的生成可以是直接輸入,也可以使用結構體生成函數struct。還介紹了字符串的比較,字符串的查找和替換;單元數組的顯示和圖形顯示和單元數組元素的刪除;結構體中有添加成員變量,刪除成員變量和調用成員變量。學習心得體會:
通過本章的學習了解了字符串,單元數組,結構體的一些基本的使用技巧,學會了字符串,單元數組,結構體的創建,以及它們的一些特殊的用途,如利用函數來進行字符串與數值之間的轉化,單元數組的圖形顯示,在結構體中添加成員變量。字符串,單元數組和結構體是三種特殊的數據結構,字符串用于對字符型數據結構進行操作,單元數組和結構體數據類型允許用戶將不同類型的數據集成為一個單一的變量,因此,相關的數據可以通過一個單元數組或是結構體進行組織和操作。在這一部分的學習中,感覺比較有意思,所以對這部分知識興趣很高。覺的這一部分知識很是有用,所以應該好好學習。
第六章 MATLAB編程
本章主要內容總結如下:
本章主要介紹了MATLAB的腳本文件和編輯器/調試器,程序設計和開發,關系運算符和邏輯變量,邏輯運算符和函數,條件語句,和循環。其中腳本文件和編輯器主要介紹了腳本文件如何創建和使用,以及它的命令窗口的介紹,腳本文件的調試,如何使用腳本文件存儲數據,以及如何控制輸入和輸出;程序設計和開發主要介紹了算法和控制結構,結構化程序設計以及偽代碼;關系運算符和邏輯變量主要介紹了logical類,logical函數以及使用邏輯數組訪問數組;邏輯運算符和函數主要介紹了一些如與、或、非等邏輯運算符以及它,們的優先級別和使用方法,還介紹了短路邏輯運算符,find函數;條件語句主要介紹了if語句,elseif語句和它們的使用方法,還簡要介紹了如何輸入和輸出參數的數量;循環主要介紹了for循環,break和continue語句,使用數組作為循環索引,隱含循環,使用邏輯數組作為掩碼等知識。學習心得體會:
通過本章的學習初步掌握了MATLAB的腳本文件及其編輯和調試方法,掌握了MATLAB的程序設計和開發流程,和MATLAB的關系運算符、邏輯運算及函數操作,MATLAB中的流程控制語句包括if語句,switch語句,contine語句。本章的腳本文件對今后的學習非常有幫助,條件語句和循環語句可用于解決實際生活中許多問題。我對這一部分的認識是:感覺不是太難,又不會的地方也及時請教老師,所以沒有遺留太多疑問。再者,大一時也學過條件語句和循環語句,所以學起來沒有那么的吃力。習題如下:
編程:求[100]以內的全部素數(素數是大于1且除了1和它本身以外不能被其他任何整數所整除的整數。為了判斷整數m是否為素數,一個最簡單的辦法用2,3,4,5, m-1這些數逐個去除m看能否除盡,如果全都除不盡,則m是素數;否則,只要其中一個能除盡,則m不是素數。)
程序如下: disp(2)for m=3:1:100 for x=2:1:m-1 if rem(m,x)==0 break
elseif(x>=m-1)disp(m)end
end end
第七章 MATLAB的符號處理
本章主要內容總結如下:
本章主要介紹了符號運算的簡介,符號表達式的化簡與替換,符號函數圖形的繪制,符號微積分,符號方程的求解,符號積分變換,MAPLE函數的調用,符號函數計算器。其中符號運算簡介主要介紹了符號對象,符號變量、表達式的生成,以及findsym函數和subs函數,符號和數值之間的轉化;符號表達式的化簡與替換主要介紹了用collect函數合并同類項,用expand函數進行符號表達式的展開,用horner函數將函數轉化為嵌套格式,用factor函數來實現因式分解的功能,simplify和simple函數來實現表達式的化簡,符號表達式的替換可以用subexpr和subs函數;符號函數圖形繪制主要介紹了符號函數曲線的繪制,符號函數曲面網格圖及表面圖的繪制和等值線的繪制;符號微積分主要介紹了符號表達式求極限,符號微分、積分,級數求和和Taylor級數;符號方程的求解主要包括代數方程的求解,代數方程組的求解,微分方程的求解,微分方程組的求解等;符號積分變換主要有符號傅立葉變換,符號拉普拉斯變換,符號Z變換。學習心得體會: 通過本章的學習了解了MATLAB符號計算的幾個功能,有計算、線性代數、化簡、方程求解、特殊的數學函數、符號積分變換,MATLAB提供了與MAPLE的良好接口,通過maple.m和map.m實現。這樣,MATLAB可以實現更強大的符號運算功能功能,為習慣于MAPLE的用戶提供了方便。本章的學習讓我領會了MATLAB強大的符號功能,能夠很好的解決實際生活中問題。
第八章 MATLAB繪圖
本章主要內容總結如下:
本章主要介紹了MATLAB的繪圖功能,首先介紹了MATLAB的圖形窗口,包括圖形窗口的創建與控制,圖形窗口的菜單欄的主要功能;然后介紹了基本圖形的繪制,有二維圖形的繪制,三維圖形的繪制以及如何對圖形進行操作;介紹了特殊圖形的繪制,有條形圖、面積圖、餅狀圖、離散型數據圖、方向矢量圖和速度矢量圖、等值線繪制,還介紹了在圖形中添加基本注釋,包括文本框,線條,箭頭,框圖,標題,坐標軸,顏色條,圖例;最后介紹了一些三維圖像的高級控制。學習心得體會:
通過本章的學習了解了MATLAB的圖形窗口,掌握了MATLAB基本二維圖形、三維圖形的繪制,以及圖形的基本操作,掌握了MATLAB特殊圖形的繪制,如柱狀圖,餅狀圖,掌握了圖形注釋的添加及管理,了解了三維圖形的視點控制及顏色、光照控制。本章的學習和實際生活聯系的非常緊密,把抽象的數學式子轉化為易理解的圖形,給人一目了然的清晰感覺。這部分知識是一個很好的繪圖工具,對解決其他學科的問題很有幫助。我在學習這一部分知識時,上課緊跟著老師的思路走,模塊很是清晰,學習興趣極高,但是仍存在許多不足的地方,課下一定再進一步努力學習。習題如下:
繪圖:在同一圖像窗口中繪制六副子圖
1.在第一個子圖中同時繪制不同線型不同顏色的正弦和余弦曲線,添加圖例、坐標軸、標題、網格線和邊框線。2.在第二個子圖中繪制磁盤空間的餅圖。3.在第三個子圖中繪制三維網格圖(surf)。4.在第四個子圖中繪制三維曲面圖(mesh)。
5.在第五—六個子圖中同時繪制二維正弦離散圖和紅色點劃線余弦階躍圖。
程序如下:
>> x=[0:pi/10:2*pi];subplot(3,2,1);plot(x,sin(x));hold on;plot(x,cos(x),'r-.');grid on box on >> m=[8 17];>> subplot(3,2,2);>> pie(m,{'可用空間','已用空間'});>> t=0:pi/50:10*pi;>> subplot(3,2,3),plot3(sin(t),cos(t),t);>> grid on >> axis square >> X=-1:0.1:1;>> Y=X';>> X1=X.^2;>> Y1=Y.^2;>> p=ones(3,1);>> p=ones(length(X),1);>> q=ones(1,length(Y));>> X1=p*X1;>> Y1=Y1*q;>> Z=X1+Y1;>> subplot(3,2,4)>> mesh(X,Y,Z)>> n=[0:10:360]*pi/180;>> N=sin(n);>> subplot(3,2,5),stem(n,N)>> subplot(3,2,6),stairs(n,N,'r-.');
運行結果如下:
第九章 句柄圖形
本章主要內容總結如下:
本章主要介紹了MATLAB 的圖形對象,圖形對象的屬性,和圖形對象的屬性值的設置和查詢。MATLAB介紹了Root對象,Figure對象,Core對象,Plot對象,Annotation對象,Group對象;圖形對象的屬性包括公共屬性和特有屬性;圖形對象屬性值的設置和查詢首先通過構造函數返回其創建的對象句柄,然后利用該句柄,用戶可以在對象創建完成后對其屬性值進行查詢和修改。學習心得體會:
通過本章的學習了解MATLAB圖形對象及其屬性,掌握MATLAB圖形對象屬性的設置及其查詢,掌握了MATLAB圖形句柄的訪問及其操作。句柄圖形是MATLAB中用于創建圖形的面向對象的圖形系統。通過圖形句柄,MATLAB可以對圖形元素進行操作,而這些圖形正是產生各種類型圖形的基礎。利用圖形句柄,可以在MATLAB中修改圖形的顯示效果,創建繪圖函數。對于這部分知識的學習有所欠缺,課下應該多加練習。
第十章GUI設計
本章主要內容總結如下:
本章主要介紹了GUI的基本控件,如何創建簡單的GUI,如何向界面中添加控件以及如何設置設置控件的屬性和編寫響應函數;本章還介紹了通過向導創建GUI界面和通過程序創建GUI,其中通過向導創建包括1,啟動GUIDE2,2,向GUI中添加控件并設置控件標志和控件顯示文本,3,創建菜單;通過程序創建GUI的步驟主要包括1,需要實現的功能及需要包含的控件2,需要使用的技術3,創建GUI,4,創建GUI界面和控件,5,初始化GUI,6,定義響應函數,7,該GUI的完整M文件;本章還介紹了如何編寫GUI代碼,包括GUI文件和響應函數。學習心得體會:
通過本章的學習掌握了圖形用戶界面和GUI中所包含的多個圖形對象,如窗口、圖標、菜單和文本的用戶界面。以某種方式選擇或激活這些對象,通常引起動作或發生變化。了解GUI的基本控件,掌握了通過GUIDE創建GUI的方法,也掌握了通過程序創建GUI的方法。對于本章的知識我是比較陌生的,以前從來沒有接觸過,所以剛開始學的時候比較吃力,后來經過老師的講解,和自己在課下的學習,對這部分知識有了一個系統的了解。做作業時,剛開始時,程序運行出錯,后來經過反復修改,終于運行成功,看著自己的GUI成功運行,心中是比較興奮的,課下一定會多加練習的。習題如下:
GUI:繪制拋物線y=ax2+bx+c的圖像,其中參數a、b、c及標題等由界面文本編輯框輸入,設計邊框線按鈕和邊框菜單。M文件程序如下:
function varargout = untitled(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @untitled_OpeningFcn,...'gui_OutputFcn', @untitled_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else
gui_mainfcn(gui_State, varargin{:});end
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;function go_Callback(hObject, eventdata, handles)grid on function tit_Callback(hObject, eventdata, handles)title('?t′??ú??y=a*x.^2+b*x+c')function ax_Callback(hObject, eventdata, handles)axis([-7 7-10 10])function gf_Callback(hObject, eventdata, handles)grid off
function togglebutton5_Callback(hObject, eventdata, handles)function op_Callback(hObject, eventdata, handles)box on box off
function bo_Callback(hObject, eventdata, handles)box on
function bf_Callback(hObject, eventdata, handles)box off
function pushbutton2_Callback(hObject, eventdata, handles)function edit1_Callback(hObject, eventdata, handles)x=str2num(get(handles.edit1,'string'));t=-10:.001:10;y=x(1)*t.^2+x(2)*t+x(3);plot(t,y)function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end
運行結果如下:
第十一章 Simulink的建模與仿真
本章主要內容總結如下:
本章主要介紹了Simulink中的建模方法和基本功能模塊,首先介紹了Simulink建模的基本操作和基本流程,然后介紹了Simulink的各,功能模塊和常見Simulink模型,最后介紹S函數,并通過實例建模以使讀者對Simulink有進一步的認識。學習心得體會:
通過本章的學習了解了Simulink的建模方法和基本模塊,這一部分知識對我來說完全是新的內容,學起來有點吃力,所以應該多花點時間在這部分。這部分知識和專業聯系的比較緊密,專業性很強,一定要學好。
第十二章 文件和數據的導入與導出
本章主要內容總結如下:
本章主要介紹了文件的存儲,數據的導入,文件的打開,文本文件的讀寫,低級文件I/O和利用界面工具導入數據。文本文件的讀寫可以用csvread,csvwrite,dlmread,dlmwrite,textread,textscan等函數來實現。學習心得體會:
通過本章的學習了解了MATLAB的基本數據操作,掌握了MATLAB中文本文件的讀寫方式和MATLAB通過界面導入導出數據,了解MATLAB中的基本輸入輸出函數,這部分知識要深入了解,達到融會貫通的程度。