信號分析課程設計過程
『壹』 數字信號課程設計
Matlab在數字信號處理課程設計中的應用
作者:李永全 來源:現代電子技術
摘 要:分析了數字信號處理課程的重要性及特點,為了幫助學生理解與掌握課程中的基本概念、基本原理、基本分析方法,提出了用Matlab進行數字信號處理課程設計的思路,並闡述了課程設計的具體方法、步驟和內容。
關鍵詞:數字信號處理;課程設計;Matlab;頻譜分析
1 《數字信號處理》課程的特點
《數字信號處理》課程是一門理論和技術發展十分迅速、應用非常廣泛的前沿性學科,他的理論性和實踐性都很強,他的特點是:
(1)要求的數學知識多,包括高等代數、數值分析、概率統計、隨機過程等。
(2)要求掌握的基礎知識強,網路理論、信號與系統是本課程的理論基礎。
(3)與其他學科密切相關,即與通信理論、計算機、微電子技術不可分,又是人工智慧、模式識別、神經網路等新興學科的理論基礎之一。
學生在學習這門課程時,普遍感到數字信號處理的概念抽象,對其中的分析方法與基本理論不能很好地理解與掌握。因此,如何幫助學生理解與掌握課程中的基本概念、基本原理、基本分析方法以及綜合應用所學知識解決實際問題的能力,是本課程教學中所要解決的關鍵問題。為了配合《數字信號處理》專業基礎課的理論教學,我們在電子信息工程專業教學計劃中安排了二周的《數字信號處理》課程設計,他是針對《數字信號處理》的基礎理論和演算法進行實踐環節的一個綜合訓練,以便學習鞏固所學的知識,加強理論和實際結合的能力,培養學生的綜合設計能力與實際工作能力。
Matlab語言是一種廣泛應用於工程計算及數值分析 領域的新型高級語言,Matlab功能強大、簡單易學、編程效率高,深受廣大科技工作者的歡迎。特別是Matlab還具有信號分析工具箱,不需具備很強的編程能力,就可以很方便地進行信號分析、處理和設計。因此,選擇用Matlab進行課程設計。
2 基於Matlab的課程設計
為了鞏固所學的數字信號處理理論知識,使學生對信號的採集、處理、傳輸、顯示和存儲等有一個系統的掌握和理解,精心地安排了課程設計的內容:錄制一段個人自己的語音信號,並對錄制的信號進行采樣;畫出采樣後語音信號的時域波形和頻譜圖;給定濾波器的性能指標,採用窗函數法和雙線性變換設計濾波器,並畫出濾波器的頻率響應;然後用自己設計的濾波器對採集的信號進行濾波,畫出濾波後信號的時域波形和頻譜,並對濾波前後的信號進行對比,分析信號的變化;回放語音信號;最後,設計一個信號處理系統界面。下面對各步驟加以具體說明。
2.1 語音信號的採集
要求學生利用Windows下的錄音機,錄制一段自己的話音,時間在1 s內。然後在Matlab軟體平台下,利用函數wavread對語音信號進行采樣,記住采樣頻率和采樣點數。通過wavread函數的使用,學生很快理解了采樣頻率、采樣位數等概念。
2.2 語音信號的頻譜分析
要求學生首先畫出語音信號的時域波形;然後對語音號進行快速傅里葉變換,得到信號的頻譜特性,從而加深學生對頻譜特性的理解。其程序如下:
2.3 設計數字濾波器和畫出其頻率響應
給出各濾波器的性能指標:
(1)低通濾波器性能指標 fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通濾波器性能指標 fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)帶通濾波器性能指標 fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As=100 dB,Ap=1 dB。
要求學生用窗函數法和雙線性變換法設計上面要求的3種濾波器。在Matlab中,可以利用函數fir1設計FIR濾波器,可以利用函數butte, cheby1和ellip設計IIR濾波器;利用Matlab中的函數freqz畫出各濾波器的頻率響應。程序如下:
2.4 用濾波器對信號進行濾波
要求學生用自己設計的各濾波器分別對採集的信號進行濾波,在Matlab中,FIR濾波器利用函數fftfilt對信號進行濾波,IIR濾波器利用函數filter對信號進行濾波。
2.5 比較濾波前後語音信號的波形及頻譜
要求學生在一個窗口同時畫出濾波前後的波形及頻 譜。其程序如下:
2.6 回放語音信號
在Matlab中,函數sound可以對聲音進行回放。其調用格式:sound(x,fs,bits);可以感覺濾波前後的聲音有變化。
2.7 設計系統界面
為了使編制的程序操作方便,要求有能力的學生,設計處理系統的用戶界面。在所設計的系統界面上可以選擇濾波器的類型,輸入濾波器的參數,顯示濾波器的頻率響應,選擇信號等。
3 結語
筆者在電信97,98,99,00四屆學生中,採用Matlab進行數字信號處理課程設計,實踐證明,使學生加深了對課堂抽象概念的理解,鞏固了課堂上所學的理論知識,並能很好地理解與掌握數字信號處理中的基本概念、基本原理、基本分析方法。在課程設計中,讓學生錄制自己的聲音,設計濾波器對聲音進行處理,大大激發了同學們的學習興趣,使學生很快地掌握編程方法和解決實際問題的技巧,取得了良好的教學效果。
參考文獻
〔1〕程佩青.數字信號處理教程〔M〕.北京:清華大學出版社,2002.
〔2〕劉敏,魏玲.Matlab通信模擬與應用〔M〕.北京:國防工業出版社,2001.
『貳』 數字信號處理的課程設計怎麼做
數字信號處理綜合設計
一、實驗目的
1.學會MATLAB的使用,掌握MATLAB的程序設計方法;
2.掌握在Windows環境下語音信號採集的方法;
3.掌握數字信號處理的基本概念、基本理論和基本方法;
4.掌握MATLAB設計FIR和IIR數字濾波器的方法;
5.學會用MATLAB對信號進行分析和處理。
二、實驗原理
參考《數字信號處理》教材。
三、主要實驗儀器及材料
微型計算機、Matlab6.5教學版、TC編程環境。
四、實驗內容
1.語音信號的採集
要求利用windows下的錄音機(開始—程序—附件—娛樂—錄音機,文件—屬性—立即轉換—8000KHz,8位,單聲道)或其他軟體,錄制一段自己的話音,時間控制在1秒左右。然後在MATLAB軟體平台下,利用函數wavread對語音信號進行采樣,記住采樣頻率和采樣點數。通過wavread函數的使用,要求理解采樣頻率、采樣位數等概念。
wavread函數調用格式:
y=wavread(file),讀取file所規定的wav文件,返回採樣值放在向量y中。
[y,fs,nbits]=wavread(file),采樣值放在向量y中,fs表示采樣頻率(Hz),nbits表示采樣位數。
y=wavread(file,N),讀取前N點的采樣值放在向量y中。
y=wavread(file,[N1,N2]),讀取從N1點到N2點的采樣值放在向量y中。
2.語音信號的頻譜分析
要求首先畫出語音信號的時域波形;然後對語音信號進行頻譜分析,在MATLAB中,可以利用函數fft對信號進行快速付立葉變換,得到信號的頻譜特性;從而加深對頻譜特性的理解。
3.設計數字濾波器和畫出頻率響應
根據語音信號的特點給出有關濾波器的性能指標:1)低通濾波器性能指標,fp=1000Hz,fc=1200 Hz, As=100dB,Ap=1dB;2)高通濾波器性能指標,fc=2800 Hz,fp=3000 Hz As=100dB,Ap=1dB;3)帶通濾波器性能指標,fp1=1200 Hz,fp2=3000 Hz,fc1=1000 Hz,fc2=3200 Hz,As=100dB,Ap=1dB。要求學生首先用窗函數法設計上面要求的三種濾波器,在MATLAB中,可以利用函數fir1設計FIR濾波器,然後在用雙線性變換法設計上面要求的三種濾波器;之後再利用函數butter和cheby1設計上面要求的三種IIR濾波器。最後,利用MATLAB中的函數freqz畫出各濾波器的頻率響應。
4.用濾波器對信號進行濾波
比較FIR和IIR兩種濾波器的性能,然後用性能好的各濾波器分別對採集的信號進行濾波,在MATLAB中,FIR濾波器利用函數fftfilt對信號進行濾波,IIR濾波器利用函數filter對信號進行濾波。
5.比較濾波前後語音信號的波形及頻譜
要求在一個窗口同時畫出濾波前後的波形及頻譜。
6.回放語音信號
在MATLAB中,函數sound可以對聲音進行回放。其調用格式:
sound(x,fs,bits);
可以感覺濾波前後的聲音有變化。
五、實驗思考
1.雙線性變換法中Ω和ω之間的關系是非線性的,在實驗中你注意到這種非線性關系了嗎?從哪幾種數字濾波器的幅頻特性曲線中可以觀察到這種非線性關系?
2.能否利用公式完成脈沖響應不變法的數字濾波器設計?為什麼?
六、實驗報告要求
1.簡述實驗原理及目的。
2.按照實驗步驟及要求,比較各種情況下的濾波性能。
3.總結實驗所得主要結論。
4.簡要回答思考題。
『叄』 信號分析處理課程設計
信號分析處理
以你的任務書解決好
『肆』 數字信號課程設計(要源程序)
7.
clc;clear all;
[x1,Fs,bits]=wavread('2.wav');
%sound(y,Fs,bits);
figure(1);
plot(x1); %做原始語音信號的時域圖形
title('原始語音信號');
xlabel('time n');ylabel('yinliang 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;
fs=50000;
fc1=1100;
wc1=2*pi*fc1/fs;
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
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('信號經過低通濾波器(頻域)');
fc2=4900;
wc2=2*pi*fc2/fs;
wp2=2*pi*4800/fs;ws2=2*pi*5000/fs;
N2=ceil(4*pi/(ws2-wp2));
Window=boxcar(N2+1);
b2=fir1(N2,wc2/pi,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('信號經過高通濾波器(頻域)');
f1=1100;f2=3100; %帶通濾波器的通帶范圍
w1=2*pi*f1/fs; %0.1567=0.0499pi
w2=2*pi*f2/fs; %0.4417=0.1407pi
w=[w1,w2];
N3=ceil(4*pi/(2*pi*200/fs));
b3=fir1(N3,w/pi,'high');%帶通濾波器
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('信號經過帶通濾波器(頻域)');
sound(x1_low,Fs);
sound(x1_high,Fs);
sound(x1_daitong,Fs);
『伍』 數字信號處理課程設計
這個問題我來回答哈
採集系統說明:
麥克風輸入方式MiclnMATLAB函數
MATLAB中提供了強大的數據採集工具箱(DAQ-Data Acquisition Toolbox),可滿足控制音效卡進行數據採集的要求:
wavrecord(n,fs,ch,dtype) %記錄聲音
waveplay(y,fs) %發送向量信號
wavread(file) %讀取wave文件
sound(y,fs) %向揚聲器送出音頻信號
濾波函數說明:
採用Kaiser window FIR:
Sampling Frequency: 8192
Type:Lowpass
Fc:956.6
Beta:5
分幀函數說明:
語音處理工具箱:VOICEBOX Speech Processing Toolboxv5中提供了該函數:
function f=enframe(x,win,inc)
端點檢測函數說明:
zcr = sum(signs.*diffs, 2); %計算過零率
amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);
%計算短時能量
【參考書目】
1.《現代語音處理技術及應用》
2.《現代語音技術基礎與應用》
3.《語音信號處理》
4.《語音信號處理[專著]》
5.《Visual C++開發工具程序員參考手冊》
6. 《信號處理濾波器設計--基於MATLAB和Mathematic》
7. 《數字信號處理及其MATLAB實現》
8. 《MATLAB數字信號詳解》
原程序:
【附源程序】
1.界面:
clear
global hpop hlist
clf reset
H=axes('unit','normalized','position',[0,0,1,1],'visible','off');
set(gcf,'currentaxes',H);
str='\fontname{隸書}';
h_fig=get(H,'parent');
set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.6]);
hlist=uicontrol(h_fig,'style','list','unit','normalized',...
'position',[0.7,0.6,0.2,0.2],...
'string','錄音|濾波|分幀|端點檢測|錄音回放','MAX',2);
hpush=uicontrol(h_fig,'style','push','unit','normalized',...
'position',[0.76,0.32,0.1,0.06],'string',{'運行'},'callback',...
'yuyin');
分幀:
function f=enframe(x,win,inc)
nx=length(x);
nwin=length(win);
if (nwin == 1)
len = win;
else
len = nwin;
end
if (nargin < 3)
inc = len;
end
nf = fix((nx-len+inc)/inc);
f=zeros(nf,len);
indf= inc*(0:(nf-1)).';
inds = (1:len);
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));
if (nwin > 1)
w = win(:)';
f = f .* w(ones(nf,1),:);
end
global hlist
B=get(hlist,'value');
switch B
case 1
fs = 11025;
x = wavrecord(5*fs);
subplot('position',[0.001,0.03,1,0.8]),plot(x);...
title('原圖');
axis square;axis off
case 2
I=imread('bonemarr.tif');
J=imadjust(I,[0 1],[1 0],1.3);
subplot('position',[0.05,0.6,0.3,0.3]),subplot('position',[0.05,0.6,0.3,0.3]),imshow(I);...
title('原圖');
axis square;axis off
subplot('position',[0.38,0.6,0.3,0.3]),imshow(J),title('調整後');
case 3
f=enframe(x,10);
subplot('position',[0.05,0.6,0.3,0.3]),subplot('position',[0.05,0.6,0.3,0.3]),plot(x);...
title('原圖');
axis square;axis off
subplot('position',[0.38,0.6,0.3,0.3]),plot(f),title('分幀後');
case 4
[x1,x2] = vad(x)
case 5
wavplay(x);
end
2.檢測程序:
www.starlunwen.com
www.starlunwen.com
『陸』 數字信號處理 課程設計
我的使用MATLAB處理的自己的音頻信號,你可以參考一下,附件以發送!
『柒』 河北工業大學信號課程設計 (急求)
課程設計心得體會
這是本學期最後的一次大的綜合型實驗——課程設計,課程設計是培養學生綜合運用所學知識,發現、提出,、分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程。本課題是在掌握labview虛擬儀器的使用和運用的基礎上實現對心電信號的處理及分析。經過兩周的課程設計,使我了解了人體心電信號的時域特徵和頻譜特徵,從而進一步了解了數字信號的分析方法,對濾波器的應用有了更深一步的體會,但是整個過程曲折可謂一語難盡。在此期間我也失落過,也曾一度熱情高漲。從開始時滿富盛激情到最後復雜心情,點點滴滴無不令我回味無長。
選定課程後,知道自己要用到labview軟體,總是想著要了解該軟體一些東西,比如怎樣使用,跟課題的密切關聯等一些相關問題,但是總是感覺時間還很充裕,一直往後拖,直到最後意識到第二天要開始真正的著手做課程設計了,軟體的使用還不會,現在看來,在一開始的時候就已經比別人的節奏慢了。
從而導致在第一節課的時候用了大部分時間都是在熟悉這個軟體的功能是什麼,怎麼使用這個軟體等一些類似這樣的基礎性的問題, 當時感覺自己很無知,同時也感受到了危機感。課下我做了很多的功課,包括對這個軟體的介紹,使用,一些基本函數的調用和使用說明和一些簡單程序的設計,對Labview虛擬儀器這個軟體有了初步的認識和了解,同時也我對這個軟體產生了興趣,只需在程序框圖中調用幾個所需要的函數,進行連線,就能在前面板中看到運行結果,感覺很神奇。有了這些做准備,在第二節課和以後的課程中,很快就進入了角色,知道課設的要求以及要做的東西都有哪些。
在這期間,有的時候會遇到一些問題,比如在對時間插值的時候調用FOR循環結構和條件case結構時,要用到移位寄存器對數據更新迭代,這樣才能確保對時間插值的正確性。還有在後面對濾波器設計的的時候,濾波器的一些參數設置要通過讀懂「幫助」裡面的內容後再結合本課題的參數進行設置。
總起來說在這次的課程設計中,我學會了好多東西,一方面加深了對課本知識的認識,另一方面提高了實驗操作能力,並培養了我獨自思考能力和自我解決問題的能力。通過對程序框圖的設計和前面板的顯示框圖,我體會到了labview作為具有靈活的圖形處理及可視化功能以及易學易懂的圖形化語言的虛擬儀器軟體的強大的功能。
臨近期末,非常感謝周老師在本學期給予我們的細致生動的教學,也許以後不見得會再學習更多更加專業的後續課程,但是它對於拓展專業及相關知識面、溫習所學的高數內容、應用理論分析問題、解決問題的能力卻會讓我受益匪淺。