Modulace PAM #1

Modulace PAM #1 - jednorozměrná
%% PAM #1
% Tomas Krejci, 11.4.2015

clc
close all
clear all

%data = [1 1 0 1 0 0 0 1];
data = [0 1 2 3 0 3 2 1];

%% PAM - jedno rozmerna
% modulační funkce h jsou nasobky modulačniho pulzu, např obdelnikove pulzy, h0 = 1V, h1=2V,...
fs = 1E6; % vzorkovaci frek, pro "udelani spojite s(t)", v prednskach jako fh=1/Tv
Ts = 1E-3; % symbolovy interval, (jak dlouho potrva jeden datovy syombol (1 nebo 0 z data) po modulaci jako s(t) ?)
nn = fs*Ts;
kMax = length(data); % kolik je symbolovych intervalu (pro jedno rozmernou odpovida datovych intervalu)

c_m = [-2 -1 1 2]; % nasobici koeficienty pro modulacni fci
M = length(c_m);
c_m_k = zeros(1, kMax);
for kk = 1:kMax

 switch (data(kk))
 case 0
 c_m_k(kk) = c_m(2);
 case 1
 c_m_k(kk) = c_m(3);
 case 2
 c_m_k(kk) = c_m(1);
 case 3
 c_m_k(kk) = c_m(4);
 otherwise
 c_m_k(kk) = 0;
 end
end

%% REC
h_xy = ones(1, nn);
%% BiP
%h_xy = [ones(1, nn/2) -ones(1, nn/2)];

%% PAM expanzni cast
s_t = zeros(1, nn * kMax);

for kk = 1:kMax
 s_t( (kk-1)*nn+1 : kk*nn ) = c_m_k(kk) * h_xy(1,:);
end

t_osa = 0 : 1/fs : kMax*Ts-1/fs;
c_osa = 0 : nn/fs : kMax*Ts-1/fs;

h_figure = figure; set(h_figure(:),'color',[1 1 1]);
subplot(211); hold all;
 plot(t_osa, s_t, 'Color', 'red', 'LineWidth', 2);
 stem(c_osa, c_m_k, 'Color', 'blue', 'LineStyle', '--', 'Marker', '>', 'LineWidth', 2);
 ylim([min(s_t)*1.2 max(s_t)*1.2 ]); title(['PAM M=' num2str(M)]);
 xlabel('Time [s]'); ylabel('A [V]'); legend('PAM s(t)', 'c_m_(_k_)','Location','NorthEastOutside');
subplot(212); hold all;
 stem([0:1:kMax-1], data, 'Color', 'Black', 'LineStyle', '-', 'Marker', 'x', 'LineWidth', 2);
 ylim([min(data)*1.2 max(data)*1.2 ]); title('data');
 xlabel('Time [n]'); ylabel('[-]'); legend(' data', 'Location','NorthEastOutside');

Download 

PAM_1

Konvoluce 2D / Fitrace obarzu

Numerický výpočet dvourozměrné konvoluce neboli filtrace obrazu.

 

</pre>
<pre>%% Konvoluce 2D / Fitrace obarzu
% Tomas Krejci, 11.4.2015

clc
close all
clear all
<!--more-->
%% konvolucni jadro / filtr
%h = [0 -1 0; -1 5 -1; 0 -1 0]; % doostreni
h = [1 1 1; 1 3 1; 1 1 1]; % rozostreni
h = h / sum(sum(h)); % normalizace

%% obraz
img = rgb2gray(double(imread('grey2.png'))/256);
%img = [1 1 1; .5 .5 .5; 0 0 0];

imgc = conv2(img,h); % pomoci normani konvoluce
imgc = imfilter(img,h); % pomoci funkce...
sp = abs(fftshift(fft2(h, 1024, 1024))); % spektrum 2D
%% rozsireni obrazu
% okrajove podminky.....
% predpoklad kernelu 3x3

[m n] = size(img);
img2 = zeros(m+2, n+2);
img3 = img2;
img2(2:end-1, 2:end-1) = img; % stred
img2(2:end-1, 1) = img(:, 2); % levy sloupec
img2(2:end-1, end) = img(:, end-1); % pravy sloupec
img2(1, 2:end-1) = img(2, :); % prvni radek
img2(end, 2:end-1) = img(end-1, :); % posledni radek
img2(1, 1) = img(2, 2); % levy horni roh
img2(1, end) = img(2, end-1); % pravy horni roh
img2(end, 1) = img(end-1, 2); % levy dolni roh
img2(end, end) = img(end-1, end-1); % pravy dolni roh

%% vypocet
[m n] = size(img2);
for mm = 2:m-1
for nn = 2:n-1
sub = img2( (mm-1):(mm+1), (nn-1):(nn+1) ) .* h; % pronasobeni danych boud/pixelu
img3(mm, nn) = sum( sum(sub) ); % soucet / vysledek 2D konvoluce
end
end
img4 = img3(2:end-1, 2:end-1); % orezani okraju

figure;
subplot(2, 2, 1); imshow(img); title('original');
subplot(2, 2, 2); mesh(sp); title('spketrum filtru');
subplot(2, 2, 3); imshow(imgc); title('po fitraci - imfilter');
subplot(2, 2, 4); imshow(img4); title('po fitraci - rucne');

Download

grey2

 

 

 

 

konvoluce_2D

Konvoluce 1D

Numerický výpočet jednorozměrné konvoluce.
%% Konvoluce 1D
% Tomas Krejci, 11.4.2015

clc
close all
clear all

h = [1 2 3 4 5 6 7]; % konvolucni jadro
g = [6 7 8 9 5 6 7 4 5 6];

%% vytvoreni macice pro posun
r = length(g) - length(h);
if r > 0
 g2 = zeros(length(h),length(g)*2-1-r);
else
 g2 = zeros(length(h),length(g)*2-1);
end

[n1 m] = size(h); % n1-pocet radku; m-pocet sploupcu
[p n] = size(g2); % p-pocet radku; n-pocet sploupcu

if m ~= p
 disp('chyba, vadny rozmer matice'); return;
end

%% naplneni rozsirene matice
jj = 1;
for ii=1:length(h)
 g2(jj,ii:ii+length(g)-1) = g;
 jj = jj+1;
end

out = zeros(1,n); % vysledny vektor

%% nasobeni matic
for nn = 1:n
 x = 0;
 for mm = 1:m
 x = h(1,mm)*g2(mm,nn) + x;
 end
 out(nn) = x;
end

if out ~= conv(h,g)
 disp('chyba, nesouhlasi s conv'); return;
else
 out
end

Download 

konvoluce_1D