稀疏波数分析(Matlab实现)

“在代码的海洋里,有无尽的知识等待你去发现。我就是那艘领航的船,带你乘风破浪,驶向代码的彼岸。

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

稀疏波数分析是一种在多个领域中应用的重要分析方法,旨在处理和理解涉及波传播现象的数据和问题。 在物理学和工程领域,波数是描述波的特性的关键参数。传统的波数分析方法通常假定波数在空间或时间上的分布是连续和密集的,但在许多实际情况中,波数的分布可能是稀疏的,即只在特定的区域或频率范围内有显著的值。 稀疏波数分析的核心思想是利用数学和计算技术,有效地从复杂的数据中提取出稀疏的波数信息。这通常涉及到优化算法、正则化方法和信号处理技术的综合运用。 通过稀疏波数分析,可以实现以下几个重要目标: 1. 提高数据处理的效率和准确性,减少不必要的计算和误差。 2. 更好地理解波传播的物理机制,例如在声学、电磁学和弹性力学等领域中。 3. 为系统的设计和优化提供有价值的信息,例如在通信系统、传感器网络和材料设计中。 总之,稀疏波数分析为处理复杂的波现象相关问题提供了一种强大而有效的工具,对于推动科学研究和工程应用的发展具有重要意义。 

📚2 运行结果

主函数部分代码:

addpath('./functions/')
addpath('./functions/sparse_tools/v1.1')
addpath('../data/')
clear;

% GET DISPERSION CURVES
load 20140527_dispCurves;

% SPARSE WAVENUMBER ANLAYSIS OPTIONS
method = 'omp';  % Optimization algorithm used 
tau    = 3;      % BP regularization parameter or OMP sparsity

% NUMBER OF SENSORS
Mc     = 200;  % For calibration
Mp     = 200;  % For prediction

% SET DOMAINS 
% NOTE: SAMPLING RATE IS SET TO Fs = 10 MHz BY DISPERSION CURVE DATA
Fmin = 100000; % Minimum frequency in Hertz
Fmax = 200000; % Maximum frequency in Hertz
N    = 800;    % Number of wavenumber samples to use 
Q    = 10000;  % Number of frequency samples
Km   = 800;    % Maximum waveumber

% PLOTTING OPTIONS
m0 = 5;        % The signal of plot in range [1, min([Mc Mp])]



% ******************************************************************* %
% NO NEED TO CHANGE ANYTHING BEYOND THIS POINT
% ******************************************************************* %

% GET INFORMATION FROM DISPERSION CURVE DATA
Qs = size(ks,1);            % Number of frequencies
rs = floor(Qs/2)+1; fs = ifftshift((((1:Qs)-rs)/(Qs)))*Fs; 
r  = floor(Q/2)+1;  f  = ifftshift((((1:Q)-r)/(Q)))*Fs;
ks = interp1(fs, ks, f);    % Dispesion curves (interpolate for number of frequencies)
Fs = Fs;                    % Sampling rate

% DEFINE FREQUENCY DOMAIN
df = 1;                     % Frequency step size
Fb = round(Fmin/Fs*Q);      % Minimum frequency sample
Fm = round(Fmax/Fs*Q);      % Maximum frequency sample
fn = Fb:df:Fm;              % Frequency samples to use

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% DEFINE RANDOM SENSOR LOCATIONS
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% GET RANDOM SENSOR LOCATIONS (FOR CALIBRATION STAGE)
Rxc = 2*(0.5-rand(2,Mc)).';                       % Reciever sensor locations
Txc = 2*(0.5-rand(2,1)).';                        % Transmitter location
dc  = dist(Rxc, Txc.');                           % Compute distances

% COMPUTE VIRTUAL TRANSMITTER LOCATIONS TO MODEL MULTIPATH
%   REFLECTIONS MODELED USING THE METHOD OF MIRROR IMAGES
Txm = [Txc; [0 -2]+[ Txc(1) -Txc(2)]; ...
            [-2 0]+[-Txc(1)  Txc(2)]; ... 
            [0  2]+[ Txc(1) -Txc(2)]; ...
            [2  0]+[-Txc(1)  Txc(2)]; ];
dm  = dist(Rxc, Txm.');                           % Compute distances

% GET RANDOM SENSOR LOCATIONS (FOR PREDICTION STAGE)
Rxp = 2*(0.5-rand(2,Mp)).';                       % Reciever sensor locations
Txp = 2*(0.5-rand(2,1)).';                        % Transmitter location
dp  = dist(Rxp, Txp.');                           % Compute distances


% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% SIMULATE DATA
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% SIMULATE CALIBRATION DATA WITHOUT MULTIPATH NOISE
Xc       = sparse(Q,Mc);  % Ideal direct path signal
Xc(fn,:) = cell2mat(arrayfun(@(q) nansum(1./sqrt( dc*ks(q,:) ).*exp(-1j*( dc*ks(q,:) )),2), fn, 'UniformOutput', false)).';
xc       = 2*real(ifft(full(Xc))); % We are only computing the positive frequency
                                   % components so we need to take the real part  
                                   % of the time-domain and multiply by 2 
                                   
% SIMULATE CALIBRATION DATA WITH MULTIPATH NOISE
Xm       = sparse(Q,Mc);  % Ideal direct path signal
Xm(fn,:) = cell2mat(arrayfun(@(q) ...
             sum(cell2mat(arrayfun(@(p) nansum(1./sqrt( dm(:,p)*ks(q,:) ).*exp(-1j*( dm(:,p)*ks(q,:) )),2), 1:size(dm,2) , 'UniformOutput', false)),2), ...
           fn, 'UniformOutput', false)).';
xm       = 2*real(ifft(full(Xm))); % We are only computing the positive frequency
                                   % components so we need to take the real part  
                                   % of the time-domain and multiply by 2 
                                   
% SIMULATE DATA TO PREDICT
Xp       = sparse(Q,Mp);  % Ideal direct path signal
Xp(fn,:) = cell2mat(arrayfun(@(q) nansum(1./sqrt( dp*ks(q,:) ).*exp(-1j*( dp*ks(q,:) )),2), fn, 'UniformOutput', false)).';
xp       = 2*real(ifft(full(Xp))); % We are only computing the positive frequency
                                   % components so we need to take the real part  
                                   % of the time-domain and multiply by 2                                    
                                   
% SET DOMAINS
k = linspace(1/Km, Km, N).';  % Discrete wavenumber domain
r = floor(Q/2)+1; f = ifftshift((((1:Q)-r)/Q))*Fs; 
t = 1/Fs:1/Fs:Q/Fs;


% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% USE SPARSE WAVENUMBER ANLAYSIS / SYNTHESIS
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]潘琳琳. 非均匀采样和稀疏采样的近场声全息研究[D].哈尔滨工程大学,2024.DOI:10.27060/d.cnki.ghbcu.2023.000620.

[2]兰玉琼. 基于波数域的安检毫米波成像技术研究[D].哈尔滨工业大学,2022.DOI:10.27061/d.cnki.ghgdu.2022.002601.

🌈4 Matlab代码实现

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值