小编lea*_*vst的帖子

如何在GUI运行时拦截Matlab中的击键

你知道如何在Matlab gui运行时将键盘笔划读入Matlab吗?(即,不使用"输入"功能,它向命令窗口发送提示并需要您按返回).

我们希望尽可能避免使用mex函数.

keyboard matlab user-interface interception

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

有选择地抑制未使用的lambda的"未使用的变量"警告

有没有办法抑制特定文件,命名空间或特定变量的"未使用的变量"警告?

我问,因为我有一个包含lambda函数列表的命名空间.有些现在没有使用,但可能会及时使用.如果这些是常规免费功能,如果有些未使用,我不会收到警告.但是,因为它们是lambda,所以我最终得到了一堆编译器警告.

希望使用编译器标志除去所有这些类型的警告,因为通常情况下,它是非常有用的编译器捕捉未使用的变量.但是,有关未使用的实用程序功能的一堆警告会将噪声添加到其他有用的信息中.

c++ lambda compiler-warnings c++11

4
推荐指数
1
解决办法
2369
查看次数

优化IIR滤波器

与IIR滤波器系数有关的快速问题.这是我在网上找到的直接形式II双二阶IIR处理器的一个非常典型的实现.

// b0, b1, b2, a1, a2 are filter coefficients
// m1, m2 are the memory locations
// dn is the de-denormal coeff (=1.0e-20f) 

void processBiquad(const float* in, float* out, unsigned length)
{
    for(unsigned i = 0; i < length; ++i)
    {
        register float w = in[i] - a1*m1 - a2*m2 + dn;
        out[i] = b1*m1 + b2*m2 + b0*w;
        m2 = m1; m1 = w;
    }
    dn = -dn;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,"寄存器"在某种程度上是不必要的,因为现代编译器的智能程度如何.我的问题是,将滤波器系数存储在单个变量中而不是使用数组并取消引用这些值是否有任何潜在的性能优势?这个问题的答案是否取决于目标平台?

out[i] = b[1]*m[1] + b[2]*m[2] + b[0]*w; …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization signal-processing filter

3
推荐指数
1
解决办法
2227
查看次数

通过访问器功能使用重载的operator []

我有一个访问函数,它返回一个对类型(std :: map)的const引用......

myMap_t const& getMap() const {return paramMap;} 
Run Code Online (Sandbox Code Playgroud)

该类型具有重载[]运算符.然后[],以类似下面的方式直接从getter函数使用运算符的语法是什么,但这实际上有效.

parameter = contextObj.getMap()[key];
Run Code Online (Sandbox Code Playgroud)

错误信息是:

context.cpp:35: error: passing   
  'const std::map<
     std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
     float, 
     std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, 
     std::allocator<std::pair<
       const std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
       float> > >'
as 'this' argument of 
  '_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&)  
with 
  _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
  _Tp = float, 
  _Compare = std::less<std::basic_string<char, std::char_traits<char>,  td::allocator<char> > >, 
  _Alloc = std::allocator<std::pair<
    const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
    float> >]' 
discards …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading accessor

3
推荐指数
1
解决办法
436
查看次数

数组索引时的枚举类性能

我可以期待看到这个演员的性能受到打击..

enum class myEnum {A,B,C};
myArray[(int)myEnum::A] = 123;
Run Code Online (Sandbox Code Playgroud)

相比呢?

enum myEnum {A,B,C};
myArray[A] = 123;
Run Code Online (Sandbox Code Playgroud)

我倾向于类型安全的新风格枚举类,但不想以牺牲性能为代价.

c++ performance enums c++11

3
推荐指数
1
解决办法
2226
查看次数

有没有自动将头文件转换为cpp和hpp文件的工具?

我有一个(可能是坏的)习惯,在尝试想法时将所有内容都编码到一个整体头文件中,将所有实现代码与类定义一起放置。随着代码的扩展,导航文件变得困难。因此,我将代码重构为单独的文件,并将实现细节(cpp 文件)与接口(hpp 文件)分开。

所涉及的费力复制/粘贴似乎是机器的工作。有没有任何简单的工具可用于此任务?

c++ ide

3
推荐指数
1
解决办法
3674
查看次数

这个宏在类定义的开头是什么?

我正在查看库的源代码,并使用以下表单定义了许多类

class THING_API ClassName 
{
...
Run Code Online (Sandbox Code Playgroud)

跳转到宏定义...

#ifndef THING_API
 #define THING_API   /**< This macro is added to all public class declarations. */
#endif
Run Code Online (Sandbox Code Playgroud)

这可能是什么,这是一种常见的技术吗?

c++ macros class c-preprocessor

3
推荐指数
1
解决办法
144
查看次数

为什么隐式类型转换在此代码中导致错误?

#include <iostream>

int main()
{
    int number=65536;
    long long temp=number*number;
    std::cout << temp << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

广场65536明显超出了int范围.现在,如果我宣布tempint,我会理解为什么这会失败.但即便如此long long,输出总是如此0.我相信这与隐式类型转换有些相关,但我不明白为什么结果如此0.

这是因为c ++根本不允许转换intlong?如果是这样,为什么这个数字较小?

c++ types

3
推荐指数
1
解决办法
117
查看次数

使用Matlab检测并标记功率谱分析图上的最大峰值?

我试图在Matlab中创建的功率谱密度图上找到最大峰值.我可以很好地创建情节但是很难正确地标记它.我使用find peak和max函数来找到它,但是Matlab无法正确标记它.它找到了正确的高度但是向左或向右标记了一点.这是代码:

data = load ('EEGData(test1).txt', '-ascii');
figure(1)
plot(data)

Y =fft(data,251);

Pyy = Y.*conj(Y)/251;

f = 1000/251*(0:127);

figure(2) 
plot(f,Pyy(1:128))
title('Power spectral density')
xlabel('Frequency (Hz)')

[a,b] = findpeaks(Pyy(1:128));
MAX = max(a);
hold on
plot(f(b), MAX,'or')
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

matlab plot

2
推荐指数
1
解决办法
5239
查看次数

从迭代器中推导出值类型,用于模板函数的返回类型

只需使用这个简单的片段来试验多个返回值,该片段可以计算容器的总和和均值.

template<typename Iter>
std::tuple<double, double> summean(Iter first1, Iter last1)
{
    double sum = std::accumulate(first1, last1, 0.0);
    double mean = sum / (last1-first1);

    return {sum, mean};
}
Run Code Online (Sandbox Code Playgroud)

该演示使用双精度计算作为演示.在计算元组的返回类型时,是否有一种优雅的方法来使用容器中值的精度?

c++ templates types

2
推荐指数
1
解决办法
748
查看次数