精华内容
参与话题
问答
  • web性能优化--用gzip压缩资源文件

    万次阅读 多人点赞 2019-07-31 19:14:09
    一、gzip压缩技术 gzip(GNU- ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端...

    #一、gzip压缩技术
    gzip(GNU- ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的大多数浏览器都支持解析gzip压缩过的资源文件。在实际的应用中我们发现压缩的比率往往在3到10倍,也就是本来50k大小的页面,采用压缩后实际传输的内容大小只有5至15k大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。
    实现gzip压缩的方式有多种,比如:nginx、tomcat、java等,选用其中一种即可。
    #二、nginx启用gzip
    Nginx的压缩输出有一组gzip压缩指令来实现。相关指令位于http{….}两个大括号之间,如下:

      #打开gzip压缩
      gzip on;
      #不压缩临界值,大于1K的才压缩,一般不用改
      gzip_min_length 1k;
      #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流,这里设置以16k为单位的4倍申请内存
      gzip_buffers 4 16k;
      #默认为http 1.1,现在99.99%的浏览器基本上都支持gzip解压了,所有无需设置此项
      #gzip_http_version 1.0;
      #gzip压缩比,1 最小处理速度最快,9 最大但处理最慢(传输快但比较消耗cpu)
      gzip_comp_level 2;
      #要压缩的文件类型,注意"text/html"类型无论是否指定总是会被压缩的
      gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php image/jpeg image/gif image/png;
      #on的话会在Header里增加"Vary: Accept-Encoding",给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
      #我这里的浏览器肯定支持gzip压缩,所以就不开启此功能了
      gzip_vary off;
      #IE6对Gzip不怎么友好,不给它Gzip压缩了
      gzip_disable "MSIE [1-6]\.";
    

    #三、tomcat启用gzip
    目前大多数主流WEB中间件都支持GZIP压缩、下面以Tomcat 为例进行说明:
    找到Tomcat 目录下的conf下的server.xml,并找到如下信息:

          <Connector port = "8080" maxHttpHeaderSize = "8192" maxThreads = "150" minSpareThreads = "25"
                  maxSpareThreads = "75" enableLookups = "false" redirectPort = "8443" acceptCount = "100"
                  connectionTimeout = "20000" disableUploadTimeout = "true"
          将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):
          <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25"
                 maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100"
                 connectionTimeout="20000" disableUploadTimeout="true"
                 compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"
                 compressableMimeType="text/html,text/xml" >
          这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将
               compressableMimeType=”text/html,text/xml”加入css和js:
               <Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >
    

    一般文本类型的静态文件可以通过这种方式压缩后传输、提高传输效率。
    #四、java服务器启用gzip
    java本身可以通过过滤器filter实现gzip压缩。下面提供一个gzip工具类:

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.zip.GZIPInputStream;
    import java.util.zip.GZIPOutputStream;
    
    public class GZIPUtils  {
        public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; 
        public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";
    
        
        public static byte[] compress(String str, String encoding) {
            if (str == null || str.length() == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip;
            try {
                gzip = new GZIPOutputStream(out);
                gzip.write(str.getBytes(encoding));
                gzip.close();
            } catch ( Exception e) {
                e.printStackTrace();
            }
            return out.toByteArray();
        }
        
        public static byte[] compress(String str) throws IOException {  
            return compress(str, GZIP_ENCODE_UTF_8);  
        }
        
        public static byte[] uncompress(byte[] bytes) {
            if (bytes == null || bytes.length == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            try {
                GZIPInputStream ungzip = new GZIPInputStream(in);
                byte[] buffer = new byte[256];
                int n;
                while ((n = ungzip.read(buffer)) >= 0) {
                    out.write(buffer, 0, n);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return out.toByteArray();
        }
        
        public static String uncompressToString(byte[] bytes, String encoding) {  
            if (bytes == null || bytes.length == 0) {  
                return null;  
            }  
            ByteArrayOutputStream out = new ByteArrayOutputStream();  
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);  
            try {
                GZIPInputStream ungzip = new GZIPInputStream(in);  
                byte[] buffer = new byte[256];  
                int n;  
                while ((n = ungzip.read(buffer)) >= 0) {  
                    out.write(buffer, 0, n);  
                }  
                return out.toString(encoding);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        public static String uncompressToString(byte[] bytes) {  
            return uncompressToString(bytes, GZIP_ENCODE_UTF_8);  
        } 
        
        public static void main(String[] args) throws IOException {
            String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            System.out.println("字符串长度:"+s.length());
            System.out.println("压缩后::"+compress(s).length);
            System.out.println("解压后:"+uncompress(compress(s)).length);
            System.out.println("解压字符串后::"+uncompressToString(compress(s)).length());
        }
    }
    

    #五、压缩效果
    压缩前:
    这里写图片描述
    压缩后:
    这里写图片描述

    这里写图片描述
    显然压缩后资源文件变得小了很多,加载速度也快了不少。可见,gzip压缩是页面性能优化的一种有效方式。

    展开全文
  • 雷达线性调频信号的脉冲压缩处理

    千次阅读 多人点赞 2019-11-09 14:46:48
    其次介绍了LFM 信号的形式以及matlab 的仿真情况,然后从雷达信号处理上进行改进,最后在对LFM 信号进行matlab 仿真,对LFM 在加噪前后脉冲压缩匹配滤波的仿真情况进行详细的分析,明确了脉冲压缩技术不但降低了对...

    一、设计目的和意义

    掌握雷达测距的工作原理,掌握匹配滤波器的工作原理及其白噪声背景下的匹配滤波的设计,线性调频信号是大时宽频宽积信号; 其突出特点是匹配滤波器对回波的多普勒频移不敏感以及更好的低截获概率特性。LFM 信号在脉冲压缩体制雷达中广泛应用;利用线性调频信号具有大带宽、长脉冲的特点,宽脉冲发射已提高发射的平均功率保证足够的作用距离;而接受时采用相应的脉冲压缩算法获得窄脉冲已提高距离分辨率, 较好的解决了雷达作用距离和距离分辨率之间的矛盾。而利用脉冲压缩技术除了可以改善雷达系统的分辨力和检测能力,还增强了抗干扰能力、灵活性,能满足雷达多功能、多模式的需要。

    二、设计原理

    1、 匹配滤波器

    匹配滤波器(match filter)是最佳线性滤波器的一种,该滤波器的准则是输出信噪比最大,常用于通信、雷达等系统的接收机中,下面对其冲激响应/系统函数进行推导。
    设该滤波器传递函数为H(f)H(f),冲激响应为h(t)h(t),输入信号为
    r(t)=s(t)+n(t)

    其中s(t)为输入信号,n(t)为高斯白噪声。设输入信号的频谱密度函数为S(f),而高斯白噪声的单边功率谱为n0/2,其中n0为高斯白噪声单边功率谱密度。 该信号通过匹配滤波器输出如图1.1所示
    001
    其中:
    S(t)=Acos(2πf_0 t+πμt^2) (0≤t≤τ)
    h(t)=ks_t^
    (t_0-t)
    H(f)=kS_t^
    (f)e^(-j2πft_0 )
    τ^’=1/B=1/μτ
    **

    在通信系统中,滤波器是其中重要部件之一,滤波器特性的选择直接影响数字信号的恢复。在数字信号接收中,滤波器的作用有两个方面,使滤波器输出有用信号成分尽可能强;抑制信号外带噪声,使滤波器输出噪声成分尽可能小,减少噪声对信号判决的影响。对最佳线形滤波器的设计有两种准则其中一种是是滤波器输出信噪比在某一特定时刻达到最大,由此而导出的最佳线性滤波器成为匹配滤波器。在数字通信中,匹配滤波器具有广泛的应用。因此匹配滤波器是指滤波器的性能与信号的特性取得某种一致,使滤波器输出端的信号瞬时功率与噪声平均功率的比值最大。

    在信号处理中,匹配滤波器可以用来解调基频带脉冲信号,基频带脉冲信号意指信号内容为同一波形信号乘上一个常数,在每个周期出现,每个周期中代表着或多或少的信息量。匹配滤波器解调出来的结果其SNR
    (Signal Noise Ratio)为最大的,匹配滤波器需要事先知道:1.传送的信号;2.信号的同步。这样才能解调出传送的信号。

    此外,匹配滤波器也可用于模式识别、相似度测试(similarity measure)。

    2、线性调频信号

    线性调频信号指持续期间频率连续线性变化的信号,是一种常用的雷达信号。可以采用如下数学表达式表示:

    S(t)=Acos(2πf_0 t+πμt^2) (0≤t≤τ)

    其中:f0为中心频率;k=B/为调频频率;B为频率变化范围;tao为脉冲宽度;a(t)为线性调频脉冲的包络。

    线性调频信号通过对载波频率进行调制以增加信号的发射带宽并在接收时实现脉冲压缩。由于线性调频信号具有较高的距离分辨力,当在速度上无法区分多目标时,可以通过增加目标距离测试解决多目标的分辨问题;同时在抗干扰方面,线性调频信号可以在距离上区分干扰和目标,因而可以有效地对抗拖曳式干扰,这使得线性调频信号在雷达波形设计中得到了广泛的应用。由于线性调频信号是通过一个发射脉冲实现距离高分辨的,因此该信号对目标多普勒频移不敏感,即使回波信号有较大的多普勒频移,脉冲压缩系统仍能起到压缩的作用。这将大大简化信号处理系统。

    线性调频信号经过压缩处理接收后的信号幅度峰值是原来发射信号峰值的D的1/2次方(D为脉压比,等于脉冲宽度与B的乘积)倍,即输出脉冲峰值功率比输入脉冲峰值功率增大了D倍。在要求发射机输出功率一定的情况下,接收机输出的目标回波信号经过匹配滤波压缩处理,具有窄的脉冲宽度和更高的峰值功率,前者提高距离分辨率而后者符合探测距离远的要求,这便充分体现了脉压体制独特的优越性。从反侦察的角度来说,脉压雷达比普通雷达具有更强的生存能力。由于线性调频信号的幅度和信噪比更小,由侦察方程可知,同等灵敏度的侦察机其侦察距离为原来的D的负1/2次方,所以在雷达应用领域,脉压雷达具有功率优势,应用前景十分广阔。

    3、LFM 信号的脉冲压缩

    脉冲压缩技术是匹配滤波理论和相关接收理论的一个很好的实际应用。它的提出很好的解决了这样的一个问题:在发射端发射大时宽、带宽信号,以提高信号的速度测量精度和速度分辨力,而在接收端,将宽脉冲信号压缩为窄脉冲,以提高雷达对目标的距离分辨精度和距离分辨力。

    三、MATLAB具体仿真

    匹配滤波在通信和雷达等系统中有很多应用,其中以雷达系统中的脉冲压缩较为典型,本文以雷达系统中的脉冲压缩(pulse compress)为例,进行仿真。

    在雷达目标检测中,希望距离分辨率和探测威力都足够大。而距离分辨率与发射波形的时宽成反比,探测威力(能量)与发射波形的时宽成正比。若发射波形为方波,其时宽τ与带宽B乘积约等于1,说明距离分辨率和探测威力是相互矛盾的。此时采用线性调频信号,可以很好的解决这个矛盾。
    对于一个理想的脉冲压缩系统, 要求发射信号具有非线性的相位谱, 并使其包络接近矩形;其中 S(t )就是信号 s(t)的复包络。由傅立叶变换性质, S(t)与 s(t)具有相同的幅频特性,只是中心频率不同而已。因此, Matlab 仿真时,只需考虑S(t)。

    下面对脉冲压缩进行仿真,仿真参数设置如下

    参数 取值
    信号带宽 40MHz
    信号时宽 20μs
    脉冲周期 2ms
    采样频率 20MHz
    信噪比 20dB
    目标距离 T∗fs/2

    以下Matlab 程序产生的线性调频信号,并作出其时域波形和幅频特性,如图:
    001
    对应代码:

    %%demo of chirp signal
    T=20e-6;
    B=40e6;%chirp frequency modulation bandwidth 30MHz
    K=B/T; %chirp slope
    Fs=2*B;Ts=1/Fs; %sampling frequency and sample spacing
    N=T/Ts;
    t=linspace(-T/2,T/2,N);
    St=exp(j*pi*K*t.^2); %generate chirp signal
    subplot(211)
    plot(t*1e6,St);
    xlabel('Time in u sec');
    title(' 线性调频信号');
    grid on;axis tight;
    subplot(212)
    freq=linspace(-Fs/2,Fs/2,N);
    plot(freq*1e-6,fftshift(abs(fft(St))));
    xlabel('Frequency in MHz');
    title(' 线性调频信号的幅频特性');
    grid on;axis tight;
    
    

    以下Matlab 程序段仿真了LFM信号的脉冲压缩,仿真结果如图:
    在这里插入图片描述
    图中,时间轴进行了归一化,(t /(1/ B)= t *B)。图中反映出理论与仿真结果吻合良好。
    对应代码:

    %%demo of chirp signal after matched filter
    T=20e-6;
    B=40e6; %chirp frequency modulation bandwidth 30MHz
    K=B/T; %chirp slope
    Fs=10*B;Ts=1/Fs; %sampling frequency and sample spacing
    N=T/Ts;
    t=linspace(-T/2,T/2,N);
    St=exp(j*pi*K*t.^2); %chirp signal
    Ht=exp(-j*pi*K*t.^2); %matched filter
    Sot=conv(St,Ht); %chirp signal after matched filter
    subplot(211)
    L=2*N-1;
    t1=linspace(-T,T,L);
    Z=abs(Sot);Z=Z/max(Z); %normalize
    Z=20*log10(Z+1e-6);
    Z1=abs(sinc(B.*t1)); %sinc function
    Z1=20*log10(Z1+1e-6);
    t1=t1*B;
    plot(t1,Z,t1,Z1,'r.');
    axis([-15,15,-50,inf]);grid on;
    legend('emulational','sinc');
    xlabel('Time in sec \times\itB');
    ylabel('幅度,dB');
    title(' 傅里叶变换后的线性调频信号');
    subplot(212) %zoom
    N0=3*Fs/B;
    t2=-N0*Ts:Ts:N0*Ts;
    t2=B*t2;
    plot(t2,Z(N-N0:N+N0),t2,Z1(N-N0:N+N0),'r.');
    axis([-inf,inf,-50,inf]);grid on;
    set(gca,'Ytick',[-13.4,-4,0],'Xtick',[-3,-2,-1,-0.5,0,0.5,1,2,3]);
    xlabel('Time in sec \times\itB');
    ylabel('幅度,dB');
    title(' 傅里叶变换后的线性调频信号(Zoom)');
    
    

    以下Matlab 程序段仿真了线性调制信号和噪声的生成,仿真结果如图:
    003
    对应代码:

    % 加白噪声后的线性调频信号
    T=20e-6;
    B=40e6; %chirp frequency modulation bandwidth 30MHz
    K=B/T; %chirp slope
    Fs=2*B;Ts=1/Fs; %sampling frequency and sample spacing
    N=T/Ts;
    t=linspace(0,T,N);
    St=exp(j*pi*K*t.^2);
    subplot(211)
    plot(t*1e6,St);
    xlabel('Time in u sec');
    title(' 线性调频信号');
    grid on;axis tight;
    SNR=20;
    x=awgn(St, 5); %generate chirp signal
    subplot(212)
    plot(t*1e6,x);
    xlabel('Time ');
    title(' 加噪后的线性调频信号');
    grid on;axis tight;
    
    

    实际实际雷达系统中, LFM 脉冲的处理过程如图:
    005
    雷达回波信号 sr (t )经过正交解调后, 得到基带信号,再经过匹配滤波脉冲压缩后就可以作出判决。正交解调原理如图:
    006
    雷达回波信号经正交解调后得两路相互正交的信号I(t) 和Q(t)。一种数字方法处理的的匹配滤波原理如图:
    007
    以下为经过脉冲压缩输出的已加噪声的线性调频信号(模拟雷达回波信号)的matlab仿真结果,仿真结果如图:
    009

    四、小结

    本文首先介绍了匹配滤波器的工作原理,特性特点;其次介绍了LFM 信号的形式以及matlab 的仿真情况,然后从雷达信号处理上进行改进,最后在对LFM 信号进行matlab 仿真,对LFM 在加噪前后脉冲压缩匹配滤波的仿真情况进行详细的分析,明确了脉冲压缩技术不但降低了对雷达发射机峰值功率的要求, 也解决雷达作用距离和距离分辨力之间的矛盾; 在对低截获概率雷达信号处理中将有广阔的应用前景。

    参考文献

    【1】信号与系统(第二版) 西安交通大学出版社
    【2】matlab 基础与编程入门(第二版)西安电子科技大学出版社
    【3】随机信号分析(第一版) 科学出版社
    【4】雷达原理(第三版)西安电子科技大学出版社

    展开全文
  • 压缩感知原理简介

    千次阅读 多人点赞 2019-07-15 21:51:23
    压缩感知,compressed sensing又称compressed sampling,是在采样过程中完成了数据压缩的过程。 压缩感知在信号采样的过程中,用很少的采样点,实现了和全采样一样的效果。 信号采样 学过通信原理或信号与系统的都...

    压缩感知——简介

    压缩感知,compressed sensing又称compressed sampling,是在采样过程中完成了数据压缩的过程
    压缩感知在信号采样的过程中,用很少的采样点,实现了和全采样一样的效果。

    压缩感知——信号采样

    学过通信原理或信号与系统的都知道奈奎斯特采样定理,即想让采样之后的数字信号完整保留原始信号中的信息,采样频率必须大于信号中最高频率的2倍。原因是时域以τ为间隔进行采样,频域会以1/τ为周期发生周期延拓。那么如果采样频率低于两倍的信号最高频率,信号在频域频谱搬移后就会发生混叠。
    2004年,Candes,陶哲轩和Donoho提出了压缩感知理论,该理论认为:如果信号是稀疏的,那么它可以由远低于采样定理要求的采样点重建恢复。
    突破的关键就在于采样的方式。当我们说“采样频率”的时候,意味着做的是等间距采样,数字信号领域通常都是做等间距采样,也服从奈奎斯特采样定律。
    在这里插入图片描述
    但是压缩感知采用不等间距采样,比如采用随机亚采样(图b上方的红点),那么这时候频域就不再是以固定周期进行延拓了,而是会产生大量不相关(incoherent)的干扰值。如图c,最大的几个峰值还依稀可见,只是一定程度上被干扰值覆盖。这些干扰值看上去非常像随机噪声,但实际上是由于三个原始信号的非零值发生能量泄露导致的(不同颜色的干扰值表示它们分别是由于对应颜色的原始信号的非零值泄露导致的)
    之所以随机亚采样会有这样的效果,可以理解成随机采样使得频谱不再是整齐地搬移,而是一小部分一小部分胡乱地搬移,频率泄露均匀地分布在整个频域,因而泄漏值都比较小,从而有了恢复的可能。

    压缩感知——信号恢复

    压缩感知——两个前提条件

    刚刚的例子之所以能够实现最终信号的恢复,是因为它满足了两个前提条件:

    1. 这个信号在频域只有3个非零值,所以可以较轻松地恢复出它们。
    2. 采用了随机亚采样机制,因而使频率泄露均匀地分布在整个频域。
      这两点对应了CS的两个前提条件——稀疏性(sparsity)不相关性(incoherence)
      稀疏性可以简单直观地理解为:若信号在某个域中只有少量非零值,即信号在某个域中非零点远远小于信号总点数,那么它在该域稀疏,该域也被称为信号的稀疏域
      因此,第一个前提条件要求信号必须在某一个变换域具有稀疏性。比如例子中,信号在频域是稀疏的,因而可以通过所述的重建方法轻松地在稀疏域(频域)复原出原信号。
      然而通常信号在变换域中不会呈现完全的稀疏性。其实只要它近似满足稀疏性,即大部分值趋于零,只有少量大的非零值,就可以认为它是可压缩信号,可以对它进行CS亚采样。
      对于之前讲的例子,如果它在频域中不稀疏,我们可以做DWT、DCT等,找到它的稀疏变换。

    前提条件1——稀疏性在这里插入图片描述

    前提条件2——非相关性/等距约束性

    在讲第二个前提条件之前,需要引入必要的数学表达。
    在这里插入图片描述
    上面这张图把亚采样的过程用矩阵的方式表达出来:
    如图,x是为长度N的一维信号,也就是原信号,稀疏度为k。此刻它是未知的。
    Φ为观测矩阵,对应着亚采样这一过程。它将高维信号x投影到低维空间,是已知的。
    y=Φx为长度M的一维测量值,也就是亚采样后的结果。显然它也是已知的。
    因此,压缩感知问题就是在已知测量值y和测量矩阵Φ的基础上,求解欠定方程组y=Φx得到原信号x。
    然而,一般的自然信号x本身并不是稀疏的,需要在某种稀疏基上进行稀疏表示。令x=Ψs,Ψ为稀疏基矩阵,s为稀疏系数。
    于是最终方程就变成了:y=ΦΨs。已知y、Φ、Ψ,求解s。
    y=ΦΨs有点长,我们把ΦΨ合并成一个矩阵,称之为传感矩阵。即令Θ=ΦΨ ,则y=ΘS。问题即为,已知y和Θ,求解S
    对应到一开始的例子中:
    x就是三个正弦信号叠加在一起的原信号a;
    稀疏矩阵Ψ就是傅里叶变换,将信号变换到频域S;
    观测矩阵Φ就是我们采用的随机亚采样方式;
    y就是最终的随机亚采样的结果c。
    在这里插入图片描述
    求解出S后,由x=Ψs即可得到恢复出的原信号x。
    然而在正常情况下,方程的个数远小于未知数的个数,方程是没有确定解的,无法重构信号。但是,由于信号是K稀疏,如果上式中的Φ满足有限等距性质(RIP),则K个系数就能够从M个测量值准确重构(得到一个最优解)。
    陶哲轩和Candès证明了RIP是观测矩阵要满足的准确要求。但是,要确认一个矩阵是否满足RIP非常复杂。于是Baraniuk证明:RIP的等价条件是观测矩阵和稀疏表示基不相关(incoherent)。即压缩感知的第二个前提条件。
    在这里插入图片描述
    在这里插入图片描述
    那怎样找到不相关的观测矩阵呢?陶哲轩和Candès又证明: 独立同分布的高斯随机测量矩阵可以成为普适的压缩感知测量矩阵。
    于是满足高斯分布的随机测量矩阵就成了CS最常用的观测矩阵。
    对于二维信号,往往就采用二维高斯随机测量采样矩阵对图像进行亚采样。
    对于一维信号,采用前文提到的随机不等间距的亚采样即可。

    压缩感知——重建方法

    信号采样后需要将其恢复。CS的重建也就是求解欠定方程组y=ΘS的方法。这是一个零范数(l0)最小化问题,是一个NP完全问题(没有快速解法的问题),因此往往转换成一范数(l1)最小化的求解,或者用一些近似估计的算法。
    匹配追踪是一种典型的算法。以上文中的例子为例:
    (1) 由于原信号的频率非零值在亚采样后的频域中依然保留较大的值,其中较大的两个可以通过设置阈值,检测出来(图a)。
    (2) 然后,假设信号只存在这两个非零值(图b),则可以计算出由这两个非零值引起的干扰(图c)。
    (3) 用a减去c,即可得到仅由蓝色非零值和由它导致的干扰值(图d),再设置阈值即可检测出它,得到最终复原频域(图e)
    (4) 如果原信号频域中有更多的非零值,则可通过迭代将其一一解出。
    在这里插入图片描述

    扩展:图像压缩与压缩感知

    信号的稀疏性已经在图像压缩领域有了很广泛的应用。利用信号的稀疏性,可以对信号进行压缩。如图像压缩领域的JPEG格式,就是将图像变换到离散余弦域,得到近似稀疏矩阵,只保留较大的值,从而实现压缩。
    图像压缩和压缩感知这两个概念有着本质上的区别。
    图像压缩是先进行了全采样,然后再变换域丢弃小系数,完成压缩;
    而压缩感知不同,它的思想其实从图像压缩中借鉴了很多:既然全采样了还要再丢弃,我们为什么不能直接少采样一些点?因此,压缩感知直接进行了亚采样,然后再用算法消除亚采样导致的伪影。可以说,压缩感知直接在采样时就完成了压缩
    在这里插入图片描述
    这种直接减少采样点,采集完后重建的方式,相比于图像压缩的全采用之后再压缩的方式,对于很多情形,比如照相机拍摄照片,并没有优势。因为所有像素的采集在一瞬间就都完成了。但是对于一些采集比较慢的情形,比如核磁共振成像,CS就可以发挥巨大优势。原本一副MRI图像常常需要几十秒,速度慢也是MRI的一大缺陷。而应用CS技术后,只需要采集全采样几分之一的数据,就可以重建出原图。这样就可以把成像速度提高好几倍,同时对图像质量影响不大。

    总结

    什么是压缩感知:
    如果一个信号在某个变换域是稀疏的,那么就可以用一个与变换基不相关的观测矩阵将变换所得高维信号投影到一个低维空间上,然后通过求解一个优化问题就可以从这些少量的投影中以高概率重构出原信号。
    压缩感知理论主要包括三部分:
    (1)信号的稀疏表示;
    (2)设计测量矩阵,要在降低维数的同时保证原始信号x的信息损失最小;
    (3)设计信号恢复算法,利用M个观测值无失真地恢复出长度为N的原始信号。

    从06年提出至今,已经发展出了很多算法,原来的基于l1 minimization的BP算法很慢,现在都是快速算法,而且求解算法也从纯优化方面扩展到了estimation方面,有很多基于贝叶斯估计的方法了,目前最火的也是Donoho他们组搞得AMP算法,是用Graph model里面的message passing算法通过近似求解MMSE(MAP)解。在测量矩阵方面,也已经设计出了各种矩阵,除了i.i.d. Gaussian的矩阵还有很多正交的矩阵,比如partial random DFT/DCT 矩阵。对信号的要求也从稀疏变成了存在某种结构,比如low rank,group sparse等等。(2017年进展)

    压缩感知和矩阵填充

    矩阵填充的要领是通过低秩矩阵中的已知要素还原出该矩阵的其他未知要素的进程。这几年,关于矩阵填充方法的理论研究成为压缩感知技术的一个研究热点。在实际的应用领域中涉及对高维数据的分析与处理,可以运用矩阵填充的方法来解决。其过程主要是:通过观测到的局部数据来准确填充缺失数据,从而获得完整数据矩阵的过程。
    压缩感知和矩阵填充都是稀疏约束下的反问题,压缩感知利用信号本身或在变换域中的稀疏约束性求解欠定方程,矩阵填充利用矩阵的低秩约束性求解欠定方程。
    压缩感知理论的核心问题是信号的稀疏表示、观测矩阵的设计和重构算法,信号本身或在变换域中的系数越稀疏,观测矩阵和稀疏基构成的压缩感知矩阵的受限等距常数越小,则压缩感知的性能越好。
    矩阵填充理论的核心问题是矩阵的低秩特性、非相干特性和重构算法,寻找性能良好的重构算法一直是矩阵填充理论中的一个研究重点。此外,压缩感知的应用领域已经拓展得较为广泛,但矩阵填充的应用尚处于起步阶段,挖掘矩阵填充的应用,进而将矩阵填充和压缩感知结合起来进行应用方面的探索,是非常重要和有意义的课题。
    压缩感知的性能取决于3个要素:信号的稀疏性、压缩感知矩阵的非相干性和重构算法的快速有效性。
    矩阵填充性能也取决于3个要素:矩阵的低秩性、矩阵的不相关性和重构算法的快速有效性。

    低秩矩阵

    还记得我们怎么手工求矩阵的秩吗?为了求矩阵A的秩,我们是通过矩阵初等变换把A化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那A的秩rank(A)就等于r。从物理意义上讲,矩阵的秩度量的就是矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。回到上面线性方程组来说吧,因为线性方程组可以用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,所以对应的矩阵的秩就是2了。
    OK。既然秩可以度量相关性,而矩阵的相关性实际上就表示了矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达了,它就是低秩的。所以我们总结的一点就是:如果矩阵表达的是结构性信息,例如图像、用户-商品推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。
    如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。

    应用

    矩阵填充越来越多的应用在协同滤波、系统识别、无线传感网络、视频去噪、人脸识别、医学成像等领域,正在发挥着巨大的作用。特别是在室内定位中的 应用越来越多,是当下的研究热点之一。

    参考网址:
    形象易懂讲解算法II——压缩感知(非常好)
    AndyJee:浅谈压缩感知系列——博客园(非常丰富)
    压缩感知理论
    机器学习——低秩矩阵分解中低秩的意义、矩阵填补、交叉验证

    展开全文
  • Linux压缩打包命令——tar、zip、unzip

    万次阅读 多人点赞 2019-08-16 18:39:08
    打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法是文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩...

    打包跟压缩的区别:

    打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩的时候通常是先打包再压缩;

    tar命令

    tar命令参数前面加”-"与不加“-”的区别:

    tar命令参数前面加不加“-”执行命令的结果是没有区别的,区别只要是在于linux风格方面,加“-”属于System V风格,不加“-”属于BSD风格,所以在使用tar命令的时候它的参数加不加“-”结果是一样的,看个人的使用方式;

    常用参数:

    tar命令的常用参数
    -z 是否同时具有gz属性
    -j 是否同时具有bz2属性
    -J 是否同时具有xz属性
    -x 解压缩、提取打包的内容
    -t 查看压缩包内容
    -c 建立一个压缩,打包文档
    -C 切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录
    -v 显示压缩或者打包的内容
    -f 使用文件名,在f后面要接压缩后的文件的名字,只要用到tar命令,-f选项是必须要用的,-f参数在使用的时候一定排在其他参数的后面,在最右边
    -p 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
    -P 保留绝对路径

    一、打包

    实例:

    a.将/root/下的ceshi.txt文件和anaconda-ks.cfg文件和time.sh文件打包为一个文件,名称为“jihe.tar”:

    b.查看jihe.tar文件的内容:

    c.提取jihe.tar文件的内容到/opt目录下:

    如果不用“-C”指定目录则会提取内容到当前目录

    二、压缩

    linux主要有三种压缩方式:
    1.gzip:是公认的压缩这速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式
    2.bzip:压缩形成的文件小,但是可用性不如gzip
    3.xz:是最新的压缩方式,可以自动提供最佳的压缩率

    建议的压缩的时候标明后缀:

    参数 作用 命名方式
    -z 用于gzip压缩方式 文件名.tar.gz
    -j 用于bzip2压缩方式 文件名.tar.bz2
    -J 用于xz压缩方式 文件名.tar.xz

    实例:用不同的压缩方式压缩/root/目录下的Golden.apk文件

    先查看Golden.apk文件的大小:

    可以看到Golden.apk文件的大小为187M

    a.用gzip压缩方式将Golden.apk文件压缩为Golden.apk.tar.gz文件:

    b.用bzip2的压缩方式将Golden.apk文件压缩为Golden.apk.tar.bz2文件:

    从上图可以看出红色方框内有报错,这个报错的原因是缺少bzip2的包,需要安装一个bzip2软件包

    安装完成之后再重新压缩:

    在压缩的过程中,我们可以发现:

    压缩速度:gz > bz2 > xz
    压缩率:xz > bz2 > gz

    三、解压

    先删除/root/目录下的Golden.apk文件:

    tar命令式一个很聪明的命令,我们在解压的时候不需要指明自己压缩的方式它会自己选择跟压缩方式对应的方式去解压,这话说得有点拗口,例:

    a.将Golden.apk.tar.gz解压到当前目录:

    在解压gz压缩方式压缩文件的时候并不需要加上-z,直接用参数-xf即可,另外两种压缩方式在解压的时候一样,因为tar命令会自动选择,解压之后压缩文件还在,如果不指定解压出来的文件保存在哪里,那么会直接解压在当前目录

    b.指定解压出来的文件保存的目录,将Golden.apk.tar.bz2文件解压在/opt/目录下:

    补充:

    a.在打包和压缩的过程中,我们有时候会看到这样的语句:tar: 从成员名中删除开头的“/”,这个并不是报错,是因为没有加上-P选项,没有保留原来的绝对路径去打包或者压缩,提取打包的内容跟解压一样,下面举一个例子:

    将/root/目录以gzip的方式压缩为root.tar.gz压缩文件:

    1.没有加-P选项:

    2.加上-P选项:

    解压的时候同理,如果在压缩文件的时候使用了-P选项,那么在解压的时候也要加上-P选项,不然也会出现”tar: 从成员名中删除开头的“/”“,如下图:

    1.不加-P选项解压使用了-P选项压缩/root/后的root.tar.gz文件:

    2.加上-P选项解压使用了-P选项压缩/root/后的root.tar.gz文件:


    b.在使用tar压缩或者打包的时候,可以通过增加--exclude来达到排除指定的文件的目的

    将/root/目录下的harry目录打包,但是不打包harry目录下的ha.txt文件,如下图:

    压缩文件也是同理,想要排除指定的目录压缩或者打包也是同理

    zip命令和unzip命令

    #在使用zip跟unzip命令之前先查看系统有没有安装这两个命令的包,没有的话要自己安装
    查看有没有安装zip跟unzip命令的命令:

    rpm -q zip unzip

    如果有安装了命令则会显示出命令的版本号

    zip命令

    基本用法:

    zip [参数] [压缩包名] [压缩的目录或者文件的路径]

    常用参数:

    zip命令的常用参数
    -m 将文件压缩后,删除原文件
    -o 将压缩文件内的所有文件的最新变动时间设为压缩的时间
    -q 安静模式,在压缩的时候不显示指令执行的过程
    -r 递归压缩,将自定目录下的所有子文件以及文件一起处理
    -x ”文件列表“,压缩时排除文件列表中的文件

     

    实例:

    a.压缩目录,将/root/目录下的harry目录压缩为名为harry.zip压缩包:

    1.正常压缩,不加-q选项,显示压缩的过程:

    2.加上-q选项,安静模式输出,不显示压缩的过程:

    b.压缩多个文件,将/root/目录下的ceshi.txt文件和anaconda-ks.cfg文件和Golden.apk文件压缩为名为jihe.zip的压缩包:

    因为压缩的全是文件,所以可以不用加上-r选项

    c.压缩文件跟目录,将/root/下的ceshi.txt文件和anaconda-ks.cfg文件和harry目录压缩成名为dajihe.zip的压缩包:

    d.将/root/目录下的harry目录压缩为harry1.zip压缩包,排除harry目录下的ha.txt文件:

    unzip命令

    基本用法:

    unzip [参数] [压缩文件]  (-d [目录])  //如果不是用括号里面的内容,则解压文件在当前工作目录

    常用参数:

    unzip命令的常用参数
    -c 将解压缩的结果显示到屏幕上(显示每一个目录下的每一个文件的内容),同时对字符做适当的转换,但是并没有解压压缩包
    -l 显示压缩文件内所包含的文件
    -t 检查压缩文件是否正确
    -v 执行时显示压缩文件的详细信息
    -q 安静模式,执行时不显示任何信息
    -d 指定文件解压后存储的目录
    -x 指定不要处理压缩文件中的那些文件

    实例:

    a.将harry.zip压缩包解压缩的结果显示出来:

    具体会显示到每一个文件跟每一个文件的内容

    b.显示jihe.zip压缩包里面锁包含的文件

    c.检查dajihe.zip压缩文件是否正确:

    全部OK表示全部文件都是正确的

    d.不解压压缩文件dajihe.zip,查看压缩包里面的内容(查看显示的文件列表还包含压缩比率):

    #使用-v显示的信息比使用-l显示的信息更加详细

    e.将dajihe.zip压缩包解压到/opt/目录下:

    补充:使用r选项增加.tar归档文件的内容应该如何怎么操作?

    我们先来了解一下tar命令-r选项的作用:

    通过tar --help命令查看帮助

    -r选项的作用:把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中

    使用实例:

    看上图,可以看到我ops用户家目录下标记了一个文件,一个目录,我现在先将目录归档,然后再将文件追加到档案里面

    1.归档操作

    生成.tar文件,目录归档完毕!

    2.将calculating_time.sh追加进入.tar文件中

    3.验证

    a.查看.tar文件的归档信息

    可以看到calculating_time.sh文件已经被追加到档案的末尾了

    b.提取Check_Configuration_20201118_PM.tar 到/mnt目录下

    使用-r选项追加文件至.tar文件成功

    展开全文
  • 推荐 OS X 下最方便实用的六款解压缩软件

    万次阅读 多人点赞 2019-06-19 09:50:36
    对于我们这种资料特别多,随时都需要跟工作伙伴沟通传递资料的人来说,一款方便的压缩软件真的太重要了,不仅可以节省时间,节省内存,更重要的是提高工作效率,今天废鱼就给大家推荐几款常用压缩软件。 The ...
  • 针对WINZIP压缩文件,黑客最常使用的工具就是Elcomsoft公司的“Advanced ZIP Password Recovery”(简称AZPR),AZPR提供了一个图形化的用户界面,黑客经过几个简单的步骤就可以破解ZIP压缩文件包的密...
  • 哈夫曼实现文件压缩压缩(c语言)

    万次阅读 多人点赞 2019-01-23 17:04:47
    写一个对文件进行压缩和解压缩的程序,功能如下: ① 可以对纯英文文档实现压缩和解压; ② 较好的界面程序运行的说明。 介绍哈夫曼: 效率最高的判别树即为哈夫曼树 在计算机数据处理中,霍夫曼编码...
  • 最近在看压缩感知重构算法,试了其中一些,把代码链接给大家列一下: TwIST: http://www.lx.it.pt/~bioucas/code.htm GPSR: http://www.lx.it.pt/~mtf/GPSR/ OMP: http://www.eee.hku.hk/~wsha/Freecode/Files...
  • tar 分卷压缩和解压缩

    千次阅读 2019-07-24 17:32:36
    示例将 jdk1.8.0_221 文件夹按 98m 进行分卷压缩和解压缩 压缩: tar -czvf - jdk1.8.0_221/ |split -b 98m - jdk1.8.0_221.tar.gz 解压缩: cat jdk1.8.0_221.tar.gza* | tar -xzv
  • Java后台文件批量压缩下载

    万次阅读 2020-08-28 09:31:29
    页面如下,勾选对应的复选框,点击批量下载按钮,即可将复选框对应的附件批量压缩成一个zip压缩包,然后浏览器弹框下载。 前端 // 批量下载 $("#downloadBtn").click(function () { // 获取复选选框对应的ID ...
  • 需要用到的软件 SublimeText3+Node.js 进入正题Minify的安装 打开SublimeText,快捷键ctrl+shift+p调出package control输入install package找到minify回车安装即可,安装结成功后该文档在编辑器中弹出。...
  • squashfs文件的解压和压缩

    万次阅读 2020-11-05 11:09:21
    解压: unsquashfs file.squashfs(被解压的文件名称) 压缩: mksquashfs /被压缩的目录 file.squashfs(压缩后的文件名称)
  • 压缩感知的实现(含matlab代码)

    万次阅读 多人点赞 2018-07-24 20:43:38
    压缩感知的图像重建(matlab) https://blog.csdn.net/Di_Wong/article/details/88994551 目录 原理简介 算法实现 测试结果 --------------------------------------------------------------------------------...
  • Hadoop压缩和解压缩文件

    千次阅读 2020-04-24 12:41:41
    Hadoop压缩和解压缩文件 修改Hadoop_WordCount单词统计工程 创建CompressionTest类 package com.blu.compress; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import...
  • 虚拟机 磁盘压缩

    万次阅读 2019-06-10 08:35:09
    虚拟机越来越大,只能扩容,不能压缩变小节省磁盘空间,甚为苦恼。 在网上找了各种资料,基本上,都是不合适的方式,不是我们想要的方式,我把最适合我们方式的一种方法贴出来,方便大家 首先看效果:压缩的...
  • 图片的压缩其实是俩概念, 1、是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降, 2、是 “缩” 文件的尺寸变小,也就是像素数减少。长宽尺寸变小,文件体积同样会减小。 这个 ...
  • 哈夫曼压缩与解压缩

    万次阅读 多人点赞 2018-08-13 12:52:01
    哈夫曼压缩与解压缩 目录 哈夫曼压缩与解压缩 一:引言 二:主要技术点 三:过程介绍 1、压缩: 2、解压缩 四:详细分析 一:准备过程 二:压缩 三:解压缩 五:结果演示 六:总结 七:源码地址 一:...
  • Linux之压缩压缩

    万次阅读 2019-04-15 14:41:18
    1 Linux上常见的压缩命令: (1)Linux上常见压缩文件扩展名: *.Z: compress程序压缩文件,目前使用较少。已经有gzip替换了。 *.gz: gzip程序压缩的文件。 *.bz2:bzip2程序压缩的文件,比gzip的压缩比更好。 无论...
  • Linux——常用命令(压缩和解压缩)

    万次阅读 2019-06-04 22:31:08
    在Linux中可以识别的常见压缩格式有几十种,比如.zip、.gz、.bz2、.tar、.tar.gz、.tar.bz2等。 1、zip格式
  • Linux压缩和解压缩

    千次阅读 2019-03-02 11:16:18
    它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。 tar -zcvf archive_name.tar.gz directory_to_compress --&gt;压缩一个目录 tar -zxvf archive_name.tar.gz --&gt;解压缩到当前目录下 ...
  • Linux中zip压缩和unzip解压缩命令详解

    万次阅读 2019-06-15 14:31:56
    下面给大家介绍下Linux中zip压缩和unzip解压缩命令详解 1、把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2、把/home目录下面的mydata.zip解压到mydatabak目录里面 ...
  • 文章目录一、获得命令或配置文件帮助信息:man二、获得shell内置命令的帮助信息:help三、获得命令的中文帮助信息:--help四、将文件压缩为 .gz 格式,只能压缩文件:gzip五、将 .gz 文件解压:gunzip六、将文件或...
  • java高清无损图片压缩

    万次阅读 2019-03-29 22:46:57
    Java高清无损图片压缩 (本文禁止转载,如需转载请联系本人:微信/QQ同号:969987665)简单介绍thumbnailator-0.4.5.jar 官方下载网址语法使用(超级简单的,再也没有比这个再简单的东西)一、保持和原图像一样的宽高...
  • Linux下tar bz gz等压缩包的压缩和解压

    万次阅读 2020-07-31 17:29:30
    打包 $ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) .gz格式 解压1: $ gunzip FileName.gz 解压2: $ gzip -d FileName.gz 压缩: $ gzip FileName .tar.gz格式 解压: $ tar zxvf FileName.tar.gz ...
  • 压缩算法性能对比

    千次阅读 2019-12-24 11:28:55
    看一个压缩算法的优劣,有两个重要的指标:一个指标是压缩比,原先占 100 份空间的东西经压缩之后变成了占 20 份空间,那么压缩比就是 5,显然压缩比越高越好;另一个指标就是压缩 / 解压缩吞吐量,比如每秒能压缩或...
  • 图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点,分辨率的单位为PPI(Pixels Per Inch),通常叫做像素每英寸。图像分辨率一般被用于ps中,用来改变图像的清晰度。 一个影像可被定义是一个二维的...

空空如也

1 2 3 4 5 ... 20
收藏数 261,290
精华内容 104,516
关键字:

压缩