📄 ofdm.m
字号:
tic
global H
global BITS
global TERM
TERM = 0;
% get BITS
s = get(H.edit20,'String');
BITS = st2de(s);
BITS = round(BITS);
% obtain delay values
s = get(H.edit1,'String');
DELAY_1 = st2de(s);
DELAY_1 = round(DELAY_1);
s = get(H.edit3,'String');
DELAY_2 = st2de(s);
DELAY_2 = round(DELAY_2);
% determine which data to use
if get(H.radiobutton1,'Value')
WHICH = 1;
end
if get(H.radiobutton3,'Value')
WHICH = 2;
end
if get(H.radiobutton2,'Value')
WHICH = 3;
end
% start process
if WHICH == 1
transmitted_data = get(H.edit5,'String');
len_orig = length(transmitted_data);
transmitted_code = text_encode(transmitted_data);
end
if WHICH == 2
s = get(H.popupmenu5,'String');
i = get(H.popupmenu5,'Value');
[transmitted_data,fs,nbits] = wavread(char(s(i)));
len_orig = length(transmitted_data);
[transmitted_code,num_array] = pcm_encode(transmitted_data);
end
if WHICH == 3
s = get(H.popupmenu6,'String');
i = get(H.popupmenu6,'Value');
transmitted_data = imread(char(s(i)));
if BITS ~= 8
[y,columns] = picture_in(transmitted_data);
len_orig = length(y);
[transmitted_code,num_array] = pcm_encode(y);
else
[transmitted_code,columns] = im_encode(transmitted_data);
end
end
transmitted_code = buffer(transmitted_code,8);
num = length(transmitted_code) / 8;
index = 1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = 1:num
if TERM == 1
break
end
pause(.00001);
percent = (k/num) * 100;
percent = round(percent);
if percent ~= 100
set(H.text10,'String',percent);
end
t = toc;
set(H.text27,'String',t);
ofdm_signal = ofdm_generation(transmitted_code(index:index + 7));
ofdm_signal = isi(ofdm_signal,DELAY_1,DELAY_2);
received_code(index:index + 7) = code_generation(ofdm_signal);
index = index + 8;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ofdm_signal = ofdm_generation(transmitted_code);
%ofdm_signal = isi(ofdm_signal,delay_1,delay_2);
%received_code = code_generation(ofdm_signal);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if TERM ~= 1
if WHICH == 1
received_data = text_decode(received_code);
error = transmitted_code - received_code;
error_data = transmitted_data;
for k = 1:length(received_data)
if received_data(k) ~= transmitted_data(k)
error_data(k) = '#';
else
error_data(k) = '0';
end
end
% clear axes
axes(handles.axes10)
axis off
cla
set(H.text34,'Visible','off');
set(H.text35,'Visible','off');
set(H.text32,'String',error_data);
set(H.text32,'Visible','on');
set(H.text33,'Visible','on');
set(H.text25,'String',received_data);
set(H.text18,'Visible','off');
set(H.axes11,'Visible','on');
axes(H.axes11)
plot(abs(error),'m');
set(H.text31,'Visible','on');
axes(H.axes9)
axis off
cla
set(H.text13,'Visible','on');
set(H.text25,'Visible','on');
set(H.pushbutton5,'Visible','off');
end
if WHICH == 2
received_data = pcm_decode(received_code,num_array);
received_data = received_data(1:len_orig);
error = transmitted_code - received_code;
error_data = transmitted_data' - received_data;
set(H.axes10,'Visible','on');
axes(H.axes10)
plot(abs(error_data),'k');
set(H.text34,'Visible','on');
set(H.text34,'String','Error in Received Sound')
set(H.text35,'Visible','off');
set(H.axes11,'Visible','on');
axes(H.axes11)
plot(abs(error),'m');
set(H.text31,'Visible','on');
set(H.text32,'Visible','off');
set(H.text33,'Visible','off');
set(H.axes9,'Visible','on');
axes(H.axes9)
plot(received_data,'r');
wavwrite(received_data,fs,nbits,'wav_out.wav');
set(H.pushbutton5,'Visible','on');
set(H.text18,'Visible','on');
set(H.text18,'String','Received Sound');
set(H.text13,'Visible','off');
set(H.text25,'Visible','off');
end
if WHICH == 3
if BITS ~= 8
data = pcm_decode(received_code,num_array);
data = data(1:len_orig);
received_data = picture_out(data,columns);
else
received_data = im_decode(received_code,columns);
end
trans = double(transmitted_data);
rec = double(received_data);
trans = floor(trans);
rec = floor(rec);
global error_data
error_data = trans - rec;
error_data = floor(error_data);
error_data = uint8(error_data);
error = transmitted_code - received_code;
set(H.axes10,'Visible','on');
axes(H.axes10)
colormap(gray)
image(error_data)
axis off
set(H.text32,'Visible','off');
set(H.text33,'Visible','off');
set(H.text35,'Visible','on');
set(H.text35,'String','Error in Received Image');
set(H.text34,'Visible','on');
set(H.text34,'String','[Black = 0% error] [White = 100% error]');
set(H.axes11,'Visible','on');
axes(H.axes11)
plot(abs(error),'m');
set(H.text31,'Visible','on');
set(H.axes9,'Visible','on');
axes(H.axes9)
colormap(gray)
imagesc(received_data)
axis off
set(H.text18,'Visible','on');
set(H.text18,'String','Received Image');
set(H.text13,'Visible','off');
set(H.text25,'Visible','off');
set(H.pushbutton5,'Visible','off');
end
else
TERM = 0;
t = toc;
set(H.text27,'String',t);
set(H.text10,'String',percent);
set(H.pushbutton2,'Enable','on');
set(handles.pushbutton2,'BackgroundColor',[0 .75 0]);
end
%for k = 1:length(transmitted_code),
% error_code(k) = transmitted_code(k) - received_code(k);
%end
%for k = 1:length(transmitted_data),
% error_data(k) = transmitted_data(k) - received_data(k);
%end
%figure(1)
%plot(transmitted_data)
%hold
%plot(received_data,'r'), title('transmitted data[blue], received data[red]');
%figure(2)
%plot(error_data), title('error in pcm coding');
%figure(3)
%plot(error_code), title('error in ofdm transmission');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -