STFT原理及MATLAB代码

article/2025/10/7 8:25:27

原文地址:http://blog.csdn.net/shengzhadon/article/details/46811923

一、先说说STFT的理论

1.概念和特点

STFT(short-time Fourier transform,短时傅里叶变换)是和傅里叶变换相关的一种数学变换,用以确定时变信号其局部区域正弦波的频率与相位。

用途:与小波变换相似,经STFT处理后的信号具有时域和频域的局部化特性(见下图),可以借助其分析信号的视频特性。


局限:STFT的使用范围受其变换性质的局限。STFT是一种基于窗函数的变换,一般来说,短窗能够提供较好的时域解析度,长窗能够提供较好的频域解析度。这导致其实在研究过程中,还是只能侧重一种研究角度,或称一种侧重的分辨率。所以这并不是多分辨率分析。这也是为什么之后又提出了小波变换的原因之一。

2.原理简介

以下介绍的与其说是原理,不如说时如何理解短时傅里叶变换。

顾名思义,短时傅里叶变换就是将原来的傅里叶变换在时域截短为多段分别进行傅里叶变换,每一段记为时刻ti,对应FFT求出频域特性,就可以粗略估计出时刻ti时的频域特性(也就是同时指导了时域和频域的对应关系)。用于信号截短的工具叫做窗函数(宽度相当于时间长度),窗越小,时域特性越明显,但是此时由于点数过少导致FFT降低了精确度,导致频域特性不明显。因此说窗的选取(包括大小和类型)是一个博弈的过程,根据自己研究的角度,选取适合的窗即可,当然最好还是选小波变换。。。

另外,为了保证频域特性的基础上提高时域特性,经常选择前后窗函数重叠一部分,这样两个窗确定的时刻就比较接近就提高了时域分析能力。但不是重叠越多越好,重叠点数过多会大幅增加计算量,导致效率低下,因此前后窗重叠的点数也需要外加确定。

给张图方便理解,图中矩形表示窗,窗确定的时刻为窗的中间时刻:

3.设计思路

对STFT已经有了初步的了解,那么就开始设计吧~设计思路如下:

(1)窗函数选择hamming窗,最大DFT点数不大于256;

(2)用户输入(传值):signal, window, overlap, N, fs等;

(3)根据窗的大小,将signal拆分,并与窗函数相乘;

(4)对每个signal片段进行N点FFT,并求出能量谱密度;

(5)调用绘图方法,把能量谱密度(功率谱密度)用不同的颜色表示出来绘图。

说明:

(1)各种窗表达式

①海明窗(hamming):w(n)=0.54-0.46*cos(n/N);

②汉宁窗(hanning):w(n)=0.5*(1-cos(n/N));

③矩形窗(Rectangular):w(n)=1.0;

④三角窗(Triangle):w(n)=TRI(2n/N);

⑤布莱克曼窗(Blackman,三阶升余弦窗):w(n)=0.42-0.5*cos(n/N)+0.08*cos(2n/N);

⑥布莱克曼-哈里斯窗(BlackmanHarris):w(n)=0.35875-0.48829*cos(n/N)+0.14128*cos(2n/N)-0.01168*cos(3n/N);

(2)信号与窗的相乘

根据窗的长度截取响应长度的信号序列,然后二者对应的点逐点相乘,得到的数即为加窗截取后的值。之所以需要乘以窗函数,是因为如果直接截取信号,会使得截取的信号出现突变(波形上表现为直角),经过变换后会出现无限谐波影响截取后FFT的效果。

(3)绘图用到的颜色

根据能量谱密度值的不同选择不同的颜色表示,值从低到高对应颜色从冷色到暖色变化。颜色色谱如下图所示(冷→暖):


①在matlab中colorbar可以调出颜色条图,如colorbar,colorbar('North')等,North表示在top出现颜色条,另外还有East, West, South等(详见matlab帮助help colorbar);

②在matlab中colormap可以调出颜色条图对应的RGB值数组;

③复制一下RGB对应的数组如下:

[objc]  view plain copy
  1. #pragma mark - 颜色数组  
  2.   
  3. //colorbar,colormap,定义冷暖色条的RGB值  
  4. static float g_colorBarR[64] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.06250,0.1250,0.18750,0.2500,0.31250,0.3750,0.43750,0.500,0.56250,0.6250,0.68750,0.7500,0.81250,0.8750,0.93750,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.93750,0.8750,0.81250,0.7500,0.68750,0.6250,0.56250,0.500};  
  5. static float g_colorBarG[64] = {0,0,0,0,0,0,0,0,0.0625,0.125,0.1875,0.250,0.3125,0.375,0.4375,0.500,0.5625,0.625,0.6875,0.750,0.8125,0.875,0.9375,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9375,0.875,0.8125,0.750,0.6875,0.625,0.5625,0.500,0.4375,0.375,0.3125,0.250,0.1875,0.125,0.0625,0,0,0,0,0,0,0,0,0};  
  6. static float g_colorBarB[64] = {0.5625,0.625,0.6875,0.750,0.8125,0.875,0.9375,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9375,0.875,0.8125,0.750,0.6875,0.625,0.5625,0.500,0.4375,0.375,0.3125,0.250,0.1875,0.125,0.0625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  
(4)能量谱密度(功率谱密度PSD)

①设一个能量信号 s(t)

  的能量为E ,则此信号的能量由下式决定:


②在MATLAB中计算过程是

首先对截短的信号分别进行FFT并求模的平方(实部平方+虚部平方),然后除以窗函数的平方和得到Sxx。根据Sxx计算第一项分量(直流分量10lg10(|Sxx/fs|))、中间项(交流分量10lg10(|2*Sxx/fs|))和最后一项(fft计算点数为奇数与中间项一致,否则与第一项一致)。

附带matlab程序代码查看方法:在command窗口输入edit spectrogram,回车即可。


二、程序的实现

上面的介绍已经说明了设计思路,这里就不画流程图,直接上代码了

1.spectrogram方法

本部分的代码完全模仿matlab做的,所以如果有什么不明白的可以去查看matlab源码。另外,本部分的代码没有拆分,而是把所有的功能都用一个方法实现,自觉地给自己一个差评。。。

注:写本部分代码的时候我对objc还是小白,所以基本用的都是C语言的格式。。。

[objc]  view plain copy
  1. /** 
  2.  *  @brief   模仿MATLAB的spectrogram,实现STFT功能 
  3.  *  @param   signalVector 原始信号序列 
  4.  *  @param   N            信号的长度 
  5.  *  @param   win          窗长度 
  6.  *  @param   noverlap     窗重叠的点数 
  7.  *  @param   nfft         FFT/DFT的点数 
  8.  *  @param   fs           抽样频率 
  9.  *  @param   drawRect     绘图的区域rect 
  10.  *  @param   context      绘图的上下文 
  11.  *  @return  是否计算成功的标志 
  12.  */  
  13. + (Boolean)spectrogram:(floatfloat *)signalVector andLength:(int)N andWindowLength:(int)win andNoverlap:(int)noverlap andDFTCount:(int)nfft andFs:(int)fs andDrawRect:(CGRect)drawRect andContext:(CGContextRef)context  
  14. {  
  15.     Boolean isSpecOK = false;  
  16.     //hamming窗计算  
  17.     float hammingWindow[win], windowPowValue = 0.0;  
  18.     for(int i = 0; i < win; i++)  
  19.     {  
  20.         hammingWindow[i] = 0.54 - 0.46 * cosf(2*M_PI*i/(win-1));  
  21.         windowPowValue += powf(hammingWindow[i], 2);  
  22.     }  
  23.       
  24.     //计算短时傅里叶变换信号数组的行与列数,行数=时间点数,列数=窗长度  
  25.     int row, column, halfNfft;  
  26.     row = (N - noverlap)/(win - noverlap);  
  27.     column = win;  
  28.     halfNfft = nfft/2+1;  
  29.       
  30.     //计算t数组  
  31.     float timeVector[row];  
  32.     for(int i = 0; i < row; i++)  
  33.     {  
  34.         timeVector[i] = ((float)i) /((float)(fs*(win/2+1+(win-noverlap)*i)));  
  35.     }  
  36.       
  37.     //将signal拆分  
  38.     float signalXY[row][column];  
  39.     for(int i = 0; i < row; i++)  
  40.     {  
  41.         for(int j = 0; j < column; j++)  
  42.         {  
  43.             signalXY[i][j] = signalVector[i*(win - noverlap) + j];  
  44.             signalXY[i][j] *= hammingWindow[j];  
  45.         }  
  46.     }  
  47.       
  48.     //对拆分后的信号进行FFT  
  49.     float fftReal[nfft], fftImg[nfft], Sxx[row][halfNfft], Pxx[row][halfNfft], logPxx[row][halfNfft], freq[nfft], freqStep, pxxMax, pxxMin;  
  50.       
  51.     freqStep = ((float)fs)/((float)nfft);  
  52.     freq[0] = 0.0;  
  53.     for(int i = 1; i < nfft; i++)  
  54.     {  
  55.         freq[i] = freqStep + freq[i-1];  
  56.     }  
  57.       
  58.     //求Sxx  
  59.     for(int i = 0; i < row; i++)  
  60.     {  
  61.         [FFT fft:signalXY[i] andOriginalLength:column andFFTCount:nfft andFFTReal:fftReal andFFTYImg:fftImg];  
  62.         for(int j = 0; j < halfNfft; j++)  
  63.         {  
  64.             Sxx[i][j] = (fftReal[j]*fftReal[j] + fftImg[j]*fftImg[j])/windowPowValue;  
  65.         }  
  66.     }  
  67.       
  68.       
  69.     //求Pxx  
  70.     float fsFloat = (float)fs;  
  71.     Pxx[0][0] = Sxx[0][0]/fsFloat;  
  72.     logPxx[0][0] = 10*log10f(fabsf(Pxx[0][0]));  
  73.     pxxMax = logPxx[0][0];  
  74.     pxxMin = logPxx[0][0];  
  75.       
  76.     for(int i = 1; i < row; i++)  
  77.     {  
  78.         Pxx[i][0] = Sxx[i][0]/fsFloat;  
  79.         logPxx[i][0] = 10*log10f(fabsf(Pxx[i][0]));  
  80.           
  81.         if(logPxx[i][0] > pxxMax)  
  82.             pxxMax = logPxx[i][0];  
  83.         if(logPxx[i][0] < pxxMin)  
  84.             pxxMin = logPxx[i][0];  
  85.     }  
  86.     if(nfft%2)//奇数  
  87.     {  
  88.         for(int i = 0; i < row; i++)  
  89.         {  
  90.             for(int j = 1; j < halfNfft; j++)  
  91.             {  
  92.                 Pxx[i][j] = Sxx[i][j]*2.0/((float)fs);  
  93.                 logPxx[i][j] = 10*log10f(fabsf(Pxx[i][j]));  
  94.                   
  95.                 if(logPxx[i][j] > pxxMax)  
  96.                     pxxMax = logPxx[i][j];  
  97.                 if(logPxx[i][j] < pxxMin)  
  98.                     pxxMin = logPxx[i][j];  
  99.             }  
  100.         }  
  101.     }  
  102.     else//偶数  
  103.     {  
  104.         for(int i = 0; i < row; i++)  
  105.         {  
  106.             Pxx[i][halfNfft-1] = Sxx[i][halfNfft-1]/((float)fs);  
  107.             logPxx[i][halfNfft-1] = 10*log10f(fabsf(Pxx[i][halfNfft-1]));  
  108.               
  109.             if(logPxx[i][halfNfft-1] > pxxMax)  
  110.                 pxxMax = logPxx[i][halfNfft-1];  
  111.             if(logPxx[i][halfNfft-1] < pxxMin)  
  112.                 pxxMin = logPxx[i][halfNfft-1];  
  113.         }  
  114.         for(int i = 0; i < row; i++)  
  115.         {  
  116.             for(int j = 1; j < halfNfft-1; j++)  
  117.             {  
  118.                 Pxx[i][j] = Sxx[i][j]*2.0/((float)fs);  
  119.                 logPxx[i][j] = 10*log10f(fabsf(Pxx[i][j]));  
  120.                   
  121.                 if(logPxx[i][j] > pxxMax)  
  122.                     pxxMax = logPxx[i][j];  
  123.                 if(logPxx[i][j] < pxxMin)  
  124.                     pxxMin = logPxx[i][j];  
  125.             }  
  126.         }  
  127.     }  
  128.       
  129.     //绘图  
  130.     NSMutableArray *dataArray = [[NSMutableArray alloc] init];  
  131.     for(int i = 0; i < row; i++)  
  132.     {  
  133.         for(int j = 0; j < halfNfft; j++)  
  134.         {  
  135.             NSNumber *numberMax = [NSNumber numberWithFloat:logPxx[i][j]];  
  136.             [dataArray addObject:numberMax];  
  137.         }  
  138.     }  
  139.     NSArray *colorArray = [[NSArray alloc] initWithArray:[Drawing getColorArrayByValue:dataArray andLengthX:row andLengthY:halfNfft andMax:pxxMax andMin:pxxMin]];  
  140.       
  141.     CGPoint p1, p2;  
  142.     p1 = drawRect.origin;  
  143.     p2.x = p1.x + drawRect.size.width;  
  144.     p2.y = p1.y + drawRect.size.height;  
  145.     Drawing *drawing = [[Drawing alloc] init];  
  146.     [drawing setEnableDrawFieldLeftTopPoint:p1 andRightBottomPoint:p2 andContext:context];  
  147.       
  148.     int nfftAll = [FFT nextNumOfPow2:N];  
  149.     float fftRealTest[nfftAll], fftImgTest[nfftAll];  
  150.       
  151.     [FFT fft:signalVector andOriginalLength:N andFFTCount:nfftAll andFFTReal:fftRealTest andFFTYImg:fftImgTest];  
  152.       
  153.     float t[N];  
  154.     for(int i = 0; i < N; i++)  
  155.     {  
  156.         printf("%f + %fi   ", fftRealTest[i], fftImgTest[i]);  
  157.         t[i] = i;  
  158.         fftRealTest[i] = sqrtf((fftImgTest[i]*fftImgTest[i] + fftRealTest[i]*fftRealTest[i]))/nfftAll;  
  159.     }  
  160.       
  161.     [drawing selectSubDrawFieldWithRow:3 andColumn:1 andNumber:1];  
  162.     [drawing drawLineWithXVector:t andYVector:signalVector andLength:N andLineColor:[UIColor blueColor]];  
  163.       
  164.     [drawing selectSubDrawFieldWithRow:3 andColumn:1 andNumber:2];  
  165.     [drawing drawLineWithXVector:t andYVector:fftRealTest andLength:nfftAll/2 andLineColor:[UIColor blueColor]];  
  166.       
  167.     [drawing selectSubDrawFieldWithRow:3 andColumn:1 andNumber:3];  
  168.     [drawing drawColorPointsWithLengthX:row andLengthY:halfNfft andColorArray:colorArray];  
  169.       
  170.     return isSpecOK;  
  171. }  
2.绘图方法
在上面的代码中Drawing类是自定义的一个绘图类,完成的功能是将数据点显示在模拟器上。绘图的流程时先给定绘图区域的四个顶点坐标和分区块数,然后指定绘图区域序号进行指定区域绘图。

绘图思想是:将给定的数据点确定范围后,一一对应冷暖色条中的颜色,然后绘制每一个颜色点即可。给出绘制颜色点方法如下:

[objc]  view plain copy
  1. //一次性画多个颜色点  
  2. - (void)drawColorPointsWithLengthX:(int)lx andLengthY:(int)ly andColorArray:(NSArray *)colors  
  3. {  
  4.     if([colors count] != lx*ly)  
  5.     {  
  6.         NSLog(@"错误,长度不匹配!");  
  7.         exit(1);  
  8.     }  
  9.       
  10.     float point_x, point_y;  
  11.     UIColor *pointColor = [colors objectAtIndex:0];  
  12.     float divX, divY, widthX, widthY;  
  13.       
  14.     divX = (cornerPoints[1].x - cornerPoints[0].x - 0.6)/((float)lx);  
  15.     divY = (cornerPoints[2].y - cornerPoints[0].y - 1.0)/((float)ly);  
  16.     widthX = ceilf(divX);  
  17.     widthY = ceilf(divY);  
  18.       
  19.     for(int i = 0; i < lx; i++)  
  20.     {  
  21.         point_x = cornerPoints[0].x + 0.6 + divX*i;  
  22.         int countx = i*ly;  
  23.         for(int j = 0; j < ly; j++)  
  24.         {  
  25.             point_y = cornerPoints[2].y - 2.5 - divY*j;  
  26.             pointColor = [colors objectAtIndex:countx+j];  
  27.               
  28.             CGContextSetFillColorWithColor(drawContext, [pointColor CGColor]);  
  29.             CGContextFillEllipseInRect(drawContext, CGRectMake(point_x, point_y, widthX, widthY));  
  30.             //CGContextFillPath(drawContext);  //填充颜色  
  31.         }  
  32.     }  
  33. }  
好啦,该努力的都努力完了,看看效果吧~~~ 羡慕

三、运行测试

1.先看看STFT观察跳频

给定波形由三个频率的信号叠加而成:

signal1(freq=100Hz,Amp=2V)

signal2(freq=150Hz,Amp=2V)

signal3(freq=300Hz,Amp=1.5V)

①利用MATLAB测试

代码:

[objc]  view plain copy
  1. %% 变频信号的fft观察  
  2. close all  
  3. clear,clc  
  4. %% 定义一个变频信号的参数  
  5. PIx2 = 22 * pi;  
  6. Fs = 1500;  
  7. T = 1/Fs;  
  8. LengthOfSignal = 3000;  
  9. NFFT = 2^nextpow2(LengthOfSignal); %要计算的点数  
  10. % NFFT = 128;  
  11. t = (0:LengthOfSignal-1)*T;  
  12. amp1 = 2;  
  13. amp2 = 2;  
  14. amp3 = 1.5;  
  15. offset = 2;  
  16. freq1 = 100;  
  17. freq2 = 150;  
  18. freq3 = 300;  
  19. signal = zeros(1,length(t));  
  20.   
  21. %% 定义信号  
  22. for temp = 1:LengthOfSignal  
  23.     if(temp <= LengthOfSignal/4)  
  24.         signal(temp) =offset + amp1 * sin(PIx2 * freq1 * t(temp));  
  25.     elseif(temp <= LengthOfSignal/2)  
  26.         signal(temp) =offset -1*amp2 * sin(PIx2 * freq2 * t(temp));  
  27.     elseif(temp <= 3*LengthOfSignal/4)  
  28.         signal(temp) =offset -1*amp3 * sin(PIx2 * freq3 * t(temp));  
  29.     else  
  30.         signal(temp) =offset + amp1 * sin(PIx2 * freq1 * t(temp));  
  31.     end  
  32. end  
  33.   
  34. %% 绘制图形  
  35. subplot(311);  
  36. plot(t, signal);  
  37. grid on  
  38. title('signal of different frequency');  
  39. xlabel('time');  
  40. ylabel('amp');  
  41.   
  42. %% fft运算  
  43. fMax = NFFT/2 + 1;  
  44. signalFFT = abs(fft(signal,NFFT));  
  45. % signalFFTShow = 22 * abs(fft(signal(1:fMax),NFFT)/LengthOfSignal);  
  46. signalFFTShow = 22 * signalFFT / LengthOfSignal;  
  47. signalFFTShow(1) = signalFFTShow(1)/2;  
  48. f = Fs/2*linspace(0,1,fMax);  
  49. subplot(312);  
  50. plot(f,signalFFTShow(1:fMax));  
  51. grid on  
  52. title('fft signal');  
  53. xlabel('frequency');  
  54. ylabel('amp');  
  55.   
  56. %% surf测试三维图(不合理x(j),y(i),z(i,j)对应)  
  57.   
  58. subplot(313)  
  59. spectrogram(signal,128,120,128,1.5e3,'yaxis'); %时频域图  
运行结果


②利用iOS程序测试,结果如下


③结果简单总结,从上面两幅图可以看出,

A.matlab运行的结果含有直流分量绘图(ios去掉了)。

B.另外颜色有偏差,原因可能是功率谱密度与冷暖色条对应的方式不同(我没深究。。。)。

2.再看看STFT观察对语音的分析

注:这里的语音时matlab自带的一种小鸟的叫声,可以在matlab的command窗口键入①load chirp;②sound(y)或者sound(y,Fs)听一下。

①看看matlab程序及结果

代码

[objc]  view plain copy
  1. %% spectrogram分析chirp声音  
  2. close all  
  3. clear,clc  
  4.   
  5. %% 基本运算部分  
  6. load chirpData  %载入数据(声音)  
  7. signalOfChirp = chirpData';  
  8. signalOfChirp_5 = signalOfChirp/5;  
  9. lengthOfSignal = length(signalOfChirp);  
  10. Fs = lengthOfSignal;  %采样频率  
  11. T = 1/Fs;  
  12. t = (0:lengthOfSignal-1)*T;  
  13.   
  14. % 绘原始波形图  
  15. figure;  
  16. subplot(311);  
  17. plot(t, signalOfChirp);  
  18. grid on  
  19. title('Original signal(chirpData)');  
  20. xlabel('Time');  
  21. ylabel('Amp');  
  22.   
  23. %% 计算信号的fft  
  24. NFFT = 2^nextpow2(lengthOfSignal); %求最接近2的幂的数作为FFT计算的点数  
  25. fMax = NFFT/2 + 1;                 %频域显示最大的频率  
  26. f = Fs/2*linspace(0,1,fMax);       %确定f数组  
  27.   
  28. signalFFT = abs(fft(signalOfChirp, NFFT)/lengthOfSignal); %求出fft并取模  
  29. signalFFT_5 = 55 * abs(fft(signalOfChirp_5, NFFT)/lengthOfSignal);  
  30. %绘制fft波形图  
  31. subplot(312);  
  32. plot(f,signalFFT(1:fMax));  
  33. grid on  
  34. title('FFT wave of signal');  
  35. xlabel('Frequency');  
  36. ylabel('Amp');  
  37.   
  38. %% 绘制f-t图(STFT)  
  39. subplot(313);  
  40.   
  41. spectrogram(signalOfChirp,128,120,128,Fs,'yaxis'); %时频域图  
  42.   
  43. title('f-t');  
结果如下


②看看ios的测试结果


③结论

从图中看差不多完全一样,还有些小激动呢~


3.比一比Matlab和iOS的效率如何

说是比一比效率,其实就是看谁跑得快,看谁用时多。效率与当前的运行环境等各种因素有关,所以这里只做简单的测试。。。下标是经过多次测试后去多个靠谱的数平均得到的。



看看人家运行的效率,好奇心四起有木有?!!!!我将继续。。。奋斗


另外,附代码用时测试的方法

[objc]  view plain copy
  1. NSDate *start1 = [NSDate date];  
  2.   
  3. // ...需要测试的代码  
  4.   
  5. NSDate *end1 = [NSDate date];  
  6. NSLog(@"FFT time %f ", [end1 timeIntervalSinceDate:start1]);  



http://chatgpt.dhexx.cn/article/X6mhc2aj.shtml

相关文章

nvme分区选mbr还是guid_win7安装系统硬盘模式mbr和guid选哪个?

有很多系统之家的用户&#xff0c;还是喜欢安装win7系统的。但是在新的硬盘里面我们要分区的话&#xff0c;会出现mbr和guid是硬盘分区的两个格式&#xff0c;很多用户在做系统的时候不知道选哪个好&#xff0c;其实最好根据自己的电脑的配置&#xff0c;下面来看看详细的介绍吧…

uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及

我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR。 啥是硬盘分区呢?举个例子你就明白了,很多人去买电脑的时候,比如你买的电脑只有一块硬盘,店家就会给你分区,把这一块硬盘分成好几个区,比如分成了系统,软件,文档这样三个,那么你打开【我的电脑】后就会…

nvme分区选mbr还是guid_SSD里的特例:NVME固态改MBR格式、装Win7

问题一:NVME固态是否支持MBR文件格式: 场景:前几天朋友兴致冲冲的买了个建兴T10,准备好好体验一下。但是正当他吃着火锅,唱着歌,突然就给麻匪劫了——电脑系统竟然接二连三莫名奇妙的崩溃。 于是朋友就向我求助。由于他的电脑最近除了换了硬盘,并没有添加任何其他的硬设…

guid备份分区表crc错误_硬盘GPT和MBR分区表转换方法

随着硬盘容量越来越大,传统的MBR硬盘分区模式已经不能满足发展需要,预装win8或win10系统的硬盘默认都是GPT分区表(GUID格式),GPT识别2T以上的硬盘以及UEFI启动模式。不过在对系统进行重装时,经常会遇到无法安装在GPT或MBR硬盘中的问题,那么这个时候就需要对硬盘的分区表进…

GUID与MBR

磁盘分区表方案 全局唯一标识分区表是一个实体硬盘的分区表的结构布局的标准。 先说说目前广泛使用的磁盘分区表方案。传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中&#xff0c;每个分区项占用16个字节&#xff0c;这16个字节中…

如何将MBR转为GUID?这方法易于使用且安全!

为什么要将MBR转为GUID(GPT)&#xff1f; MBR代表主引导记录&#xff0c;它使用Legacy BIOS分区表。而GPT磁盘&#xff0c;也就是GUID分区表的缩写&#xff0c;是一种引入了统一可扩展固件接口 (UEFI) 的新布局。GPT磁盘有2个主要优势&#xff1a; GPT磁盘每个分区…

计算机硬盘分区信息,你知道电脑硬盘分区Guid格式和MBR格式有什么区别吗?来看看!...

现在的电脑随着技术的更新&#xff0c;传统的MBR格式虽然支持兼容&#xff0c;但是win10系统基本都使用了GUID分区格式&#xff0c;这样会让整体的系统运作得更有效率。如果还在使用MBR格式的用户想安装系统&#xff0c;没有设置好分区格式&#xff0c;容易导致安装出错&#x…

nvme分区选mbr还是guid_UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别

UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别?很多电脑小白都搞不懂UEFI、GPT、BIOS、MBR到底是什么意思,下面跟随小白系统一起深入了解下UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别吧。 一、了解专业名词 BIOS,全称"Basic Input Output System",中…

nvme分区选mbr还是guid_怎么分辨硬盘是GUID格式还是MBR格式以及怎样更改

首先我们要大概了解一下MBR和GUID是什么 mbr是指主引导记录,guid是指全局唯一标识符(其实我也不太懂这是啥),两者都是硬盘的一种启动模式(大概是这个意思,欢迎指教) 但是mbr只支持2x1024mb,也就是传统意义上的2tb的储存,并且只能分最多4个区,而guid理论上来讲可以有无…

nvme分区选mbr还是guid_系统重装,硬盘分区MBR和GPT选哪个好?看完才知原来有这讲究!...

在重装系统时,不少用户会问老毛桃电脑的硬盘选择MBR格式还是GPT格式好呢?其实,如何选择格式和你用的电脑是BIOS启动或是UEFI启动有很大的联系。我们都知道现在大家较为常用的要么是BIOS+MBR模式,要么是UEFI+GPT模式,选择任意一种模式的分区对系统运行不会造成太大的影响。…

nvme分区选mbr还是guid_重装系统时,磁盘分区MBR和GPT模式哪个好?原来还有这两种区别!...

相信大家在重装系统之前就会将电脑磁盘进行分区,毕竟只有一个分区是不可以进行重装系统的。而且磁盘分区方便管理磁盘,每个分区之间相互独立,数据不容易产生混淆。那么大家在创建磁盘分区的时候,肯定都会遇到MBR和GPT两种引导模式,这时候就会产生人生的思考:究竟应该怎么…

nvme分区选mbr还是guid_老毛桃winpe的DiskGenius分区工具使用说明

在对磁盘进行分区时,存在着一大堆的设置,到底需要如何设置?分区表是什么?如何进行4K对齐?以下操作建议PE下使用,前期需要准备:制作老毛桃U盘启动盘(U盘大小需要8G以上)。 操作指引: 起始分区操作请看:第1步 GUID分区表(GPT硬盘)操作请看:第2~7步; MBR分区表操作请看:…

服务器系统要用GUID还是MBR,win7mbr和guid应该选哪一个

win7mbr和guid是硬盘分区的两个格式&#xff0c;很多用户在做系统的时候不知道选哪个好&#xff0c;其实最好根据自己的电脑的配置&#xff0c;下面来看看详细的介绍吧。 win7mbr和guid选哪个 WIN7&#xff1a;建议MBR分区。因为Windows 7默认不支持UEFI系统安装&#xff0c;无…

服务器系统要用GUID还是MBR,分享win10分区格式MBR和GUID有什么区别 教你区分MBR和GUID格式...

今天IT天空小编要给大家分享下最新的教程 电脑装win10系统需要选择正确的分区格式&#xff0c;这样电脑才能保持正常运转&#xff0c;如果格式安装错误&#xff0c;电脑就没办法继续运行了。一般情况下&#xff0c;win10分区格式MBR和GUID两种选择&#xff0c;那么这两者有何区…

【小白装系统】——硬盘分区表格式GUID和MBR知识普及

我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR。 怎么判断自己硬盘是哪一种: 如果你的电脑原装系统是win8或者以上的,那么他的硬盘分区表格式为GUID(GPT)格式的;如果是win7以下的,那么一般就是MBR的了。 除此之外我们还可以利用分区工具DiskGen…

python输出去空格_python不空格

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 退格(backspace) e 转义 000 空 n 换行 v 纵向制表符 t 横向制表符 r 回车 f 换页oyy 八进制数yy代表的字符,例如:o12代表换行 xyy 十进制数yy代表的字符,例…

python中去除空格用什么函数_python中用什么函数去掉空格

python中去掉空格的方法有以下几种 1.使用lstrip()函数去掉左边空格string " * it is blank space test * "print (string.lstrip()) 输出结果为&#xff1a;* it is blank space test * 2.使用rstrip()函数去掉右边空格string " * it is blank space tes…

python输出去掉空格

在输出后面加上sep ah bo print(a,ell,b,sep) 不加sep: 加上sep:

chatgpt赋能python:Python去除空格的完全指南

Python去除空格的完全指南 Python是一种高级编程语言&#xff0c;拥有无限的软件开发领域。Python非常受欢迎&#xff0c;因为它易于学习&#xff0c;使用&#xff0c;可读性好&#xff0c;功能强大。但是&#xff0c;编写Python程序时&#xff0c;常常需要处理字符串中的空格…

Python 去掉空格的方法

1 使用 replace &#xff08;注意replace 第一个冒号中间有一个空格&#xff09; # 去掉全部空格头部&#xff0c;尾部&#xff0c;中间 key input("输入内容").replace(" ", "") print("我是头部:" key ":我是尾部") 实…