我使用的过滤器等中记载到结账时裂伤文件在这里.现在的问题是过滤器定义只存储在我的本地配置文件中:
$ 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使用它吗?
在调试一些崩溃时,我遇到了一些代码,简化了以下情况:
#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编译器选项):
obj.setx(double …我知道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)
和图表.

请帮助=(
我想用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++中泛型函数的一些限制吗?此外,我的程序不会打印数组的浮动答案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中进行离散傅立叶变换.
最初只是蛮力方法.首先,我让程序打开一个数据文件(幅度)并将数据放入一个数组(只有一个,因为我限制自己使用实值输入).
但是变换看起来不对,所以我尝试生成一个简单的波函数并检查它是否正确转换.
这是我的代码,剥去了钟声和口哨声:
#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) 我正在编写一个程序来通过网络实现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错误?
我有一个工作实现NAudio的wasapi环回录制和数据的FFT.我得到的大多数数据都是应该的,但每隔一段时间(10秒到几分钟的间隔),它几乎在所有频率上显示振幅.
基本上,图像从右到左滚动,时间和频率从底部的最低频率开始以对数标度进行.这些线是错误.据我所知,那些不应该在那里.
我得到音频缓冲区并将样本发送到聚合器(应用汉明窗口),该聚合器实现了NAudio FFT.在我以任何方式修改它之前检查了数据(FFT结果)(图像不是来自原始FFT输出,而是desibel缩放),确认FFT结果给出了那些线.我还可以指出图片是用LockBits修改的,所以我认为那里的逻辑有问题,但这就是为什么我检查了显示相同问题的FFT输出数据.
好吧,我可能是错的,问题可能在某个地方,我说它不是,但它似乎真的来自FFT或缓冲数据(数据本身或样本的聚合).不知怎的,我怀疑缓冲区本身是否像这样被破坏了.
如果有人知道可能导致这种情况的话,我会非常感激!
UPDATE
所以我决定绘制整个FFT结果范围而不是它的一半.它表现出一些奇怪的.我不确定FFT,但我认为傅里叶变换应该给出一个反映在中间的结果.这当然不是这种情况.
图像是线性比例的,因此图像的中间位置是FFT结果的中间点.底部是第一个,顶部是最后一个.
我正在播放一个10kHz的正弦波,它给出了两条水平线,但顶部超出了我的范围.看起来这些线条在图片的底部四分之一处被镜像,所以这对我来说也很奇怪.
更新2
所以我将FFT大小从4096增加到8192再次尝试.这是我输出正弦频率的输出.
似乎结果反映了两次.一旦在中间,然后再在上半部和下半部.巨大的线条现在已经消失了......看起来这些线条现在只出现在下半部分了.
在使用不同的FFT长度进行一些进一步测试之后,该线路中的线条似乎是完全随机的.
更新3
我做了很多测试.我添加的最新内容是样本重叠,以便在下一个FFT开始时重用示例数组的后半部分.在汉明和汉恩的窗户上,它给了我很大的强度(就像我发布的第二张照片一样)但不是布莱克曼哈里斯.禁用重叠会删除每个窗口函数上的最大错误.即使使用BH窗口,顶部图片中的较小错误仍然存在.我仍然不知道为什么会出现这些线条.
我当前的表单允许控制使用哪个窗口功能(前面提到的三个),重叠(开/关)和多个不同的绘图选项.这允许我在更改时比较所有影响方效果.
我会进一步调查(我很确定我在某些方面犯了一个错误)但是很好的建议非常受欢迎!
我是数字信号处理的新手.我有以下传感器样本数据
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]是DFT的x[n],二者的长度N.
有任何建议,如何使用MATLAB计算总能量?
我正在关注scipy.signal.spectrogram 上的教程示例。是否可以限制我们想要计算频谱图的频率,假设在 1000-2000Hz 范围内。根据 FFT,我们将获得一半的采样频率。如果不是,那么我可以对输出进行切片以获得 3D 矩阵,t,f,Sxx其中我将频率限制为 1000-2000 Hz?在我的情况下,我的信号仅包含特定范围的频率,并且保留所有频率对我的分析来说代价高昂。