設計基于MATLAB,添加的噪音為1/20的高斯白噪音
0.png (34.85 KB, 下載次數: 56)
下載附件
2018-12-22 20:50 上傳
MATLAB源程序如下:
- 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, ~, handles, varargin)
- handles.output = hObject;
- guidata(hObject, handles);
- function varargout = untitled_OutputFcn(~, ~, handles)
- varargout{1} = handles.output;
- function pushbutton1_Callback(~, ~, handles)
- global bit SingleC Number_of_Wave_Data_Point SingleCn;
- [file,path]=uigetfile('*.m4a;*.mp3;*.wav;*.flac');
- set(handles.text3,'String',[path,file]); % 將路徑及文件名顯示在文本框中
- [y,Fs] = audioread([path,file]);
- bit=Fs;
- SingleC=y(:,1); % 抽取第 1 聲道 即抽取其中一維數組
- SingleCn=SingleC;
- Single_Channel_Max = max(abs(SingleC)); %幅值數據歸一化
- Single_Channel_Wave = SingleC/Single_Channel_Max; %幅值重構
- Number_of_Wave_Data_Point = length(Single_Channel_Wave);
- Time_Single_Channel_Wave=(0:Number_of_Wave_Data_Point-1)/bit; %計算數據點時刻 , 需要將橫軸的純數字點轉化為時間(秒)
- axes(handles.axes1);
- plot(Time_Single_Channel_Wave,Single_Channel_Wave); %調取數據點,繪制圖像
- xlabel('時間/s','FontSize',10,'FontWeight','bold');
- ylabel('幅值','FontSize',10,'FontWeight','bold');
- axes(handles.axes2);
- Single_Channel_Wave_Fft = fft(SingleC);
- Fft_Xabel=(0 : Number_of_Wave_Data_Point/2)*bit / Number_of_Wave_Data_Point; %提取一般數據,以繪制單邊譜波形
- Single_Channel_Wave_Fft_Max = max(abs(Single_Channel_Wave_Fft)); %幅值數據歸一化
- Single_Channel_Wave_Fft = Single_Channel_Wave_Fft/Single_Channel_Wave_Fft_Max; %幅值重構
- plot(Fft_Xabel,abs(Single_Channel_Wave_Fft (1 : Number_of_Wave_Data_Point / 2 +1)));%調用數據,繪制圖像,以Fft_Xabel的數據為橫軸數據,
- xlabel('頻率/Hz','FontSize',10,'FontWeight','bold');
- ylabel('頻率幅值','FontSize',10,'FontWeight','bold');
- function nc_Callback(~, ~, handles)
- global bit SingleC Number_of_Wave_Data_Point SingleCn;
- noise=wgn(Number_of_Wave_Data_Point,1,1);
- SingleCn=SingleC+0.05*noise; %加入高斯白噪聲
- Single_Channel_Max = max(abs(SingleCn)); %幅值數據歸一化
- Single_Channel_Wave = SingleCn/Single_Channel_Max; %幅值重構
- Time_Single_Channel_Wave=(0:Number_of_Wave_Data_Point-1)/bit; %計算數據點時刻 , 需要將橫軸的純數字點轉化為時間(秒)
- axes(handles.axes1);
- plot(Time_Single_Channel_Wave,Single_Channel_Wave); %調取數據點,繪制圖像
- xlabel('時間/s','FontSize',10,'FontWeight','bold');
- ylabel('幅值','FontSize',10,'FontWeight','bold');
- axes(handles.axes2);
- Single_Channel_Wave_Fft = fft(SingleCn);
- Fft_Xabel=(0 : Number_of_Wave_Data_Point/2)*bit / Number_of_Wave_Data_Point; %提取一般數據,以繪制單邊譜波形
- Single_Channel_Wave_Fft_Max = max(abs(Single_Channel_Wave_Fft)); %幅值數據歸一化
- Single_Channel_Wave_Fft = Single_Channel_Wave_Fft/Single_Channel_Wave_Fft_Max; %幅值重構
- plot(Fft_Xabel,abs(Single_Channel_Wave_Fft (1 : Number_of_Wave_Data_Point / 2 +1)));%調用數據,繪制圖像,以Fft_Xabel的數據為橫軸數據,
- xlabel('頻率/Hz','FontSize',10,'FontWeight','bold');
- ylabel('頻率幅值','FontSize',10,'FontWeight','bold');
- set(handles.uipanel2,'Title','加噪后的時域波形和頻譜圖');
- Time_Noise=(0:Number_of_Wave_Data_Point-1)/bit; %計算數據點時刻
- Noise_Max = max(abs(SingleCn)); %幅值數據歸一化
- SingleCn = SingleCn/Noise_Max; %幅值重構
- axes(handles.axes3);
- plot(Time_Noise,0.05*noise,'r');
- xlabel('時間/s');
- ylabel('幅值');
- function stp_Callback(~, ~, ~)
- clear sound;
- function pushbutton11_Callback(~, ~, handles)
- global bit SingleC Number_of_Wave_Data_Point SingleCn;
- SingleCn=SingleC;
- Single_Channel_Max = max(abs(SingleCn)); %幅值數據歸一化
- Single_Channel_Wave = SingleCn/Single_Channel_Max; %幅值重構
- Time_Single_Channel_Wave=(0:Number_of_Wave_Data_Point-1)/bit; %計算數據點時刻 , 需要將橫軸的純數字點轉化為時間(秒)
- axes(handles.axes1);
- plot(Time_Single_Channel_Wave,Single_Channel_Wave); %調取數據點,繪制圖像
- xlabel('時間/s','FontSize',10,'FontWeight','bold');
- ylabel('幅值','FontSize',10,'FontWeight','bold');
- axes(handles.axes2);
- Single_Channel_Wave_Fft = fft(SingleCn);
- Fft_Xabel=(0 : Number_of_Wave_Data_Point/2)*bit / Number_of_Wave_Data_Point; %提取一般數據,以繪制單邊譜波形
- Single_Channel_Wave_Fft_Max = max(abs(Single_Channel_Wave_Fft)); %幅值數據歸一化
- Single_Channel_Wave_Fft = Single_Channel_Wave_Fft/Single_Channel_Wave_Fft_Max; %幅值重構
- plot(Fft_Xabel,abs(Single_Channel_Wave_Fft (1 : Number_of_Wave_Data_Point / 2 +1)));%調用數據,繪制圖像,以Fft_Xabel的數據為橫軸數據,
- xlabel('頻率/Hz','FontSize',10,'FontWeight','bold');
- ylabel('頻率幅值','FontSize',10,'FontWeight','bold');
- set(handles.uipanel2,'Title','原始信號的時域波形和頻譜圖');
- axes(handles.axes3);
- plot(0);
- xlabel('時間/s');
- ylabel('幅值');
- function pc_Callback(~, ~, handles)
- global SingleCn bit
- sound(SingleCn,0.5*get(handles.spd,'value')*bit);
復制代碼
所有資料51hei提供下載:
信號大作業.rar
(62.34 KB, 下載次數: 19)
2018-12-22 13:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|