久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: MATLAB程序設(shè)計(FFT算法、回聲產(chǎn)生、MATLAB錄音) [打印本頁]

作者: 我是你的小號    時間: 2019-7-12 15:58
標(biāo)題: MATLAB程序設(shè)計(FFT算法、回聲產(chǎn)生、MATLAB錄音)
FFT算法坐標(biāo)軸優(yōu)化:
對于MATLAB離散處理信號頻域分析,我們一般會使用FFT,及快速傅里葉算法來實現(xiàn),但是實際使用時需要對
坐標(biāo)軸以及幅值進行調(diào)整,以使繪出的頻譜圖更具有直觀性,下面給出個人習(xí)慣用的代碼如下:
function [  ] = fftplot(hObject, eventdata, handles,h, x, Fs )
% x :輸入信 h:所繪制的畫板句柄  Fs:采樣頻率
L = length(x);
NFFT = 2^nextpow2(L);               %確定FFT變換的長度
y = fft(x, NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);    %頻率向量
axes(h);   %指定畫板
plot(f, 2*abs(y(1:NFFT/2+1)));      %繪制頻域圖像
grid on;
title(頻譜圖');
xlabel('Frequency (Hz)');
ylabel('|y(f)|');
由于這個是個人在GUI中使用的,因此有hObject, eventdata, handles這三個參數(shù),具體GUI使用可以看附件
NFFT = 2^nextpow2(L);   這一步就是將FFT點數(shù)調(diào)整至2的冪次方,來基2算法來加快FFT速度
y = fft(x, NFFT)/L;除以L是為了調(diào)整幅值,使其與實際幅值一致



接下來是回聲的產(chǎn)生,分單回聲和多回聲:
單回聲代碼如下:
y    =  handles.y;
Fs   =  handles.Fs;
s = round(get(handles. slider17,'value')*length(y));
set(handles.text37,'string',num2str(s));
a= get(handles. slider18,'value');
Bz=[1,zeros(1,s),a];
Az=1;
y1=filter(Bz,Az,[y;zeros(length(y),1)]);
axes(handles.axes3);
plot(y1,'linewidth',2);
grid on;
h = handles.axes4;
fftplot( hObject, eventdata, handles,h,y1, Fs);
y是音頻數(shù)據(jù),F(xiàn)s為采樣頻率,使用load 函數(shù)加載一個音頻即可得到
s 是回聲延時系數(shù)
a 是衰減系數(shù)
Bz=[1,zeros(1,s),a];
Az=1;
y1=filter(Bz,Az,[y;zeros(length(y),1)]);
y1 即為疊加了單回聲的音頻
sound(m*y1,n*Fs)即可播放,m為音量控制系數(shù),n為播放速度控制系數(shù)
下面是多回聲的:
function pushbutton17_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
fs   =  handles.Fs;  %多回聲
y    =  handles.y;
N =   handles.chong;
s = round(0.2*length(y));
a= 0.5;
Bz=[1,zeros(1,s)*N,a^N];
Az=[1,zeros(1,s),a];
y1=filter(Bz,Az,[y;zeros(2*length(y),1)]);
axes(handles.axes3);
plot(y1,'linewidth',2);
grid on;
sound(y1,fs);
guidata(hObject,handles);
N為多回聲的重數(shù)


最后面給出使用MATLAB錄音的一段GUI程序:
function pushbutton13_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
num = [8000, 11025, 22050,44100];
value = get(handles.popupmenu3,'value');
Fs = num(value);
handles.rFs = Fs;
handles.R = audiorecorder(Fs,  handles.bits , handles.channel) ;
record(handles.R);
guidata(hObject,handles);

function pushbutton14_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
stop(handles.R);
%play(handles.R);
%audiowrite('myaudio.wav');
guidata(hObject,handles);

function pushbutton15_Callback(hObject, eventdata, handles)
      handles.y= getaudiodata(handles.R);
      handles.Fs =handles.rFs;
y    =  handles.y;
   Fs   =  handles.Fs;
     sound(a*y,v*Fs);

簡單來說,就是用audiorecorder和record開始錄音,stop停止錄音
但是網(wǎng)上大部分資料顯示可以使用PLAY 函數(shù)來播放音頻,但是可能是由于個人MATLAB不夠給力的
原因,用play只有電流聲音,于是改用getaudiodata和sound來播放,效果還不錯


以上的部分都只是個人做的一個關(guān)于數(shù)字信號處理課程設(shè)計的部分內(nèi)容,還做了一點關(guān)于音頻均衡器和濾波方面的內(nèi)容
有興趣的話可以下載附件來看看,嘻嘻
小弟我才疏學(xué)淺,還望各位大佬們多多包涵。



數(shù)字信號處理課設(shè).doc

1.4 MB, 下載次數(shù): 24, 下載積分: 黑幣 -5

附帶程序源碼






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美综合网 | 精品久久视频 | 国产吃瓜黑料一区二区 | 日韩中文字幕在线观看 | www亚洲天堂 | 日韩欧美精品一区 | 日本午夜视频 | 天天干狠狠干 | 欧美成人极品 | 国产精品亚洲精品 | 天天爽天天操 | 国产在线日韩 | 精品国产精品三级精品av网址 | 欧美视频在线观看免费 | 亚洲国产福利 | 色婷婷在线视频 | 久久理论片 | 久久精品小视频 | 国产精品一区二 | 中文字幕一区二区三区乱码 | 六月丁香综合 | 黄色录像免费看 | 国产不卡在线视频 | 亚洲免费视频网站 | 精品视频网| 黄色午夜| 欧美日韩免费一区二区三区 | 午夜在线观看免费视频 | 欧美性猛交一区二区三区精品 | 午夜在线观看免费视频 | 日韩精品国产精品 | 中文字幕永久 | 免费精品视频 | 青青草视频网站 | 中文字幕免费视频 | 日批视频网站 | 亚洲天堂一区二区三区 | 亚洲色网址 | 午夜免费福利 | 免费毛片视频 | 成年人国产 |