我知道SciPy在scipy.signal.wavelets中有一些用于小波的信号处理工具,并且可以使用Matplotlib绘制图表,但似乎我无法正确使用它.我曾尝试在线性空间上绘制Daubechies小波,但这不是我想要的.一般来说,我对小波和数学非常不熟练.:)
我偶然发现了这个令人惊讶的反应,我已经idwt2多次应用MATLAB来自己理解它.但是,我无法使用与RGB图像一起使用相同的方法.所以,我有3个问题.
如何将代码应用于RGB图像,只有输出中显示的变换图像以及沿行和列的高频和低频分量,是否可以将所有组件的融合视为单个图像?我知道我必须把猫操作员,但我不明白如何去做.
其次,我也得到了一个迷宫般的形象!我很困惑,因为我似乎无法遵循原因.我还在声明如何生成此图像的语句中附加了相同的代码.
3. db1函数签名中的术语含义是什么dwt?
码:
load woman; % Load image data
%startImage=imread('pic_rgb.jpg'); % IF I WANT TO WORK WITH RGB IMAGE
nLevel = 3; % Number of decompositions
nColors = size(map,1); % Number of colors in colormap
cA = cell(1,nLevel); % Approximation coefficients
cH = cell(1,nLevel); % Horizontal detail coefficients
cV = cell(1,nLevel); % Vertical detail coefficients
cD = cell(1,nLevel); % Diagonal detail coefficients
startImage = X;
for iLevel = 1:nLevel,
[cA{iLevel},cH{iLevel},cV{iLevel},cD{iLevel}] …Run Code Online (Sandbox Code Playgroud) 主要问题:如何scipy.signal.cwt()反转功能.
我已经看到Matlab有一个逆连续小波变换函数,它将通过输入小波变换返回数据的原始形式,尽管你可以过滤掉你不想要的切片.
由于scipy似乎没有相同的功能,我一直试图弄清楚如何以相同的形式恢复数据,同时消除噪音和背景.我该怎么做呢?我尝试将其平方以消除负值,但这给了我很大的价值而不是正确.
这是我一直在尝试的:
# Compute the wavelet transform
widths = range(1,11)
cwtmatr = signal.cwt(xy['y'], signal.ricker, widths)
# Maybe we multiple by the original data? and square?
WT_to_original_data = (xy['y'] * cwtmatr)**2
Run Code Online (Sandbox Code Playgroud)
这是一个完全可编辑的短脚本,向您展示我想要获得的数据类型以及我拥有的数据等:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# Make some random data with peaks and noise
def make_peaks(x):
bkg_peaks = np.array(np.zeros(len(x)))
desired_peaks = np.array(np.zeros(len(x)))
# Make peaks which contain the data desired
# (Mid range/frequency peaks)
for i in …Run Code Online (Sandbox Code Playgroud) 我目前正在深入研究Wavelets并对某些事情感到有些困惑.
首先,这不是功课.它仅用于娱乐编码.
为了更好地理解,我在C中实现了LeGal 5/3小波的提升方案.据我所知,它似乎有效.我可以反转它并正确再现原始图像.在伪代码中,我的前进dwt看起来像这样:
// deinterleave splits the low band from the high band
// (e.g. 1 0 3 0 6 0 8 1 11 becomes 1 3 6 8 11 | 0 0 0 1)
for each row in image:
dwt1d(row)
deinterleave(row)
for each col in image:
dwt1d(col)
deinterleave(col)
Run Code Online (Sandbox Code Playgroud)
但我很挣扎.
当应用dwt时,我得到了我的变换图像,但值超出了范围[0 - 255].因此我将它们存放在短裤中.有些是负面的,有些是非常大的.现在我如何显示它们以获得如下所示的那些漂亮的图像:(http://www.whydomath.org/node/wavlets/images/Largetoplevelwt.gif)?如果我使用imshow(image,[])在Matlab中显示我的图像,那么我的输出如下所示:http://i.imgur.com/dNaYwEE.jpg.那么,我是否必须对子频段进行一些转换?如果是,有人可以指出我的解决方案或告诉我该怎么做?
在文献中,我有时看到子带是这样排序的:[LL LH; HL HH],有时也像这样:[LL HL; LH HH].后者,我看到的主要是当论文是关于JPEG2000时,也是我的算法产生的.但是在Matlab中,当使用lwt2函数时,它返回前一个布局.当我将输出与Matlab的输出进行比较时,我也看到了这一点.似乎LH和HL混在一起.怎么可能?有关系吗?是否必须使用提升而不是卷积来做某事?
如果先行然后是列,反之亦然,这实际上是否重要?我在切换订单时看到输出没有区别.唯一不同的是LH变为HL而HL变为LH.但是,这并不能解决我的第二个问题,因为输出是相同的.我猜它只是符号.那重要吗?我看到他们在那里做文章和他们做排队的其他人.两者都与JPEG2000有关.
非常感谢.如果有人能对我的问题有所了解,那么我将非常感激.
亲切的问候,马库斯
我写了一个程序,以构建一个3波段小波变换矩阵的一部分.但是,考虑到矩阵的大小为3 ^ 9 X 3 ^ 10,MATLAB完成构建需要一段时间.因此,我想知道是否有办法改进我用来使其运行得更快的代码.我在运行代码时使用n = 10.
B=zeros(3^(n-1),3^n);
v=[-0.117377016134830 0.54433105395181 -0.0187057473531300 -0.699119564792890 -0.136082763487960 0.426954037816980 ];
for j=1:3^(n-1)-1
for k=1:3^n;
if k>6+3*(j-1) || k<=3*(j-1)
B(j,k)=0;
else
B(j,k)=v(k-3*(j-1));
end
end
end
j=3^(n-1);
for k=1:3^n
if k<=3
B(j,k)=v(k+3);
elseif k<=3^n-3
B(j,k)=0;
else
B(j,k)=v(k-3*(j-1));
end
end
W=B;
Run Code Online (Sandbox Code Playgroud) scipy.signal.cwt的文件说:
scipy.signal.cwt(数据,小波,宽度)
wavelet:函数小波函数,应该有2个参数.第一个参数是返回的向量将具有的点数(len(小波(宽度,长度))==长度).第二个是宽度参数,定义小波的大小(例如高斯的标准偏差).请参阅满足这些要求的ricker.小波:函数小波函数,它应该带有2个参数.
除此之外scipy.signal.ricket,我可以传递给scipy.signal.cwt的其他内置小波函数是什么?
我在scipy/scipy/signal/wavelets.py中看到
__all__ = ['daub', 'qmf', 'cascade', 'morlet', 'ricker', 'cwt']
Run Code Online (Sandbox Code Playgroud)
并且查看每个小波函数的参数,ricket似乎只能使用scipy.signal.cwt(data, wavelet, widths)(因为只ricker需要2个参数).
我有一个EEG信号,我有兴趣在时域和频域分析它.我已经使用过scipy.signal.spectrogram函数,但我认为使用小波可以产生更好的特征提取结果.我尝试在人工信号上运行连续小波变换,我创建如下:
fs = 128.0
sampling_period = 1/fs
t = np.linspace(0, 2, 2*fs)
x = chirp(t,10,2,40,'quadratic')
coef, freqs = pywt.cwt(x, np.arange(1,50),'morl',
sampling_period=sampling_period)
Run Code Online (Sandbox Code Playgroud)
然后我绘制了coef矩阵:
plt.matshow(coef)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我的问题是如何调整比例和时间轴?
我想问一些与我的最后一个问题有关的问题,所以我不想在另一个帖子中发帖.我的问题包含一个代码,因此我不能将其作为评论发布.所以我必须将我的旧问题编辑成一个新问题.请看看并帮忙.谢谢.
我是FFT和DSP的新手,我想问你一些关于在Matlab中计算FFT的问题.以下代码来自Matlab帮助,我刚刚删除了噪音.
我可以选择与NFFT不同的信号L的长度吗?
我不确定我是否正确使用了窗口.但是当我使用窗口(以下代码中的hanning)时,我无法获得幅度的确切值?
当L和NFFT得到不同的值时,振幅值也不同.如何获得输入信号幅度的精确值?(在下面的代码中,我使用一个已知的信号来检查代码是否正常工作.但是如果我从传感器获得信号并且我不知道它的振幅,我该如何检查?)
我非常感谢你,期待收到你的来信:)
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 512; % Length of signal
NFFT=1024; % number of fft points
t = (0:L-1)*T; % Time vector
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); input signal
X = fft(hann(L).*x', NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(X(1:NFFT/2+1))) % Plot single-sided amplitude spectrum.
Run Code Online (Sandbox Code Playgroud) 知道为什么pywt.Wavelet()会给某些内置小波产生错误吗?有一个基本的(数学)原因吗?
pywt.Wavelet(i)
Run Code Online (Sandbox Code Playgroud)
退出
ValueError: Invalid wavelet name.
Run Code Online (Sandbox Code Playgroud)
对于i =
'cgau1', 'cgau2', 'cgau3', 'cgau4', 'cgau5', 'cgau6', 'cgau7'
'cgau8', 'cmor', 'fbsp', 'gaus1', 'gaus2', 'gaus3', 'gaus4', 'gaus5'
'gaus6', 'gaus7', 'gaus8', 'mexh', 'morl'
Run Code Online (Sandbox Code Playgroud)
来自pywavelet的文档
class pywt.Wavelet(name[, filter_bank=None])
Run Code Online (Sandbox Code Playgroud)
描述由指定的小波名称标识的小波的属性.为了使用内置小波,name参数必须是pywt.wavelist()列表中的有效小波名称.
wavelet ×10
matlab ×4
python ×4
c ×2
pywt ×2
scipy ×2
algorithm ×1
c++ ×1
fft ×1
haar-wavelet ×1
jpeg2000 ×1
matplotlib ×1
matrix ×1
pywavelets ×1