⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdmguifnsound.m

📁 关于MIMO-OFDM的matlab和simulink仿真程序或模型(有OFDM的simulink仿真模型
💻 M
字号:
function OFDMguiFnSound(action)% Consolidates all of the GUI callbacks into one main function% Alan Brooks the man wrote thisstringArray = [...	% Slide 1	'Welcome to the Sound OFDM demo. This simulates QAM    '...	'and OFDM using a sound file as input to demonstrate   '...	'the advantages of using OFDM with a multipath         '...	'channel.                                              '...	'Choose the strength of multipath present in the       '...	'channel and the plot will show the current channels   '...	'frequency response.                                   ';...	% Slide 2	'Here is a frequency domain (FD) representation of the '...	'QAM data to be transmitted.                           '...	'Press any key to continue.                            '...	'                                                      '...	'                                                      '...	'                                                      '...	'                                                      ';...	% Slide 2b	'For QAM (single-carrier) transmission, this plot      '...	'shows the channel frequency response (black) and the  '...	'received data (light blue) overlayed on the original  '...	'data (blue). Note that the received data is slightly  '...	'distorted due to the fading channel caused by         '...	'multipath.                                            '...	'Press any key to continue.                            ';...	% Slide 2c	'Here is a frequency domain (FD) representation of the '...	'OFDM data to be transmitted.                          '...	'Press any key to continue.                            '...	'                                                      '...	'                                                      '...	'                                                      '...	'                                                      ';...	% Slide 2d	'For OFDM (multi-carrier) transmission, this plot      '...	'shows the channel (black) and received data (light    '...	'blue) overlayed on the original data (blue). Note     '...	'that the OFDM received data also exhibits multipath   '...	'distortion. Also, notice that the OFDM signal is      '...	'spread out over more bandwidth than QAM since OFDM    '...	'uses many carrier frequencies.                        ';...	% Slide 3	'Here are the final plots of the recovered sound files '...	'along with the Bit Error Rate (BER) for OFDM and QAM. '...	'Click any of the 3 buttons to hear these sounds.      '...	'Since OFDM handles multipath better, the sound is     '...	'less distorted.                                       '...	'The Long Sounds demonstrate longer examples that have '...	'already been processed offline.                       '];	switch(action)	case 'next'		%---------------------------------------		textHnd1=findobj('Tag','StaticTextFeedback');		nextHnd1=findobj('Tag','PushbuttonNext'); % handler for the Next button		% axis handlers			axisHnd1=findobj('Tag','Axes1');	% main			axisHnd2=findobj('Tag','AxesOriginal');	% original			axisHnd3=findobj('Tag','AxesQAM');	% QAM			axisHnd4=findobj('Tag','AxesOFDM');	% OFDM		% multipath handlers			textHnd2=findobj('Tag','StaticTextMultipath');			popupHnd1=findobj('Tag','PopupMenuMultipath');		% Generated Sounds handlers			textHnd3=findobj('Tag','StaticTextGenSounds');			OriginalHnd1=findobj('Tag','PushbuttonOriginal');			QAMHnd1=findobj('Tag','PushbuttonQAM');			OFDMHnd1=findobj('Tag','PushbuttonOFDM');		% Long Sounds handlers			textHnd4=findobj('Tag','StaticTextLongSounds');			OriginalLongHnd1=findobj('Tag','PushbuttonOriginalLong');			QAMLongHnd1=findobj('Tag','PushbuttonQAMLong');			OFDMLongHnd1=findobj('Tag','PushbuttonOFDMLong');		% BER handlers			textHnd5=findobj('Tag','StaticTextBER1'); % label			textHnd6=findobj('Tag','StaticTextBER2'); % label			textHnd7=findobj('Tag','StaticTextBERQAM'); % OFDM BER field			textHnd8=findobj('Tag','StaticTextBEROFDM'); % QAM BER field		global COUNTER		if isempty(COUNTER)			COUNTER = 0;	% initialize COUNTER if doesn't exist		end		COUNTER = COUNTER + 1;		[r c]=size(stringArray);		if COUNTER > r			COUNTER = 0;         close(gcf)
         % SoundGUI			SoundGUI_win	% windows only		else			set(textHnd1,'String',stringArray(COUNTER,:))			switch(COUNTER)				case 1					% disp('Slide 1')					% Show/Hide the GUI						set(nextHnd1,'String','Next')						% show multipath controls							set(textHnd2,'Visible','on')							set(popupHnd1,'Visible','on')						% enable multipath controls							set(textHnd2,'Enable','on')							set(popupHnd1,'Enable','on')						% show main axis							set(axisHnd1,'Visible','on'),axes(axisHnd1)						% hide other axis's							set(axisHnd2,'Visible','off')								set(axisHnd3,'Visible','off')							set(axisHnd4,'Visible','off')						% hide generated sounds stuff							set(textHnd3,'Visible','off')								set(OriginalHnd1,'Visible','off')							set(QAMHnd1,'Visible','off')							set(OFDMHnd1,'Visible','off')						% hide long sounds stuff							set(textHnd4,'Visible','off')								set(OriginalLongHnd1,'Visible','off')							set(QAMLongHnd1,'Visible','off')							set(OFDMLongHnd1,'Visible','off')						% hide the BER displays							set(textHnd5,'Visible','off')							set(textHnd6,'Visible','off')							set(textHnd7,'Visible','off')							set(textHnd8,'Visible','off')					set(popupHnd1,'Value',1)	% no channel by default					% default plot					plot(0:.05:.5,zeros(1,11)),axis([0 0.5 -12 6]),title('Channel Magnitude Response')					xlabel('Digital Frequency'),ylabel('Magnitude (dB)')								case {2, 3, 4, 5}					% disp('Slide 2')					% disble multipath controls						set(textHnd2,'Enable','off')						set(popupHnd1,'Enable','off')					setupSoundGUI	% sets up the Sound GUI variables					set(textHnd1,'String','QAM Simulation... Please Wait')					QAM					set(textHnd1,'String',stringArray(COUNTER,:))					fft_temp = abs(fft(QAM_tx_data));					fft_temp = fft_temp(1:floor(0.5*length(fft_temp))); % truncate (+ spectrum)					dig_x_axis = (1:length(fft_temp)) / (2*length(fft_temp));					plot(dig_x_axis, fft_temp)					title('FFT of Transmitted QAM')					% calculate the BER and store for slide 6						global BER_QAM_TEMP;						binary_err_bits_QAM = 0;						for i = 1:length(data_in)							err = abs(data_in(i)-QAM_data_out(i));							if err > 0								binary_err_bits_QAM = binary_err_bits_QAM + 1;							end						end						BER_QAM_TEMP = 100 * binary_err_bits_QAM/data_length;					COUNTER = COUNTER + 1;					pause										% disp('Slide 2b')					set(textHnd1,'String',stringArray(COUNTER,:))					hold on						% QAM Plotting						fft_temp = abs(fft(QAM_rx_data));						fft_temp = fft_temp(1:floor(0.5*length(fft_temp))); % truncate						plot(dig_x_axis, fft_temp,'c'),title(' ')						% channel display						if channel_on == 1							ComputeChannelGUI							size_mag=max(mag)-min(mag);	% for scaled channel plot							plot(W/(2*pi),(0.5*max(fft_temp)/size_mag)*(mag + abs(min(mag))) + 0.5*max(fft_temp),'k')						end					hold off					COUNTER = COUNTER + 1;					pause										% disp('Slide 2c')					set(textHnd1,'String','OFDM Simulation... Please Wait')					OFDM					set(textHnd1,'String',stringArray(COUNTER,:))					fft_temp = abs(fft(xmit));					fft_temp = fft_temp(1:floor(0.5*length(fft_temp))); % truncate					dig_x_axis = (1:length(fft_temp)) / (2*length(fft_temp));					plot(dig_x_axis, fft_temp)					title('FFT of Transmitted OFDM')					% calculate the BER and store for slide 6						global BER_OFDM_TEMP;						binary_err_bits_OFDM = 0;						for i = 1:length(data_in)							err = abs(data_in(i)-output(i));							if err > 0								binary_err_bits_OFDM = binary_err_bits_OFDM +1;							end						end						BER_OFDM_TEMP = 100 * binary_err_bits_OFDM/data_length;					COUNTER = COUNTER + 1;					pause										% disp('Slide 2d')					set(textHnd1,'String',stringArray(COUNTER,:))					hold on						% OFDM Plotting						fft_temp = abs(fft(recv));						fft_temp = fft_temp(1:floor(0.5*length(fft_temp))); % truncate						plot(dig_x_axis, fft_temp,'c'),title(' ')						% channel display 						if channel_on == 1							plot(W/(2*pi),(0.5*max(fft_temp)/size_mag)*(mag + abs(min(mag))) + 0.5*max(fft_temp),'k')						end					hold off								case 6					% disp('Slide 3')					setupSoundGUI					% hide main axis						plot(0)	% clear the plot						axis off						% set(axisHnd1,'Visible','off')					% show other axis's						set(axisHnd2,'Visible','on')							set(axisHnd3,'Visible','on')						set(axisHnd4,'Visible','on')					% hide multipath controls						set(textHnd2,'Visible','off')						set(popupHnd1,'Visible','off')					% show generated sound buttons						set(textHnd3,'Visible','on')							set(OriginalHnd1,'Visible','on')						set(QAMHnd1,'Visible','on')						set(OFDMHnd1,'Visible','on')					% show long sounds stuff						set(textHnd4,'Visible','on')							set(OriginalLongHnd1,'Visible','on')						set(QAMLongHnd1,'Visible','on')						set(OFDMLongHnd1,'Visible','on')					% show the BER displays						set(textHnd5,'Visible','on')						set(textHnd6,'Visible','on')						set(textHnd7,'Visible','on') % QAM						set(textHnd8,'Visible','on') % OFDM					% Display the BERs					global BER_QAM_TEMP;					global BER_OFDM_TEMP;					set(textHnd7,'String',strcat(num2str(BER_QAM_TEMP,3),' %'))					set(textHnd8,'String',strcat(num2str(BER_OFDM_TEMP,3),' %'))					clear global BER_QAM_TEMP;	% clean up the globals					clear global BER_OFDM_TEMP;					% Plot the Sounds					%  Note: axes(handle) sets to plot on the handle axis					axes(axisHnd2)					plot(wavread(file_name)),title('Original sound')					axes(axisHnd3)					plot(wavread('QAM_out.wav')),title('QAM sound')					axes(axisHnd4)					plot(wavread('OFDM_out.wav')),title('OFDM sound')					set(nextHnd1,'String','Start Over')	% repeat if desired								otherwise					disp('error')					COUNTER = 0;			end		end						case 'mp_channel'	%-----------------------------------		ComputeChannelGUI		if noChannel ~= 1			% large or small case			plot(W/(2*pi),mag),axis([0 0.5 -12 6]),title('Channel Magnitude Response')			xlabel('Digital Frequency'),ylabel('Magnitude (dB)')		else			% none case			plot(0:.05:.5,zeros(1,11)),axis([0 0.5 -12 6]),title('Channel Magnitude Response')			xlabel('Digital Frequency'),ylabel('Magnitude (dB)')			end			case 'close'	%---------------------------------------		clear global COUNTER		close(gcbf)			case 'PlayOriginal'	%-----------------------------------		sound(wavread('shortest.wav'),11025)			case 'PlayQAM'	%---------------------------------------		sound(wavread('QAM_out.wav'),11025)			case 'PlayOFDM'	%---------------------------------------		sound(wavread('OFDM_out.wav'),11025)		case 'PlayOriginalLong'	%-----------------------------------		sound(wavread('Long.wav'),11025)			case 'PlayQAMLong'	%---------------------------------------		sound(wavread('QAM_Long.wav'),11025)			case 'PlayOFDMLong'	%---------------------------------------		sound(wavread('OFDM_Long.wav'),11025)		case 'figure'	%---------------------------------------		% this is called whenever the figure is first created -or NOT???% 		textHnd1=findobj('Tag','StaticTextFeedback');% 		axisHnd1=findobj('Tag','Axes1');% 		set(textHnd1,'String','Sound OFDM Demo') % default text message% 		set(axisHnd1,'Visible','off')	% hide Axis to beginend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -