📄 a_filter_design.m
字号:
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayOriginal', ...
'FontSize',14, ...
'Position',[489 364 107 28], ...
'String','Original', ...
'Tag','PushbuttonOriginal', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayQAM', ...
'FontSize',14, ...
'Position',[489 329 107 28], ...
'String','QAM', ...
'Tag','PushbuttonQAM', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayOFDM', ...
'FontSize',14, ...
'Position',[489 293 107 28], ...
'String','OFDM', ...
'Tag','PushbuttonOFDM', ...
'Visible','off');
b = axes('Parent',a, ...
'Units','points', ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat2, ...
'Position',[51 363 361 84], ...
'Tag','AxesOriginal', ...
'XColor',[0 0 0], ...
'YColor',[0 0 0], ...
'ZColor',[0 0 0]);
44
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','Line1', ...
'XData',1, ...
'YData',0);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.997222 -1.37349 0], ...
'Tag','Text13', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.141667 2.22045e-16 0], ...
'Rotation',90, ...
'Tag','Text14', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.286111 1.80723 0], ...
'Tag','Text15', ...
'Visible','off');
set(get(c,'Parent'),'ZLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.997222 1.13253 0], ...
'Tag','Text16', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
b = axes('Parent',a, ...
'Units','points', ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat3, ...
'Position',[51 249 363 82], ...
'Tag','AxesQAM', ...
'XColor',[0 0 0], ...
'YColor',[0 0 0], ...
'ZColor',[0 0 0]);
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','Line2', ...
'XData',1, ...
'YData',0);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.997238 -1.38272 0], ...
'Tag','Text9', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.140884 0 0], ...
'Rotation',90, ...
'Tag','Text10', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.28453 4.69136 0], ...
'Tag','Text11', ...
'Visible','off');
set(get(c,'Parent'),'ZLabel',c);
45
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[0.997238 1.1358 0], ...
'Tag','Text12', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
b = axes('Parent',a, ...
'Units','points', ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat4, ...
'Position',[51 138 360 78], ...
'Tag','AxesOFDM', ...
'XColor',[0 0 0], ...
'YColor',[0 0 0], ...
'ZColor',[0 0 0]);
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','Line3', ...
'XData',1, ...
'YData',0);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[1 -1.4026 0], ...
'Tag','Text5', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.091922 0 0], ...
'Rotation',90, ...
'Tag','Text6', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.286908 7.87013 0], ...
'Tag','Text7', ...
'Visible','off');
set(get(c,'Parent'),'ZLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[1 1.14286 0], ...
'Tag','Text8', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
b = axes('Parent',a, ...
'Units','points', ...
'Box','on', ...
'CameraUpVector',[0 1 0], ...
'CameraUpVectorMode','manual', ...
'Color',[1 1 1], ...
'ColorOrder',mat5, ...
'Position',[30 120 396 335], ...
'Tag','Axes1', ...
'XColor',[0 0 0], ...
'YColor',[0 0 0], ...
'ZColor',[0 0 0]);
c = line('Parent',b, ...
'Color',[0 0 1], ...
'Tag','Line4', ...
'XData',1, ...
'YData',0);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[1 -1.09281 0], ...
46
'Tag','Text1', ...
'VerticalAlignment','cap');
set(get(c,'Parent'),'XLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[-0.129114 0.00299401 0], ...
'Rotation',90, ...
'Tag','Text2', ...
'VerticalAlignment','baseline');
set(get(c,'Parent'),'YLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','right', ...
'Position',[-0.15443 1.15269 0], ...
'Tag','Text3');
set(get(c,'Parent'),'ZLabel',c);
c = text('Parent',b, ...
'Color',[0 0 0], ...
'HandleVisibility','callback', ...
'HorizontalAlignment','center', ...
'Position',[1 1.03293 0], ...
'Tag','Text4', ...
'VerticalAlignment','bottom');
set(get(c,'Parent'),'Title',c);
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'FontWeight','bold', ...
'Position',[489 162 129 18], ...
'String','Longer Sounds', ...
'Style','text', ...
'Tag','StaticTextLongSounds', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayQAMLong', ...
'FontSize',14, ...
'Position',[491 92 107 28], ...
'String','QAM', ...
'Tag','PushbuttonQAMLong', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayOFDMLong', ...
'FontSize',14, ...
'Position',[491 58 107 28], ...
'String','OFDM', ...
'Tag','PushbuttonOFDMLong', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.733333 0.733333 0.733333], ...
'Callback','OFDMguiFnSound PlayOriginalLong', ...
'FontSize',14, ...
'Position',[491 126 107 28], ...
'String','Original', ...
'Tag','PushbuttonOriginalLong', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.9 0.9 0.9], ...
'Position',[414 284 36 15], ...
'String','BER=', ...
'Style','text', ...
'Tag','StaticTextBER2', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[0.9 0.9 0.9], ...
'Position',[414 176 36 15], ...
'String','BER=', ...
'Style','text', ...
'Tag','StaticTextBER1', ...
'Visible','off');
b = uicontrol('Parent',a, ...
47
'Units','points', ...
'BackgroundColor',[1 1 1], ...
'HorizontalAlignment','left', ...
'Position',[418 263 48 20], ...
'Style','text', ...
'Tag','StaticTextBERQAM', ...
'Visible','off');
b = uicontrol('Parent',a, ...
'Units','points', ...
'BackgroundColor',[1 1 1], ...
'HorizontalAlignment','left', ...
'Position',[419 157 49 17], ...
'Style','text', ...
'Tag','StaticTextBEROFDM', ...
'Visible','off');
% tx.m
% tx
disp('Transmitting')
read
data_in_pol = bin2pol(data_in); % Converts binary data to polar data
tx_chunk
% perform ifft to create time domain waveform representing data
td_sets = zeros(num_chunks,fft_size);
for i = 1:num_chunks
td_sets(i,1:fft_size) = real(ifft(spaced_chunks(i,1:fft_size)));
end
tx_dechunk
% tx_chunk.m
% tx_chunk
data_length = length(data_in_pol); %number of symbols in original input
num_chunks = ceil(data_length/(2*num_carriers)); %2 data on each carrier (real and imaginary)
r = rem(data_length,2*num_carriers);
if r ~= 0
for i = 1:num_carriers*2-r
data_in_pol(data_length+i) = 0; %pad input with zeros to complete last data set
end %speed improve possible
end
% break data into chunks
chunks = zeros(num_chunks,num_carriers); % for speed
for i = 1:num_chunks
% *********************chunk done
for k = 1:num_carriers
chunks(i,k) = data_in_pol(2*num_carriers*(i-1)+k) + data_in_pol(2*num_carriers*(i-1)+k+num_carriers)*j;
end
end
% Padding chunks with zeros so num_carriers and fft_size are compatible
% Once compatible, further spacing is simplified
num_desired_carriers = num_carriers;
num_zeros = 0;
thinking = 1;
while thinking == 1 % Continue if num_carriers and fft_size are not compatible
if rem(fft_size/2,num_desired_carriers) == 0
thinking = 0;
else
num_desired_carriers = num_desired_carriers + 1;
num_zeros = num_zeros + 1;
end
end
padded_chunks = zeros(num_chunks,num_carriers + num_zeros); % for speed
padded_chunks(1:num_chunks,num_zeros + 1:num_carriers + num_zeros) = chunks;
%compute zeros_between
48
zeros_between = ((fft_size/2) - (num_carriers + num_zeros))/(num_carriers + num_zeros);
spaced_chunks = zeros(num_chunks,fft_size); % for speed - extra room for folding later
%add zeros_between
i = 1;
for k = zeros_between +1:zeros_between +1:fft_size/2
spaced_chunks(1:num_chunks,k) = padded_chunks(1:num_chunks,i);
i = i+1;
end
% folding data to produce an odd function for ifft input
for i = 1:num_chunks
% Note: index = 1 is actually DC freq for ifft -> it does not get copied over y-axis
spaced_chunks(i,fft_size:-1:fft_size/2+2) = conj(spaced_chunks(i,2:fft_size/2));
end
% tx_dechunk.m
% tx_dechunk
% Construct signal to transmit by placing time domain sets in series
xmit = zeros(1,num_chunks*fft_size);
for i = 1:num_chunks
for k = 1:fft_size
xmit(k + (i-1)*fft_size) = td_sets(i,k);
end
end
% write.m
% write
% ******************TEST OUTPUT*********************************
if input_type == 1
if test_input_type == 1
%already binary - do nothing
end
if (test_input_type == 2) | (test_input_type == 3)
%random input OR sine wave samples
output_samples = zeros(1,floor(length(output)/8)); %extra zeros are not original data
for i = 1:length(output_samples)
output_samples(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8));
end
if do_QAM == 1
QAM_output_samples = zeros(1,floor(length(QAM_data_out)/8));
for i = 1:length(QAM_output_samples)
QAM_output_samples(i) = bin2eight(QAM_data_out(1 + (i-1)*8:(i-1)*8 + 8));
end
end
end
end
% ******************FILE OUTPUT*********************************
if input_type == 2
if file_input_type == 1
%binary file output - not implemented
end
if file_input_type == 2
%text file output
output_samples = zeros(1,floor(length(output)/8)); %extra zeros are not original data
for i = 1:length(output_samples)
output_samples(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8));
end
file = fopen('OFDM_text_out.txt','wt+');
fwrite(file,output_samples,'char');
fclose(file);
if do_QAM == 1
QAM_output_samples = zeros(1,floor(length(QAM_data_out)/8)); %extra zeros are not original data
for i = 1:length(QAM_output_samples)
QAM_output_samples(i) = bin2eight(QAM_data_out(1 + (i-1)*8:(i-1)*8 + 8));
end
file = fopen('QAM_text_out.txt','wt+');
fwrite(file,QAM_output_samples,'char');
fclose(file);
49
end
end
if file_input_type == 3
output_samples_big = zeros(1,floor(length(output)/8)); %extra zeros are not original data
for i = 1:length(output_samples_big)
output_samples_big(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8));
end
%convert dynamic range from 0:255 to -1:1
output_samples = (output_samples_big-127)/128;
%sound file output
wavwrite(output_samples, 11025, 8, 'OFDM_out.wav')
if do_QAM == 1
QAM_data_out_big = zeros(1,floor(length(QAM_data_out)/8));
for i = 1:length(QAM_data_out_big)
QAM_data_out_big(i) = bin2eight(QAM_data_out(1 + (i-1)*8:(i-1)*8 + 8));
end
%convert dynamic range from 0:255 to -1:1
QAM_output_samples = (QAM_data_out_big-127)/128;
%sound file output
wavwrite(QAM_output_samples, 11025, 8, 'QAM_out.wav')
end
end
if file_input_type == 4
%image file output - not implemented
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -