📄 inputsignal.m
字号:
function sig = InputSignal(Name, n)
% InputSignal -- Input 1-d Signals
% Usage:
% sig = MakeExample(Name[, n])
% Inputs:
% Name string
% Artificial signal names:
% 'Hydrogen', 'Carbon', 'FM', 'Gong', 'Mallat',
% 'HeaviSine', 'Bumps', 'Blocks','Doppler', 'Ramp',
% 'Cusp', 'Werner Sorrows'
% Data Sets:
% 'Star', 'Greasy', 'Transients', 'Earthquake'
% n desired signal length; ignored for datasets
% Outputs
% sig 1-d signal; column vector
%
if nargin < 2,
n = 1024;
end
t = (1:n)' / n;
if strcmp(Name, 'Hydrogen'),
D = log2(n);
d = floor(D/2); b = 2^(d-1) -1; k = 2^(D-d-1)-1;
qmf = MakeONFilter('Symmlet', 8);
[m L] = SizeOfDict(n, 'WP', D, qmf, 0);
c = zeros(m,1);
c(1+b*n/2^d+k+d*n) = 1;
sig = FastS(c, n, 'WP', D, qmf, 0);
elseif strcmp(Name, 'Helium'),
D = log2(n);
d = floor(D/2);
qmf = MakeONFilter('Symmlet', 8);
[m L] = SizeOfDict(n, 'WP', D, qmf, 0);
c = zeros(m,1);
c(n/2) = 1; c(m-n/2) = 1;
sig = FastS(c, n, 'WP', D, qmf, 0);
elseif strcmp(Name, 'Beryllium')
D = log2(n);
d = floor(D/2);
qmf = MakeONFilter('Symmlet', 8);
[m L] = SizeOfDict(n, 'WP', D, qmf, 0);
c = zeros(m,1);
c(1 + (2^(d-1)-1)*n/2^d + 2^(D-d-1)-1 + d*n) = 1;
c(1 + (2^(d-1)-1)*n/2^d + 2^(D-d-1) + d*n) = 1;
c(1 + (2^(d-1))*n/2^d + 2^(D-d-1) + d*n) = 1;
c(1 + (2^(d-1))*n/2^d + 2^(D-d-1)+1 + d*n) = 1;
sig = FastS(c, n, 'WP', D, qmf, 0);
elseif strcmp(Name, 'TwinSine1');
const = (2/n) ^ .5;
t = ((1:n)' - .5) / n;
x1 = const * cos(pi * ((n/2-2 + .2) - 1) / 4 * t);
x2 = const * cos(pi * ((n/2 + .2) - 1) / 4 * t);
sig = x1 + x2;
elseif strcmp(Name, 'TwinSine2');
const = (2/n) ^ .5;
t = ((1:n)' - .5) / n;
x1 = const * cos(pi * ((n/2-3 + .2) - 1) / 4 * t);
x2 = const * cos(pi * ((n/2-1 + .2) - 1) / 4 * t);
sig = x1 + x2;
elseif strcmp(Name, 'Carbon')
D = log2(n);
d = floor(D/2);
qmf = MakeONFilter('Symmlet', 8);
[m L] = SizeOfDict(n, 'WP', D, qmf, 0);
c = zeros(m,1);
c(n/2) = 1; c(m-n/2) = 1;
c(1 + (2^(d-1)-1)*n/2^d + 2^(D-d-1)-1 + d*n) = 1;
c(1 + (2^(d-1)-1)*n/2^d + 2^(D-d-1) + d*n) = 1;
c(1 + (2^(d-1))*n/2^d + 2^(D-d-1) + d*n) = 1;
c(1 + (2^(d-1))*n/2^d + 2^(D-d-1)+1 + d*n) = 1;
sig = FastS(c, n, 'WP', D, qmf, 0);
elseif strcmp(Name, 'FM'),
t = (1:n)' /n;
w = 4;
sig = cos(n * pi * ( t / 2 + .5 * cos(2*w * pi * t) / ( 4 * w * pi)));
sig = sig + cos(n * pi * .5 * t) * .5;
elseif strcmp(Name, 'Gong'),
t = (1:n)' ./ n;
sig = cos(t * pi/2 * n) ./ ((1:n) .^ .5)';
nn = floor(n/2);
sig = [zeros(nn,1); sig(1:(n - nn))];
elseif strcmp(Name, 'Mallat'),
sig = zeros(n,1);
sig((n/25):(n*3/25)) = sig((n/25):(n*3/25)) + .5;
temp = cos(pi * (0:n*5/25)/(n*5/25));
temp = abs(temp) .^ .25 .* sign(temp);
sig(n*3/25:n*8/25) = .5 * (temp + 1);
%%the bump
temp = n*8/25:n*13/25;
sigma = 5; alpha = 1;
temp = abs(temp - n*10.5/25) / sigma;
temp = exp(- temp .^ alpha) .^ 2;
temp = (temp - min(temp)); temp = temp / max(temp);
sig(n*8/25:n*13/25) = temp;
%%the random walk
randn('seed', 123456789);
m = n - floor(n * 14/25);
temp = cumsum(randn(m,1));
sig(n*14/25:n) = temp/(temp(1)-temp(m))+1-temp(1)/(temp(1)-temp(m));
sig = abs(sig);
elseif strcmp(Name,'HeaviSine'),
sig = 4.*sin(4*pi.*t);
sig = sig - sign(t - .3) - sign(.72 - t);
elseif strcmp(Name,'Bumps'),
pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
sig = zeros(size(t));
for j =1:length(pos)
sig = sig + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
end
elseif strcmp(Name,'Blocks'),
pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
hgt = [4 (-5) 3 (-4) 5 (-4.2) 2.1 4.3 (-3.1) 2.1 (-4.2)];
sig = zeros(size(t));
for j=1:length(pos)
sig = sig + (1 + sign(t-pos(j))).*(hgt(j)/2) ;
end
elseif strcmp(Name,'Doppler'),
sig = sqrt(t.*(1-t)).*sin((2*pi*1.05) ./(t+.05));
elseif strcmp(Name,'Ramp'),
sig = t - (t >= .37);
elseif strcmp(Name,'Cusp'),
sig = sqrt(abs(t - .37));
elseif strcmp(Name,'WernerSorrows'),
sig = sin( pi .* t .* (n/2 .* t.^2)) ;
sig = sig + sin( pi * (n * .6902) .* t);
sig = sig + sin(pi .* t .* (n .* t));
pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
for j =1:length(pos)
sig = sig + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
end
elseif strcmp(Name, 'Star'),
fid = fopen('star.asc');
sig = fscanf(fid, '%g');
fclose(fid);
elseif strcmp(Name, 'Greasy'),
type greasy.doc
fid = fopen('greasy.asc');
sig = fscanf(fid, '%g');
fclose(fid);
elseif strcmp(Name, 'Transients'),
type transients.doc
fid = fopen('transients.asc');
sig = fscanf(fid, '%g');
fclose(fid);
elseif strcmp(Name, 'Earthquake'),
type earthquake.doc
fid = fopen('earthquake.asc');
sig = fscanf(fid, '%g');
fclose(fid);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -