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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3793|回復: 0
打印 上一主題 下一主題
收起左側

MATLAB程序設計(FFT算法、回聲產生、MATLAB錄音)

[復制鏈接]
跳轉到指定樓層
樓主
ID:432932 發表于 2019-7-12 15:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
FFT算法坐標軸優化:
對于MATLAB離散處理信號頻域分析,我們一般會使用FFT,及快速傅里葉算法來實現,但是實際使用時需要對
坐標軸以及幅值進行調整,以使繪出的頻譜圖更具有直觀性,下面給出個人習慣用的代碼如下:
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這三個參數,具體GUI使用可以看附件
NFFT = 2^nextpow2(L);   這一步就是將FFT點數調整至2的冪次方,來基2算法來加快FFT速度
y = fft(x, NFFT)/L;除以L是為了調整幅值,使其與實際幅值一致



接下來是回聲的產生,分單回聲和多回聲:
單回聲代碼如下:
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是音頻數據,Fs為采樣頻率,使用load 函數加載一個音頻即可得到
s 是回聲延時系數
a 是衰減系數
Bz=[1,zeros(1,s),a];
Az=1;
y1=filter(Bz,Az,[y;zeros(length(y),1)]);
y1 即為疊加了單回聲的音頻
sound(m*y1,n*Fs)即可播放,m為音量控制系數,n為播放速度控制系數
下面是多回聲的:
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為多回聲的重數


最后面給出使用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停止錄音
但是網上大部分資料顯示可以使用PLAY 函數來播放音頻,但是可能是由于個人MATLAB不夠給力的
原因,用play只有電流聲音,于是改用getaudiodata和sound來播放,效果還不錯


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



數字信號處理課設.doc

1.4 MB, 下載次數: 24, 下載積分: 黑幣 -5

附帶程序源碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美性生活免费 | 色综合区 | 国产无套一区二区三区久久 | 国产99精品| 一区二区三区在线 | 91精品国产91久久久久久丝袜 | 国产激情视频 | 国产成人精品免费视频大全最热 | 在线伊人 | 久久精品视频12 | 亚洲一区二区三区高清 | 欧美一级免费 | 国产精品久久一区二区三区 | 在线观看国产 | 精品一区二区在线观看 | 免费黄色片在线观看 | 国产精品久久久乱弄 | 91激情视频 | 中文字幕综合 | 免费看国产片在线观看 | 成人欧美一区二区三区白人 | 一区二区三区电影网 | 黄色综合 | av免费网站在线观看 | 一区二区三区视频在线观看 | 久久久久国产精品人 | 国产小视频精品 | 在线一区二区三区 | 国产亚洲成av人片在线观看桃 | 国产日批 | 一级毛片中国 | 午夜欧美一区二区三区在线播放 | 91精品导航 | 午夜视频在线免费观看 | 欧美国产在线一区 | 日韩欧美三区 | 国产精品日韩欧美一区二区三区 | 国产精品久久久久永久免费观看 | 久久精品成人热国产成 | 中文字幕高清 | 国产综合精品一区二区三区 |