小编Sle*_*Eye的帖子

将git config存储为存储库的一部分

我使用的过滤器等中记载到结账时裂伤文件在这里.现在的问题是过滤器定义只存储在我的本地配置文件中:

$ cat .git/config
....
[filter "dater"]
        smudge = /home/.../expand_date
        clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"
Run Code Online (Sandbox Code Playgroud)

如果我的同事想要从这种Date扩展中受益,他们需要复制我的过滤器定义.如果我改变它,我需要通知他们等等.

那么我可以将这个过滤器定义部分存储.git/config在存储库中并让git使用它吗?

git

134
推荐指数
2
解决办法
4万
查看次数

在VS2012中使用sqrt内部堆栈运行时检查失败

在调试一些崩溃时,我遇到了一些代码,简化了以下情况:

#include <cmath>
#pragma intrinsic (sqrt) 

class MyClass
{
public:
  MyClass() { m[0] = 0; }
  double& x() { return m[0]; }
private:
  double m[1];
};
void function()
{
  MyClass obj;
  obj.x() = -sqrt(2.0);
}

int main()
{
  function();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当使用VS2012(Pro Version 11.0.61030.00 Update 4和Express for Windows Desktop版本11.0.61030.00 Update 4)在Debug | Win32中内置时,代码会在结束时触发运行时检查错误. function执行显示为(以随机方式):

运行时检查失败#2 - 变量'obj'周围的堆栈已损坏.

要么

Test.exe中发生缓冲区溢出,该程序已损坏程序的内部状态.按Break可调试程序或继续终止程序.

据我所知,这通常意味着堆栈上的对象存在某种缓冲区溢出/欠载.也许我忽略了一些东西,但是我无法在这个C++代码中看到任何可能发生这种缓冲区溢出的代码.在对代码进行各种调整并逐步执行函数生成的汇编代码之后(参见下面的"详细信息"部分),我很想说它看起来像Visual Studio 2012中的一个错误,但也许我是只是在太深,缺少一些东西.

是否有内部函数使用要求或此代码不符合的其他C++标准要求,这可以解释这种行为?

如果没有,禁用函数内在是获得正确的运行时检查行为的唯一方法(除了0-sqrt下面提到的可能很容易丢失的解决方法)?

细节

围绕代码,我注意到当我sqrt通过注释掉#pragma行来禁用内在函数时,运行时检查错误消失了.

否则使用sqrt内部编译指示(或/ Oi编译器选项):

  • 使用诸如此类的setter obj.setx(double …

c++ visual-studio-2012

15
推荐指数
1
解决办法
588
查看次数

在八度音阶上绘制FFT

我知道FFT会将时域中的函数更改为频域中显示的函数.

然而,当我尝试在频域中绘制所述图形时,我只能通过将时间用作X轴来使其正常工作,当显然应该不是那个时,而是频率.

此外,我只能通过将y轴除以某个整数来获得与原始信号中的幅度匹配的幅度.这是为什么?

这是我的代码

t=0:0.001:2

x=2*sin(20*pi*t) + sin(100*pi*t)
subplot(2,1,1)
plot(1000*t,x)
grid
xlabel("Time in milliseconds")
ylabel("Signal amplitude")

subplot(2,1,2)
y=fft(x)
plot(1000*t,abs(y))
xlabel("Frequency")
ylabel("Signal amplitude")
Run Code Online (Sandbox Code Playgroud)

和图表.

在此输入图像描述

请帮助=(

plot signal-processing fft octave

13
推荐指数
3
解决办法
4万
查看次数

如何使用gtest测试带有多个模板参数的c ++模板类?

我想用gtest测试模板类.我TYPED_TEST在gtest手册中读到了s,并查看了他们引用的官方示例(samples\sample6_unittest.cc).示例中的此模板只有一个模板参数.但是,我的代码有两个模板参数,我该如何测试呢?

我有以下代码:

// two element type
template <typename E, typename F>
class QueueNew
{
public:
    QueueNew() {}
    void Enqueue(const E& element) {}
    E* Dequeue() {}
    F size() const 
    {
        return (F)123;
    }
};
Run Code Online (Sandbox Code Playgroud)

我为此编写了下面的测试代码:

template <class E, class F>
QueueNew<E, F>* CreateQueue();

template <>
QueueNew<int, int>* CreateQueue<int, int>()
{
    return new QueueNew < int, int > ;
}
template <>
QueueNew<char, char>* CreateQueue<char, char>()
{
    return new QueueNew < char, char > ;
}

template <class …
Run Code Online (Sandbox Code Playgroud)

c++ templates googletest

8
推荐指数
2
解决办法
5036
查看次数

如何在c ++中使用泛型函数?

我编写了这段代码,如果我取消注释第二行,我会收到错误 - "模板参数推断/替换失败:".是因为C++中泛型函数的一些限制吗?此外,我的程序不会打印数组的浮动答案b.有什么我可以做的吗?(抱歉在单个帖子中提出2个问题.)
PS:我刚刚开始学习C++.

#include <iostream>
 using namespace std;

 template <class T>
 T sumArray(  T arr[], int size, T s =0)
 {
     int i;
     for(i=0;i<size;i++)
     {  s += arr[i];
     }
     return s;
 }

 int main()
 {
     int a[] = {1,2,3};
     double b[] = {1.0,2.0,3.0};
     cout << sumArray(a,3) << endl;
     cout << sumArray(b,3) << endl;
     cout << sumArray(a,3,10) << endl;
     //cout << sumArray(b,3,40) << endl; //uncommenting this line gives error

     return 0;
 }
Run Code Online (Sandbox Code Playgroud)


编辑1:更改40到40.0后,代码工作.这是我得到的输出:
6
6
16
46
我仍然没有得到第二种情况下的浮动答案.有什么建议吗?

c++ precision templates

8
推荐指数
1
解决办法
1210
查看次数

离散傅里叶变换给出不正确的结果

我试图在C中进行离散傅立叶变换.

最初只是蛮力方法.首先,我让程序打开一个数据文件(幅度)并将数据放入一个数组(只有一个,因为我限制自己使用实值输入).

但是变换看起来不对,所以我尝试生成一个简单的波函数并检查它是否正确转换.

这是我的代码,剥去了钟声和口哨声:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define M_PI 3.14159265358979323846

//the test wavefunction
double theoretical(double t)
{
    double a = sin(M_PI * t) + 2 * sin(2 * M_PI * t) + 4 * sin(4 * M_PI * t); 
    return a;
}
//-------------------------------------------------------------------------
void dftreal(double inreal[], double outreal[], double outimag[], int linecount) 
{
    int n, k;
    for (k = 0; k < linecount; k++)
    {
        double sumreal = 0;
        double sumimag = 0;

        for (n …
Run Code Online (Sandbox Code Playgroud)

c dft

7
推荐指数
1
解决办法
243
查看次数

gdb与stdin重定向有关

我正在编写一个程序来通过网络实现Dinic的max-flow算法.网络可以手动编写,也可以使用stdin重定向从文件加载.我已经能够使用gdb用小文件(大约30行)调试程序,但是当我尝试使用更大的文件(> 1000行)调试程序时遇到了麻烦.代码本身是这样的:

uint32_t read_lines = 0;
while(!feof(stdin))
{
    err = fscanf(stdin, "%u %u %u\n", &n1, &n2, &c);
    if (err != 3)
    {
         printf("read_lines=%u\n", read_lines); /*for debugging purposes*/
    }
    read_lines += 1;
    /* write to debug file */
    fprintf(debug, "line %u: %u %u %u\n", read_lines, n1, n2, c);
}
Run Code Online (Sandbox Code Playgroud)

如果我运行没有gdb的程序,它运行,不好,因为它生成一个分段错误(这是我试图使用gdb的原因),但它通过这部分"解析"输入文件(并写入它进入输出调试文件).但是,如果我输入:

gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
Run Code Online (Sandbox Code Playgroud)

我明白了:

(gdb) Program exited with 01 code.
Run Code Online (Sandbox Code Playgroud)

当我打开调试文件时,它大约是2000行,当它应该是最多1000行,这是输入文件的长度.

我再说一遍,这种情况发生在"大"文件中,它适用于小文件.问题是,我在使用gdb时遗漏了什么,或者这是一个gdb错误?

c redirect stdin gdb

6
推荐指数
1
解决办法
9852
查看次数

NAudio fft结果给出所有频率C#的强度

我有一个工作实现NAudio的wasapi环回录制和数据的FFT.我得到的大多数数据都是应该的,但每隔一段时间(10秒到几分钟的间隔),它几乎在所有频率上显示振幅.

错误图片

基本上,图像从右到左滚动,时间和频率从底部的最低频率开始以对数标度进行.这些线是错误.据我所知,那些不应该在那里.

我得到音频缓冲区并将样本发送到聚合器(应用汉明窗口),该聚合器实现了NAudio FFT.在我以任何方式修改它之前检查了数据(FFT结果)(图像不是来自原始FFT输出,而是desibel缩放),确认FFT结果给出了那些线.我还可以指出图片是用LockBits修改的,所以我认为那里的逻辑有问题,但这就是为什么我检查了显示相同问题的FFT输出数据.

好吧,我可能是错的,问题可能在某个地方,我说它不是,但它似乎真的来自FFT或缓冲数据(数据本身或样本的聚合).不知怎的,我怀疑缓冲区本身是否像这样被破坏了.

如果有人知道可能导致这种情况的话,我会非常感激!

UPDATE

所以我决定绘制整个FFT结果范围而不是它的一半.它表现出一些奇怪的.我不确定FFT,但我认为傅里叶变换应该给出一个反映在中间的结果.这当然不是这种情况.

图像是线性比例的,因此图像的中间位置是FFT结果的中间点.底部是第一个,顶部是最后一个.

wholefft

我正在播放一个10kHz的正弦波,它给出了两条水平线,但顶部超出了我的范围.看起来这些线条在图片的底部四分之一处被镜像,所以这对我来说也很奇怪.

更新2

所以我将FFT大小从4096增加到8192再次尝试.这是我输出正弦频率的输出.

图片3

似乎结果反映了两次.一旦在中间,然后再在上半部和下半部.巨大的线条现在已经消失了......看起来这些线条现在只出现在下半部分了.

在使用不同的FFT长度进行一些进一步测试之后,该线路中的线条似乎是完全随机的.

更新3

我做了很多测试.我添加的最新内容是样本重叠,以便在下一个FFT开始时重用示例数组的后半部分.在汉明和汉恩的窗户上,它给了我很大的强度(就像我发布的第二张照片一样)但不是布莱克曼哈里斯.禁用重叠会删除每个窗口函数上的最大错误.即使使用BH窗口,顶部图片中的较小错误仍然存​​在.我仍然不知道为什么会出现这些线条.

我当前的表单允许控制使用哪个窗口功能(前面提到的三个),重叠(开/关)和多个不同的绘图选项.这允许我在更改时比较所有影响方效果.

我会进一步调查(我很确定我在某些方面犯了一个错误)但是很好的建议非常受欢迎!

c# fft naudio

6
推荐指数
1
解决办法
1万
查看次数

计算时域数据的能量

我是数字信号处理的新手.我有以下传感器样本数据

Time(milliseconds)            data
------------------    -------------------
0                     0.30865225195884705   
60                    0.14355185627937317   
100                  -0.16846869885921478   
156                  -0.2458019256591797    
198                  -0.19664153456687927
258                   0.27148059010505676   
305                  -0.16949564218521118   
350                  -0.227480947971344 
397                   0.23532353341579437   
458                   0.20740140974521637
Run Code Online (Sandbox Code Playgroud)

这意味着在时间上0我有价值,0.30865225195884705并且在时间上60我有价值0.14355185627937317等等.

从每个传感器获取数据10 milliseconds.所以,我假设采样率应该设置为100 Hz.

我想计算时域信号的总能量.

我读到它可以使用Parseval定理计算如下:

在此输入图像描述

其中X[k]DFTx[n],二者的长度N.

有任何建议,如何使用MATLAB计算总能量?

matlab signal-processing fft dft

5
推荐指数
1
解决办法
6911
查看次数

限制 scipy.signal.spectrogram 仅计算特定频率

我正在关注scipy.signal.spectrogram 上的教程示例。是否可以限制我们想要计算频谱图的频率,假设在 1000-2000Hz 范围内。根据 FFT,我们将获得一半的采样频率。如果不是,那么我可以对输出进行切片以获得 3D 矩阵,t,f,Sxx其中我将频率限制为 1000-2000 Hz?在我的情况下,我的信号仅包含特定范围的频率,并且保留所有频率对我的分析来说代价高昂。

signal-processing fft scipy spectrogram

5
推荐指数
1
解决办法
1753
查看次数